介绍
今年(2022 年),Node-RED Con 2022 于 10 月 7 日举行。
在英语轨道彼得连帽衫先生以“Bringing Node-RED to Microcontrollers”为题介绍了Node-RED MCU版,所以我试了一下。
我对“让所有设备可编程”的使命感同身受。
(摘自演示幻灯片)
这一次,我将使用 M5Stack Core2 (ESP32) 运行一个简单的 Node-RED 流程(注入节点和调试节点)。
程序
Github 上的 README 是信息的来源。
PC 上的 Node-RED 运行在 Node.js(V8 JavaScript 引擎)上,而 MCU(微控制器)运行在 Moddable SDK 的 XS JavaScript 引擎上。
(摘自演示幻灯片)
环境
先决条件
- 英特尔 MacBook Pro (2017)
- macOS Big Sur(11.7 版)
* 实机(M5Stack Core2)需要使用ESP-IDF进行操作,但不支持M1 Mac。
1. 安装 Moddable SDK
一个很好的信息来源是 Github 上的“Moddable SDK – Getting Started”。
1-1.安装Xcode
从 App Store 安装 Xcode。
- Xcode(13.1 版)
* 如果 CommandLineTools 设置不正确,在构建 Moddable SDK 时会出错,因此请从菜单中的“Preferences”→“Locations”中的 Command Line Tools 下拉菜单中进行设置。
1-2. 下载 Moddable 仓库
该解释假设您下载并安装在您的主目录中。
$ git clone https://github.com/Moddable-OpenSource/moddable
1-3.设置环境变量
用于设置环境变量的文件因您使用的 shell 环境而异。
(对于 bash)~/.profile
(对于 zsh)~/.zshrc
添加以下设置。
export MODDABLE="/Users/ユーザー名/moddable"
export PATH="${MODDABLE}/build/bin/mac/release:$PATH"
* 关闭终端,重新打开终端,环境变量生效。
1-4. 构建 Moddable SDK
$ cd ${MODDABLE}/build/makefiles/mac
$ make
1-5.打开xsbug调试工具
$ open ${MODDABLE}/build/bin/mac/release/xsbug.app
* 确认调试器正常启动后,关闭。
1-6. 运行示例程序
执行示例程序 (helloworld) 将启动模拟器 (Moddable One) 和调试器。
$ cd ${MODDABLE}/examples/helloworld
$ mcconfig -d -m -p mac
mcconfig 命令的参数(选项)的含义如下。
- -d 在调试模式下构建
- -m 同时构建和写入设备
- -p 指定构建平台的选项(mac 是 macOS moddable 模拟器)
您可以从左上角菜单更改模拟器类型。
当您按下播放按钮时,会显示 helloworld。
我也会尝试另一个样本。
$ cd ${MODDABLE}/examples/piu/balls
$ mcconfig -d -m -p mac
在真机上运行(M5Stack Core2)
为 ESP32 构建构建环境以在 M5Stack Core2 (ESP32) 上运行。
2. 安装 ESP-IDF
Github 上的“使用带有 ESP32 的 Moddable SDK”是一个很好的信息来源。
2-1. 下载 ESP-IDF 仓库
解释假设您下载并安装在您的主目录中。
$ mkdir esp32 && cd esp32
$ git clone --recursive https://github.com/espressif/esp-idf.git
$ cd esp-idf
$ git checkout v4.4.2
$ git submodule update --init --recursive
2-2. 安装使用 Homebrew 运行 ESP-IDF 所需的工具
$ brew update
$ brew install python cmake ninja
如果已安装,请更新。
$ brew upgrade python cmake ninja
2-3.设置环境变量
用于设置环境变量的文件因您使用的 shell 环境而异。
(对于 bash)~/.profile
(对于 zsh)~/.zshrc
添加以下设置。
export IDF_PATH=$HOME/esp32/esp-idf
* 关闭终端,重新打开终端,环境变量生效。
2-4. 构建和安装 ESP-IDF
$ cd $IDF_PATH
$ ./install.sh
2-5. 设置 ESP-IDF 的构建环境
$ source $IDF_PATH/export.sh
如果您不想在每次打开终端时都运行它,请将其添加到 shell 的初始化文件(~/.profile 或 ~/.zshrc)中。
在步骤 2-3 中设置的环境变量 (IDF_PATH) 之后添加它。
export IDF_PATH=$HOME/esp32/esp-idf
source $IDF_PATH/export.sh
2-6.连接M5Stack Core2,查看串口号
连接M5Stack Core2前后分别执行以下命令,查看识别M5Stack Core2的串口号。
$ ls /dev/cu.*
在我的情况下
/dev/cu.usbserial-01F05577
被公认为
将识别的串行端口号设置为环境变量(UPLOAD_PORT)。
$ export UPLOAD_PORT=/dev/cu.usbserial-01F05577
也可以在执行 mcconfig 命令时指定。
(执行示例)
$ UPLOAD_PORT=/dev/cu.usbserial-01F05577 mcconfig -d -m -p esp32/m5stack_core2
2-7. 执行示例程序
为 M5Stack Core2 构建 ball 示例程序并将其写入实际机器。
$ cd ${MODDABLE}/examples/piu/balls
$ UPLOAD_PORT=/dev/cu.usbserial-01F05577 mcconfig -d -m -p esp32/m5stack_core2
在 M5Stack Core2 上运行 Node-RED 流程
环境终于准备好了。
这是使用 MCU(微控制器)运行 Node-RED 流程的易于理解的图像。
(报价来源)
Node-RED MCU 版将从 Node-RED 流编辑器以 JSON 格式导出的流转换为可与 Moddable SDK 的 XS JavaScript 引擎一起使用的格式。
一个可以在Node-RED流程编辑器上为MCU构建并写入实际机器的工具(node-red-mcu-plugin)已经发布,因此使用起来更容易。
首先,手动转换、构建和刻录以了解其工作原理。
3. 使用 Node-RED MCU 版
3-1. 下载 Node-RED MCU 版本库
$ git clone https://github.com/phoddie/node-red-mcu
3-2. 以 JSON 格式导出 Node-RED 流
连接注入节点和调试节点,并将注入节点设置为重复行为。
从右上角的菜单中选择导出。
选择 JSON 选项卡。
选择导出。
Node-RED 流将以 JSON 格式复制到您的剪贴板。
3-3. 将 Node-RED 流(JSON 格式)保存到 flow.json 文件
node-red-mcu 目录中有一个空的flows.json 文件,因此将您复制的Node-RED 流程写入剪贴板。 (使用 vi 命令编辑 flow.json 文件的示例)
$ cd node-red-mcu
$ vi flows.json
(之前改过)
[
]
(更改后)
[
{
"id": "8e0e0125ce64fc32",
"type": "tab",
"label": "フロー 1",
"disabled": false,
"info": "",
"env": []
},
{
"id": "b26f7a4723afecfe",
"type": "inject",
"z": "8e0e0125ce64fc32",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "1",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 230,
"y": 140,
"wires": [
[
"d6cb10fdeae23781"
]
]
},
{
"id": "d6cb10fdeae23781",
"type": "debug",
"z": "8e0e0125ce64fc32",
"name": "debug 1",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 480,
"y": 180,
"wires": []
}
]
3-4. 在 MCU 上运行 Node-RED 流程
(在模拟器上运行时)
$ mcconfig -d -m -p mac
(在实机上运行时(M5Stack Core2))
$ UPLOAD_PORT=/dev/cu.usbserial-01F05577 mcconfig -d -m -p esp32/m5stack_core2
4.使用node-red-mcu-plugin
为了不破坏现有的Node-RED执行环境,我将在为Node-RED MCU版创建环境的前提下编写程序。
(先决条件)
- Node.js (v16.14.0)
4-1. 安装 Node-RED
$ mkdir node-red-mcu && cd node-red-mcu
$ npm init -y
$ npm install node-red
4-2. 安装 node-red-mcu-plugin
$ npm install https://github.com/ralphwetzel/node-red-mcu-plugin
4-3. 启动 Node-RED
$ node node_modules/node-red/red.js -u ./
启动 Node-RED 时输出以下错误。
*** Error while loading node-red-mcu-plugin:
Failed to calculate correct patch path.
Please raise an issue @ our GitHub repository, stating the following information:
> require.main.path: /Users/kitazaki/node-red-mcu/node_modules/node-red
> utils.js: /Users/kitazaki/node-red-mcu/node_modules/node-red/node_modules/@node-red/registry/lib/util.js
似乎输出错误是因为 node-red-mcu-plugin 修补的 utils.js 不存在。
在 node_modules/node-red 目录中安装所需的模块。
$ cd node_modules/node-red
$ npm install
再次启动 Node-RED。
$ cd ../..
$ node node_modules/node-red/red.js -u ./
侧面板中添加了“MCU”选项卡。
4-4. 设置“MCU”选项卡
像往常一样创建一个 Node-RED 流。
选中“MCU”选项卡上的“为 MCU 构建的流程”复选框。
在“MCU”选项卡上的“MCU Build Configurations”中按“Add config”。
按两次“添加配置”以添加模拟器和真机(M5Stack Core2)的设置。
对于实机(M5Stack Core2)的设置,在下拉菜单中选择“ESP32|Espressif”和“esp32/m5stack_core2”,串口号输入步骤2-6中识别的值。
按“构建”将运行 Node-RED 流程。
通过按“控制台监视器”选项卡,您可以在终端屏幕上检查构建执行的状态。
以实机(M5Stack Core2)为例,构建完成后编写。
调试器 (xsbug) 将启动,您可以看到运行中的 Node-RED 流程。
最后
在今年的 Node-RED Con 2022 上,我做了题为“我尝试了各种 Node-RED 执行环境”的演讲,加上 MCU(微控制器)执行环境的加入,我很期待未来的发展。!
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628933.html