はじめに
Node-RED MCU Editionの環境構築が終わり、簡単なフローが動作するようになったので、次はLチカを試してみます。
環境構築と動作確認については以下を参照してください。
前提条件
- Intel MacBook Pro (2017)
- macOS Big Sur (バージョン 11.7)
- M5Stick-C
- ボタンA (GPIO37)
- ボタンB (GPIO39)
- LED (GPIO10)
M5Stick-Cを使用して、ボタンA、または、ボタンBを押したらLEDを点ける動作をさせます。
環境準備
既存のNode-REDの実行環境を壊さないために、Node-RED MCU Edition用の環境を作成する前提で手順を書きます。
GPIOを使用するためにnode-red-node-pi-gpioノードをインストールします。
(前提条件)
- Node.js (v16.14.0)
- Node-RED (v3.0.2)
- node-red-node-pi-gpioノード
1-1. Node-REDをインストールする
$ mkdir node-red-mcu && cd node-red-mcu
$ npm init -y
$ npm install node-red
1-2. node-red-node-pi-gpioノードをインストールする
$ npm install node-red-node-pi-gpio
1-3. node-red-mcu-pluginをインストールする
$ npm install https://github.com/ralphwetzel/node-red-mcu-plugin
Node-RED起動時のエラー(node-red-mcu-pluginがパッチを適用するutils.jsが存在しない)を回避するため、node_modules/node-redディレクトリで必要なモジュールをインストールします。
$ cd node_modules/node-red
$ npm install
$ cd ../..
1-4. Node-REDを起動する
$ node node_modules/node-red/red.js -u ./
Node-REDフローを作成する
「rpi - gpio in」ノードと「rpi - gpio out」ノードを使用し、以下のように接続します。
「rpi - gpio in」ノード ・・Button Aノード
- BCM GPIO → 37を入力します
- デバウンス → 0を入力します
- 名前 → Button Aと入力します
※ デバウンスは初期値:25が入っていますが、後続のmcconfigコマンドの実行でエラーとなるため、0を設定します。
# nodered2mcu flows
Error translating node ID "2845de0ea814dfc3, type "rpi-gpio in", name "": Error: unimplemented
### Error: unimplemented
make: *** [/Users/kitazaki/moddable/build/tmp/esp32/m5stick_c/debug/node-red-mcu/modules/flows.js] Error 1
「rpi - gpio in」ノード ・・Button Bノード
Button Aと同様に設定します。
- BCM GPIO → 39を入力します
- デバウンス → 0を入力します
- 名前 → Button Bと入力します
「rpi - gpio out」ノード ・・LEDノード
- BCM GPIO → 10を入力します
- 出力形式 → デジタル出力を選択します
- 端子の状態を初期化 → チェックボックスにチェックを入れます
- 端子の初期レベル - High (1)を選択します
- 名前 → LEDと入力します
M5Stick-Cへインストールする
Node-RED MCU Editionを使用する場合
2-1. Node-REDフローをJSON形式でエクスポートする
- 右上のメニューから「書き出し」を選択します
- 「JSON」タブを選択します
- 「書き出し」を選択します
- クリップボードにNode-REDフローがJSON形式でコピーされます
2-2. Node-REDフロー(JSON形式)をflows.jsonファイルに保存する
node-red-mcu ディレクトリのflows.jsonファイルに保存します。
$ cd node-red-mcu
$ vi flows.json
[
{
"id": "8e7f5cf6d6c00d9c",
"type": "tab",
"label": "フロー 1",
"disabled": false,
"info": "",
"env": [],
"_mcu": {
"mcu": true
}
},
{
"id": "db0db4edfe97ff34",
"type": "rpi-gpio out",
"z": "8e7f5cf6d6c00d9c",
"name": "LED",
"pin": "10",
"set": true,
"level": "1",
"freq": "",
"out": "out",
"bcm": true,
"_mcu": {
"mcu": true
},
"x": 390,
"y": 200,
"wires": []
},
{
"id": "db25c64ed38a8409",
"type": "rpi-gpio in",
"z": "8e7f5cf6d6c00d9c",
"name": "Button A",
"pin": "37",
"intype": "tri",
"debounce": "0",
"read": false,
"bcm": true,
"_mcu": {
"mcu": true
},
"x": 200,
"y": 200,
"wires": [
[
"db0db4edfe97ff34"
]
]
},
{
"id": "d7947a712e9f9389",
"type": "rpi-gpio in",
"z": "8e7f5cf6d6c00d9c",
"name": "Button B",
"pin": "39",
"intype": "tri",
"debounce": "0",
"read": false,
"bcm": true,
"_mcu": {
"mcu": true
},
"x": 200,
"y": 260,
"wires": [
[
"db0db4edfe97ff34"
]
]
}
]
2-3. Node-REDフローをMCUで実行する
実機(M5Stick-C)で動かします。
$ UPLOAD_PORT=/dev/cu.usbserial-C152AAC745 mcconfig -d -m -p esp32/m5stick_c
※ シリアルボート番号は環境によって異なりますので、以下のコマンドで確認します。
$ ls /dev/cu.*
node-red-mcu-pluginを使用する場合
Node-REDフローエディタで操作を行います。
3-1. 「MCU」タブの設定をする
- 「Flows to build for MCU」でチェックボックスにチェックを入れます
- 「MCU Build Configurations」で「Add config」を押します
- プルダウンメニューから「ESP32|Espressif」「esp32/m5stick_c」を選択し、シリアルポート番号を入力します。
3-2. Node-REDフローをMCUで実行する
「Build」を押すとNode-REDフローが実行されます。
「Console Monitor」タブを押すと、ターミナル画面でビルド実行の様子を確認できます。
ビルド完了後、実機(M5Stick-C)へ書き込みまで行われます。
動作確認
ボタンA、または、ボタンBを押したらLEDが点くこと確認します。