有几种方法可以通过Node-RED与Arduino进行交互。这些方法都假设Arduino通过USB串行连接与主机相连。
注意:您无法同时使用Arduino IDE和Arduino节点,因为它们会产生冲突。如果您希望通过IDE重新编程Arduino,需要先停止Node-RED运行。
Arduino Cloud 允许与注册为物联网设备的Arduino开发板进行交互。 可以在面板中安装节点,轻松从物联网设备轮询数据或接收实时通知(详情及安装请参阅 https://flows.nodered.org/node/@arduino/node-red-contrib-arduino-iot-cloud)。
由于Arduino设备以串行接口形式出现,可以使用串行输入/输出节点与其进行通信。
如果您使用IDE对Arduino进行编程,通常就是这种情况,因为您可以通过串行端口发送和接收输入来与您的创作进行交互。只需确保两端的串行端口速度(波特率)设置相同即可。
Firmata 是一种用于Arduino(以及其他微控制器)与主机之间通信的协议,可直接访问IO引脚。
首先你需要使用标准的Arduino软件下载工具将默认的Firmata程序加载到Arduino上。这通常可以在Arduino IDE的菜单中找到:
Files - Examples - Firmata - Standard Firmata
接下来您需要将Node-RED Arduino节点安装到面板中。
切换到您的Node-RED用户目录,通常位于~/.node-red
cd ~/.node-red
然后安装Arduino节点
npm install node-red-node-arduino
最后重启Node-RED,并在浏览器中重新加载编辑器。 现在调色板中应该会出现两个新的Arduino节点。
要运行一个使用LED 13的"闪烁"流程,请复制以下流程并粘贴到"导入节点"对话框中(下拉菜单中的从剪贴板导入,或使用Ctrl-i, Ctrl-v快捷键)。点击确定后,在工作区点击以放置新节点。
[{"id":"d7663aaf.47194","type":"arduino-board","device":""},{"id":"dae8234f.2517e","type":"inject","name":"0.5s tick","topic":"","payload":"","payloadType":"date","repeat":"0.5","crontab":"","once":false,"x":150,"y":100,"z":"359a4b52.ca65b4","wires":[["56a6f8f2.a95908"]]},{"id":"2db61802.d249e8","type":"arduino out","name":"","pin":"13","state":"OUTPUT","arduino":"d7663aaf.47194","x":570.5,"y":100,"z":"359a4b52.ca65b4","wires":[]},{"id":"56a6f8f2.a95908","type":"function","name":"Toggle output on input","func":"\n// If it does exist make it the inverse of what it was or else initialise it to false\n// (context variables persist between calls to the function)\ncontext.level = !context.level || false;\n\n// set the payload to the level and return\nmsg.payload = context.level;\nreturn msg;","outputs":1,"noerr":0,"x":358,"y":100,"z":"359a4b52.ca65b4","wires":[["2db61802.d249e8"]]}]
该流程设置为自动尝试检测串口上的开发板。
如需修改,请双击标记为Pin 13的节点(即Arduino节点)。点击铅笔图标并根据需要更改端口定义。
点击部署按钮,流程将开始运行。LED 13 会以每秒一次的频率切换开关状态。
Arduino输出节点目前支持三种操作模式:
Arduino输入节点虽然出现在组件面板中但本示例未使用,它可支持数字和模拟引脚。每当检测到变化时该节点就会发送消息。对于数字输入这可能适用,因其状态通常较为稳定;但模拟读数往往会以最高采样率持续输出(默认每秒40次...)。可通过串口配置调整该速率,将其降至更易管理的频率。
Node.js arduino-firmata库的详细信息可以查看这里。
你也可以使用流行的Johnny-Five库,因为它增加了I2C等功能。
一种使用方式是通过Luis Montes的 node-red-contrib-gpio 节点,该节点还以统一的方式支持许多其他开发板,如 Raspberry Pi、BeagleBone Black、Galileo/Edison、Blend Micro、LightBlue Bean、 Electric Imp和Spark Core。
另一种方法是使其在函数内部可用。 这可以通过编辑settings.js中的globalContextSettings部分来实现
functionGlobalContext: {
jfive:require("johnny-five"), // this is the reference to the library
j5board:require("johnny-five").Board({repl:false}) // this actually starts the board link...
},
我们在此处启动板级链接,以便工作区内的多个功能可以使用它,但需注意每个引脚只能访问一次。
最后在您的Node-RED主目录中安装npm
cd ~/.node-red
npm install johnny-five
然后你就可以在函数中访问Johnny-Five的所有丰富功能了...
var five = context.global.jfive; // create a shorter alias
var led = new five.Led(13); // instantiate the led
led.blink(500); // blink it every 500 ms
注意:这是一个简单但不够理想的示例,因为每次调用该函数时都会创建led引脚...所以仅适用于部署后仅调用一次的情况。
下面的流程展示了一个更高级的示例,它可以控制LED灯的闪烁开关,并演示了如何使用上下文(context)来保存状态和LED引脚的单例实例。
可以通过使用ctrl-c (复制) / ctrl-i (导入) / ctrl-v (粘贴)将其导入工作区。
[{"id":"62f58834.9d0a78","type":"inject","name":"","topic":"","payload":"1","payloadType":"string","repeat":"","crontab":"","once":false,"x":226,"y":326,"z":"359a4b52.ca65b4","wires":[["ae84ad08.517b5"]]},{"id":"ae84ad08.517b5","type":"function","name":"1 = start flash, 0 = stop","func":"var five = context.global.jfive;\ncontext.led = context.led || new five.Led(13);\ncontext.switch = context.switch || 0;\ncontext.switch = msg.payload;\nconsole.log(typeof(context.switch));\nif (context.switch == 1) {\n context.led.blink(500);\n}\nif (context.switch == 0) {\n context.led.stop().off();\n}\nreturn msg;","outputs":1,"noerr":0,"x":447,"y":349,"z":"359a4b52.ca65b4","wires":[["df638a80.209c78"]]},{"id":"df638a80.209c78","type":"debug","name":"","active":true,"console":"false","complete":"false","x":645,"y":349,"z":"359a4b52.ca65b4","wires":[]},{"id":"d79bc51d.286438","type":"inject","name":"","topic":"","payload":"0","payloadType":"string","repeat":"","crontab":"","once":false,"x":224.4000244140625,"y":364.60003662109375,"z":"359a4b52.ca65b4","wires":[["ae84ad08.517b5"]]}]
Node-RED: 面向事件驱动应用的低代码编程平台。
版权所有 OpenJS基金会 及 Node-RED 贡献者。保留所有权利。OpenJS基金会 拥有注册商标并使用商标。有关 OpenJS基金会 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS基金会商标列表 中标注的商标™或注册®商标归其各自持有人所有。使用这些商标并不意味着与它们有任何关联或获得其认可。
The OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS基金会章程 | 商标政策 | 商标列表 | Cookie政策