Node-RED MCUの環境を構築する(ESP-IDF v5.1.1対応版、Raspberry Pi)
はじめに
Moddable SDKがv4.2にアップデートされたことにより、Node-RED MCUの環境が大きく変化しています。特にESP-IDF v5に対応したことで、ESP-IDF v4のままだとエラーが出るようになっています。
その影響で、私の環境でもアップデートするとエラーだらけで全然動作しなくなったんですよね...
もうややこしいので、新しく環境を構築しましたというのが今回の話です。こういった時にSDカードを差し替えるだけで済むRaspberry Piは便利ですね。
▼Moddable SDKのリリース履歴については、こちらをご覧ください。
https://github.com/Moddable-OpenSource/moddable/releases
以前の記事ではxs-devを使って簡単にインストールしたのですが、今回はより具体的な手順を知りたかったので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で環境を構築する
SDカードにOSを書き込む
▼私はRaspberry Pi 400を使っています。
▼Raspberry Pi imagerで64bitのOSを書き込みました。
書き込み後の環境構築は、Raspberry Pi 400で行いました。
Moddable SDKをインストールする
必要なパッケージをインストールします。
sudo apt update
sudo apt upgrade
sudo apt install gcc git wget make libncurses-dev flex bison gperf
sudo apt install libgtk-3-dev
GitHubからModdableのリポジトリをクローンします。
git clone https://github.com/Moddable-OpenSource/moddable
git cloneでインストールしているので、ディレクトリに入ってgit pullを実行するとアップデートできます。
次に環境変数を設定します。書籍ではsourceコマンドで.bashrcに設定していたのですが、できなかったのでnanoコマンドで直接編集しました。
sudo nano .bashrc
以下の二行を追加します。
※/home/piのpiの部分はユーザー名に合わせて変更してください。
MODDABLE="/home/pi/moddable"
PATH="$MODDABLE/build/bin/lin/release:$PATH"
記入後、Ctrl + Sで保存、Ctrl + Xで終了します。
以下のコマンドで再起動すると、環境変数の設定が反映されます。
sudo reboot
以下のコマンドでModdable SDKをビルドします。
cd $MODDABLE/build/makefiles/lin
make
make install
以下のコマンドでxsbugを開くことができればOKです。これはデバッグツールになっています。
xsbug
なお、.bashrcファイルはRaspberry Piのファイルマネージャーでは隠しファイル扱いになっています。隠しファイルも表示するように変更すると、ファイルを開くことができます。
▼ファイルマネージャーで設定を変更します。
▼すると、.bashrcも表示されます。ここから開くと権限によっては編集できないことがあるので、その場合は先程のコマンドを実行してください。
ESP-IDF v5.1.1をインストールする
必要なパッケージをインストールします。
sudo apt install python-is-python3 python3-pip python3-serial cmake ninja-build ccache libffi-dev libssl-dev dfu-util
mkdir esp32
cd esp32
ここで、ESP-IDFのv5.1.1をインストールします。
git clone -b v5.1.1 --recursive https://github.com/espressif/esp-idf.git
ESP-IDFをビルドしてインストールします。
export IDF_PATH=$HOME/esp32/esp-idf
cd $IDF_PATH
./install.sh
ここでの環境変数も、私の場合はnanoコマンドで追加しました。
Node-REDをインストールする
Node.jsをインストールします。
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
以下のコマンドでnodeとnpmのバージョンを確認します。
node -v
npm -v
Node-REDをインストールします。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Node-REDを起動します。
sudo systemctl start nodered.service
http://localhost:1880にアクセスします。
▼Node-REDの起動・停止関連のコマンドについてはこちら
起動 | sudo systemctl start nodered.service |
停止 | sudo systemctl stop nodered.service |
再起動 | sudo systemctl restart nodered.service |
OSの起動時に自動起動 | sudo systemctl enable nodered.service |
自動起動の停止 | sudo systemctl disable nodered.service |
Node-RED MCU Pluginをインストールする
node-red-mcu-pluginをインストールします。これでNode-REDにMCU用のプラグインが追加されます。
cd .node-red
npm install @ralphwetzel/node-red-mcu-plugin
settings.jsファイルを編集します。これでNode-REDが起動したときにプラグインも読み込まれます。
sudo nano settings.js
一番最後の行に以下の行を追加します。
※/home/piのpiの部分はユーザー名に合わせて変更してください。
process.env.MODDABLE = "home/pi/moddable"
以下のコマンドでNode-REDを再起動して、再度http://localhost:1880にアクセスしましょう。
sudo systemctl restart nodered.service
ノードを追加して動作確認をする
Node-REDのメニュー→パレットの管理から、以下のノードを追加します。Node-RED MCU関連のノードは、「mcu」と検索するとヒットします。
- @moddable-node-red/mcu
- node-red-dashboard
なお、@ralphwetzel/node-red-mcu-pluginについては、先程npmでインストールしているので不要です。パレットの管理から追加して再起動しても、Module already loadedというエラーが出て追加されません。ご注意ください。
▼ダッシュボードのノードを書き込んでみたところ、無事実行できました。
最後に
無事Node-RED MCUの環境を構築することができました。アップデートによって対応機種が増えていたりするので、また試してみます。
今後のアップデートでインストール方法がまた変わる可能性もあるので、要注意ですね。ハッカソンのときに突然エラーが出て困ったことがあるので、ちゃんと動作する環境を残しておこうと思っています。
ちなみに、node-red-mcu-pluginをインストールしたのに、Node-REDに反映されていないことがありました。原因はsettings.jsに記入したファイルのパスのユーザー名が間違っていたからです。この記事で赤文字で書いたのは、そこで行き詰まったからです...