xs-devでRaspberry PiにNode-RED MCUの環境を構築する
はじめに
今回はRaspberry PiにNode-RED MCUの環境を構築してみました。
少し前に発売された書籍での方法とは違って、xs-devを使っています。構築が楽になるそうですが、コマンドラインには慣れないので苦戦しました...
マイコンにプログラムを書き込んで動作確認はできたので、その手順を紹介します。
サポートページにて、バージョンアップデート後の環境構築について記載されています!
これから環境を構築する際はご確認ください。
はじめてのNode-RED MCU Edition ビジュアルプログラミングでマイコンを動かそう! (kohgakusha.co.jp)
※バージョンのアップデートに合わせて、補足書も出版されています。私も執筆させて頂きました。
2023/5/20版:https://techbookfest.org/product/b3T2EQ7Sw4BGzjwvv1ak1K?productVariantID=6KyS0CyiTvYmyBZDtLb4Uh
2023/11/11版:https://techbookfest.org/product/wwADMShyx2RuB9zjnrUaz0?productVariantID=6v5hDHmdjF9Qv0t8H2KgUj
2024/5/12版:https://techbookfest.org/product/46zXPBxGAEdcF5zcxK5MD1?productVariantID=14UkjETKEr6L0Y1PvCdV66
▼書籍の紹介はこちら
▼以前の記事はこちら
▼Node-REDとNode-RED MCUの簡単な紹介はこちら
Raspberry Pi 400について
今回の環境構築には、Raspberry Pi 400を使いました。他のRaspberry Piと異なり、キーボードが一体型になっています。Raspberry Piの在庫が全然無かった時期に販売していたので購入しました。
▼Amazonでも販売されています。
OSはSDカードでインストールするので、他のRaspberry Piでも同じように構築できると思います。家で起動しておいて、MQTTのサーバーにでもしようかなと思っています。
▼見た目が完全にキーボードですが、中にRaspberry Piが入っています。ちゃんとGPIOピンもついています。
▼起動時はこんな感じ。モニター周りがスッキリするかも?
環境構築をする
プログラミングをする上で環境構築が第一の関門だと思っているのですが、今回も何かと行き詰りました。特にコマンドラインでインストールするのは苦手です....
人によって環境が異なる可能性も十分にあるのでご注意ください。なおコマンドの入力にはRaspberry Piにすでに入っているLXTerminalを使っています。
Node.jsとnpmのインストール
▼インストール用のコマンド
sudo apt-get install -y nodejs
▼バージョンを確認するコマンド
node -v
xs-devのインストール
▼xs-devをインストールするコマンドはこちら。npmを使います。
npm install -g xs-dev
permission deniedというエラーが出る場合
コマンドを実行した際に「権限が無い」という意味のエラーが出ました。そこで、Windowsと同じように管理者権限で実行できるのかな?と思い調べてみました。
▼こちらのページを参考にしました。
https://www.fabshop.jp/raspberrypi-administrator-01/
sudo passwd root
でパスワードを設定し、
su
で管理者権限で起動する必要があります。その状態でコマンドを入力するとインストールできました。
追記
後でアドバイスを頂いたのですが、管理者権限で実行する際には、コマンドの先頭にsudoを付けると良いそうです。sudoを付けると解決するかもしれません。
sudoとsuの違いについては、調べていると結構深そうですね。管理者権限で実行することから、安全性などについて考慮する必要がありそうです。
libudev.hが無い場合
私の場合はlibudev.hについて、"No such file or directory"というエラーが出ました。これは環境によって異なるかもしれません。
▼こちらのコマンドでインストールしました。
sudo apt-get install libudev-dev
xs-devのセットアップ
▼xs-devのセットアップコマンドはこちら
xs-dev setup
このコマンドだと、mcconfigでバイナリファイルを実行できないというエラーが発生しました。これはmsconfigがWindows用だからだと思います。
もう一つセットアップ用のコマンドがあったのですが、そちらでは実行できました。
エラー文はこちら
background@raspberrypi:~ $ xs-dev setup
Setting up Linux tools!
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
⠋ Installing dependencies…bison はすでに最新バージョン (2:3.7.5+dfsg-1) です。
flex はすでに最新バージョン (2.6.4-8) です。
gcc はすでに最新バージョン (4:10.2.1-1+rpi1) です。
git はすでに最新バージョン (1:2.30.2-1+deb11u2) です。
gperf はすでに最新バージョン (3.1-1) です。
libncurses-dev はすでに最新バージョン (6.2+20201114-2+deb11u1) です。
make はすでに最新バージョン (4.3-4.1) です。
wget はすでに最新バージョン (1.21-1+deb11u1) です。
⠋ Installing dependencies…以下のパッケージが自動でインストールされましたが、もう必要とされていません:
ax25-node libax25 openbsd-inetd tcpd
これを削除するには 'sudo apt autoremove' を利用してください。
⠹ Installing dependencies…アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 228 個。
✔ Installing dependencies…
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
⠇ Installing GTK+ 3…libgtk-3-dev はすでに最新バージョン (3.24.24-4+rpt12+deb11u3) です。
⠏ Installing GTK+ 3…以下のパッケージが自動でインストールされましたが、もう必要とされていません:
ax25-node libax25 openbsd-inetd tcpd
これを削除するには 'sudo apt autoremove' を利用してください。
⠋ Installing GTK+ 3…アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 228 個。
✔ Installing GTK+ 3…
ℹ Downloading release tools
✔ Getting latest Moddable-OpenSource/moddable release
⠋ Installing simulator/usr/lib/node_modules/xs-dev/node_modules/gluegun/build/index.js:15
throw up;
^
Error: Command failed with exit code 126: mcconfig -m -p x-lin /home/background/.local/share/moddable/tools/xsbug/manifest.json
/home/background/.local/share/moddable/build/bin/lin/release/mcconfig: 行 3: /home/background/.local/share/moddable/build/bin/lin/release/tools: バイナリファイルを実行できません: 実行形式エラー
at makeError (/usr/lib/node_modules/xs-dev/node_modules/execa/lib/error.js:60:11)
at handlePromise (/usr/lib/node_modules/xs-dev/node_modules/execa/index.js:118:26)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
shortMessage: 'Command failed with exit code 126: mcconfig -m -p x-lin /home/background/.local/share/moddable/tools/xsbug/manifest.json',
command: 'mcconfig -m -p x-lin /home/background/.local/share/moddable/tools/xsbug/manifest.json',
escapedCommand: 'mcconfig -m -p x-lin "/home/background/.local/share/moddable/tools/xsbug/manifest.json"',
exitCode: 126,
signal: undefined,
signalDescription: undefined,
stdout: '',
stderr: '/home/background/.local/share/moddable/build/bin/lin/release/mcconfig: 行 3: /home/background/.local/share/moddable/build/bin/lin/release/tools: バイナリファイルを実行できません: 実行形式エラー',
failed: true,
timedOut: false,
isCanceled: false,
killed: false
}
▼こちらからだと問題なく実行できました。
xs-dev setup --target-branch public
▼セットアップができたことを確認するコマンドです。xsbugが起動して、実行ボタンを押してHello, worldが表示されたらOKです。
xs-dev run --example helloworld
▼xsbugの画面はこちら。左上に実行ボタンがあります。
デバイスのセットアップ
xs-devのセットアップが完了した時点でNode-REDを起動して、Node-RED MCUのプラグインをインストールしてみたのですが、反映されていませんでした。
xs-devのページで紹介されている、デバイスのセットアップを先に済ませる必要があるのかもしれません。変更が反映されていなかっただけかもしれないのですが、ひと通りインストールが終了したら一度再起動したほうが良いと思います。
▼コマンドはこちら
xs-dev setup --device esp32
▼こちらのコマンドで、デバイスのリストを確認できます。
xs-dev setup --list-devices
▼デバイスのリストはこんな感じ。
Node-REDの設定
ここまで来たら、Node-REDでの操作になると思ったら、さっそく躓きました。
普段ならターミナルにnode-redと入力すればNode-REDを起動できるのですが、エラーが起きて、すでにアドレスが使われているとのことでした。他のターミナルでは起動していなかったのですが...
この場合、再起動したら解決しました。Node-REDを起動した状態で、他のターミナルで実行しようとすると、同じようなエラーが出ていました。
▼このログが出ていると、他のターミナルで起動しているかもしれません。
Error: listen EADDRINUSE: address already in use 0.0.0:1880
あとは必要なパレットを追加すれば完了です。以前の記事で少し紹介していましたが、node-red-mcu-pluginをインストールします。
▼パレットの管理から追加できます。
Raspberry Piの起動時にNode-REDを起動する
Node-RED MCUの書籍に書いていたことですが、以下のコマンドでRaspberry Piを起動した際に、Node-REDも起動します。
試しにコマンドを入力して再起動したのですが、すぐには起動しません。電源を入れてから少し経って起動しました。普段使っているパソコンよりもスペックは劣るので、起動が遅いのに慣れないですね...
▼起動時にNode-REDを起動するコマンド
sudo systemctl enable nodered.service
▼やっぱり起動させないようにしたいときのコマンド
sudo systemctl disable nodered.service
追記
Raspberry Piが起動した際にNode-REDも起動できるようにしたところ、Node-RED MCUのタブだけ開けないことがありました。
今後のアップデートで改善されるかもしれませんが、自動起動をオフにしてコマンドで起動すると、開くことができました。
最後に
xs-devを使って構築してきましたが、後で書籍を読み返すと、確かにコマンドは少なくなっているようです。Moddable SDK、ESP-IDFのインストールは特に簡略化されています。
ただコマンドラインに慣れていない方には、まず書籍の手順通りに構築することをお勧めします。エラーが出たときの対処が大変です。再起動したら解消することもあります。
また、今後のアップデートによっては、今回の構築手順が通用しない可能性は十分にあります。ご注意ください。