Node-RED MCU EditionでLチカしてみた。

# はじめに

Node-RED MCU Editionの環境構築が終わり、簡単なフローが動作するようになったので、次はLチカを試してみます。

環境構築と動作確認については以下を参照してください。

https://qiita.com/kitazaki/items/15cba2f4622bf3682083

# 前提条件

- Intel MacBook Pro (2017)
- macOS Big Sur (バージョン 11.7)
- M5Stick-C
  - ボタンA (GPIO37)
  - ボタンB (GPIO39)
  - LED (GPIO10)

![スクリーンショット 2022-10-10 15.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1297ac18-52a8-1542-25f6-cb5b77ce512f.png)

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をインストールする

```bash
$ mkdir node-red-mcu && cd node-red-mcu
$ npm init -y
$ npm install node-red
```

### 1-2. node-red-node-pi-gpioノードをインストールする

```bash
$ npm install node-red-node-pi-gpio
```

### 1-3. node-red-mcu-pluginをインストールする

```bash
$ npm install https://github.com/ralphwetzel/node-red-mcu-plugin
```

Node-RED起動時のエラー(node-red-mcu-pluginがパッチを適用するutils.jsが存在しない)を回避するため、node_modules/node-redディレクトリで必要なモジュールをインストールします。

```bash
$ cd node_modules/node-red
$ npm install
$ cd ../..
```

### 1-4. Node-REDを起動する

```bash
$ node node_modules/node-red/red.js -u ./
```

## Node-REDフローを作成する

「rpi - gpio in」ノードと「rpi - gpio out」ノードを使用し、以下のように接続します。

![10-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/10caf876-f9fc-0883-de33-eaec7093c8ad.jpeg)

### 「rpi - gpio in」ノード　・・Button Aノード

- BCM GPIO → 37を入力します
- デバウンス → 0を入力します
- 名前 → Button Aと入力します

![10-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d07a9a54-a5b5-9992-70b8-e598448cdeef.jpeg)

※ デバウンスは初期値:25が入っていますが、後続のmcconfigコマンドの実行でエラーとなるため、0を設定します。

```bash
# 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と入力します

![10-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/7d7a324e-2203-6a39-82a7-283d662704d3.jpeg)

### 「rpi - gpio out」ノード　・・LEDノード

- BCM GPIO → 10を入力します
- 出力形式 → デジタル出力を選択します
- 端子の状態を初期化 → チェックボックスにチェックを入れます
- 端子の初期レベル - High (1)を選択します
- 名前 → LEDと入力します

![10-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9dd46130-d6e1-2bce-0cfd-8000276c08be.jpeg)

# 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ファイルに保存します。

```bash
$ cd node-red-mcu
$ vi flows.json
```

```json: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)で動かします。

```bash
$ UPLOAD_PORT=/dev/cu.usbserial-C152AAC745 mcconfig -d -m -p esp32/m5stick_c
```

※ シリアルボート番号は環境によって異なりますので、以下のコマンドで確認します。

```bash
$ 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」を選択し、シリアルポート番号を入力します。

![10-3-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ea2e5e51-3d8f-b4e7-341a-2ab619ec43c1.jpeg)

### 3-2. Node-REDフローをMCUで実行する

「Build」を押すとNode-REDフローが実行されます。
「Console Monitor」タブを押すと、ターミナル画面でビルド実行の様子を確認できます。
ビルド完了後、実機(M5Stick-C)へ書き込みまで行われます。

![10-4-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2c46c102-dd4f-9868-23be-508a0514075e.jpeg)

# 動作確認

ボタンA、または、ボタンBを押したらLEDが点くこと確認します。

![A.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b0ef44d5-f5a9-6948-361b-c82989b16646.jpeg)

![B.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e5e7280c-f698-f960-550a-eec6d62524b4.jpeg)

![10-5-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4ef757cf-ce25-1910-f506-283c389b0991.jpeg)