Node-RED MCU を WSL2で簡単に使用するメモです。
はじめに
NodeRED MCUを使うとPCとMCU(マイコン)が、同じビジュアル言語で書けるので、簡単にIoTプログラミングできます。本書はWSL2環境で手っ取り早くNodeRED MCUを試したい人を対象に書きました。
試した環境(ハードウェア、ソフトウェア)
- Windows11 WSL2(Ubuntu-22.04LTS)
- NodeRED
- NodeRED MCU Plugin(NodeRED MCUも同時にインストールされます。)
- xs-dev(環境設定でModdableとESP-IDF等がインストールされます。)
- M5StackCore2、M5AtomS3
Install方法
Ubuntu22.04 LTS(WSL2)のインストール
PowerShell(管理者)で、次のコマンドを入力します。インストールが終わったら、Login名とパスワードの設定が促されるので、入力します。
> wsl --update
> wsl --install ubuntu-22.04
インストールが終わったら $ exit でログアウトします。
USBサポートのインストール
PowerShell(管理者)で次のコマンドを入力します。インストールが終わったらPCを再起動します。
> winget install usbipd
PCを再起動して、ターミナル(管理者)で次のコマンドを入力します。リストが表示されたら成功です。
> usbipd list
Ubuntuをスタートメニューから起動して、Ubuntuのプロンプトでインストール、設定をします。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install linux-tools-generic hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*/usbip 20
USBのパーミッションの変更
/dev/ttyACM0が使えるようにパーミッションの設定とudevの自動起動を設定します。
/etc/udev/rules.d/40-dfuse.rules に 下の内容を書き込みます。ファイルがないときは新規で作成します。
SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="00??", GROUP="plugdev", MODE="0666"
/etc/wsl.conf に 下の内容を書き込みます。[boot]セクションがすでに書かれている場合は、2行目だけ追加します。 ファイルが無い場合は新規に作成します。
[boot]
command="service udev start”
WSL2(Ubuntsu)を再起動します。
PowerShell(管理者)で > wsl --shutdown
を実行後、再度スタートメニューからUbuntuを起動します。
Node-REDのインストール
Ubuntuで次のコマンドを入力してNodeRED、Node、npmをインストールします。オプションは以下の通り返答します。
Are you really sure you want to do this ? [y/N] ?は "y"
Would you like to install the Pi-specific nodes ? [y/N] ?は "n"
Would you like to customise the settings now (y/N) ?は “n”
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Moddable、node-red mcu plugin、nodesのインストール
ここでは、xs-devを利用して簡単にインストールします。
入力するコマンドはすべて、Ubuntu(WSL)に入力します。
まず準備としてssh-askpassをインストールします。
$ sudo apt install ssh-askpass
ssh-askpassの設定をします。
~/.askpassファイルを作成します。"password”部分は自分のパスワードに置き換えてください。
#!/bin/bash
echo "password"
ファイルの属性と環境変数を設定します。
$ chmod +x ~/.askpass
$ export SUDO_ASKPASS=~/.askpass
次に開発環境をインストールしていきます。少し時間のかかる部分もあります。
※本来npmを利用してxs-devを入れるときにはsudoは不要なのですが、なぜかエラーが発生するので付加しています。
※Moddableは最新版をインストールするためにpublicブランチにしています。
$ sudo -A npm i -g xs-dev
$ xs-dev setup --target-branch public
$ xs-dev setup --device esp32
$ cd ~/.node-red
$ npm i @ralphwetzel/node-red-mcu-plugin
$ npm i @moddable-node-red/mcu
環境変数等を反映するために、WSLを再起動します。
NodeREDの起動
NodeREDはUbuntu(WSL)で次のコマンドを入力します。
$ node-red
Windowsのブラウザで”localhost:1880”を開きます。
※WSL2はあくまでもWindowsの環境上で動いています。
左のパレットにMCUノード、右のサイドバー(隠れていたら右端の▼で表示)にNode-RED MCUサイドバーが表示されています。
M5Stack Basicなどの利用方法
M5Stack BasicなどUSB-UART変換のデバイスが入っているデバイス
- デバイス(M5Stackなど)をPCに接続します。
- Windowsのターミナル(管理者)で次のコマンドを入力し、接続リストを表示し、BUSIDを調べます。
> usbipd wsl list
3. デバイスの接続先をWSLに変更します。
次のコマンドを実行します。オプションの -b でBUSIDを –a で自動再接続を指定しています。自動接続をやめる場合は、同じターミナルで[ Ctrl + C ]を押します。
> usbipd wsl attach -a -b 1-2
以上でデバイスがWSL2で使えるようになりました。
なお、Ubuntu(WSL)側でデバイスの接続を確認したい場合は、次のいずれかのコマンドでできます。
$ lsusb
$ ls -al /dev/ttyUSB*
M5AtomS3などの利用方法
M5AtomS3などUSB-UART変換のデバイスが入っておらず、書き込みとdebugで異なる接続環境になる場合のデバイスです。ここではM5AtomS3を利用しています。
なお、書き込みはできますが、デバッグが失敗します。(まれに、成功することもあります。)
- デバイス(M5Atom S3など)をPCに接続します。
- デバイスを書き込み状態にします(AtomS3の場合は本体のResetボタンをランプが付くまで長押しします。)
- Windowsのターミナル(管理者)で次のコマンドを入力し、BUSIDを確認します。
> usbipd wsl list
4. デバイスの接続先をWSLに変更します。
次のコマンドを実行します。オプションの -b でBUSID指定します。この時点では –a (自動再接続)を指定しないようにしましょう。
> usbipd wsl attach -b 1-1
※UbuntuはM5AtomS3を/dev/ttyACM* で接続されます。
5. NodeREDでフローのビルドを行います。
"### Press RESET to restart device"という表示まで進みます。
6. M5AtomS3のResetを押します。
Resetするとデバイス(M5AtomS3)がUbuntuから切り離されます。
7. 再度デバイスの接続先をWSLに変更します。
次のコマンドを実行します。オプションの -b でBUSID指定します。今回は –a (自動再接続)をつけて実行します。
※xsbugに接続した時点で再度切り離されるためです。
> usbipd wsl attach -a -b 1-1
※7は、失敗することが多いです。失敗するとデバッグはできませんが、デバイスは正常に動作します。(デバッグしないのであれば、MCUサイドバーのInstrumentationは何も選択しないのも手です。)
※何か良い方法を知っている人は教えてください。