文章目录

  • 安装及配置
    • 下载安装Node-RED
    • Node-RED下载节点
  • 实验
    • 1. 串口显数
    • 2. MQTT
  • JSON源码
    • 1. 串口显示实验
    • 2. MQTT实验

安装及配置

https://nodered.org/docs/

下载安装Node-RED

下载安装Node.js(并配置环境变量)后,且node安装版本需要在v14.17.2.0以上,npm版本安装版本在v6.14.13以上。

  • 设置npm默认安装依赖位置
npm set cache H:\nodejs\node_cache
npm set prefix H:\nodejs\node_global
  • 换源
npm config set registry https://registry.npm.taobao.org
  • Node.js安装Node-RED
npm install -g --unsafe-perm node-red
  • 或是​​​​​​​Docker安装Node-RED
docker run -it -p 1880:1880 --name mynodered -d nodered/node-red
  • 启动
node-red

Node-RED下载节点

打开浏览器访问localhost:1880,点击右上方,在节点管理>>控制板>>安装中即可下载以下组件:

  • node-red-dashboard,用于部署后形成控制面板(访问localhost:1880/ui);
  • node-red-node-serialport,添加串口组件。

实验

1. 串口显数

  • 收集Zigbee和WiFi网关数据。

  • 左为Zigbee网关接入串口,右为WiFi网关接入串口。

  • 流程并部署

  • 面板效果

  • 硬件连接图
    (需按硬件实际情况,传输的数据格式,修改JSON中的自定义函数)

2. MQTT

  1. 首先需要有本地的MQTT Broker
  • 下载安装EMQX
    https://www.emqx.com/zh/try?product=broker
  • 或是用Docker安装
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:4.3.11
  • 启动
emqx start
  • 访问localhost:18083
  1. Node-RED设置及流程
  • 设置节点

  • 流程并部署
  • 结果

    关闭EMQX
emqx stop

JSON源码

1. 串口显示实验

[{"id": "a271f746b8b78baf","type": "tab","label": "串口显数流程","disabled": false,"info": ""},{"id": "23256dc00e20c5e6","type": "debug","z": "a271f746b8b78baf","name": "测试打印","active": true,"tosidebar": true,"console": false,"tostatus": false,"complete": "payload","targetType": "msg","statusVal": "","statusType": "auto","x": 340,"y": 260,"wires": []},{"id": "8e429633a17d9fc4","type": "serial in","z": "a271f746b8b78baf","name": "Zigbee串口COM7输入","serial": "854e53dd8b178f91","x": 120,"y": 140,"wires": [["e399fd2c31a733ad"]]},{"id": "77dba539c59a386f","type": "ui_text","z": "a271f746b8b78baf","group": "edb315d0aa0404ce","order": 0,"width": 0,"height": 0,"name": "","label": "超声波传感器","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 1100,"y": 80,"wires": []},{"id": "04165a40f0638664","type": "switch","z": "a271f746b8b78baf","name": "WiFi节点判断","property": "topic","propertyType": "msg","rules": [{"t": "eq","v": "三轴","vt": "str"},{"t": "eq","v": "震动","vt": "str"},{"t": "else"}],"checkall": "false","repair": false,"outputs": 3,"x": 660,"y": 380,"wires": [["93cce256dae79ec0"],["2714bf9cf36752b8"],["b26f54754a4e36ef"]]},{"id": "6594423759956339","type": "ui_text","z": "a271f746b8b78baf","group": "edb315d0aa0404ce","order": 0,"width": 0,"height": 0,"name": "","label": "烟雾传感器","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 1090,"y": 160,"wires": []},{"id": "4536daee149e96d2","type": "ui_text","z": "a271f746b8b78baf","group": "edb315d0aa0404ce","order": 0,"width": 0,"height": 0,"name": "","label": "其它Zigbee节点","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 860,"y": 200,"wires": []},{"id": "07acf3dda54fa7e2","type": "ui_text","z": "a271f746b8b78baf","group": "2c4daaf625693205","order": 4,"width": 0,"height": 0,"name": "","label": "三轴传感器","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 1130,"y": 320,"wires": []},{"id": "27e9f9f58a22f1f6","type": "ui_text","z": "a271f746b8b78baf","group": "2c4daaf625693205","order": 4,"width": 0,"height": 0,"name": "","label": "震动传感器","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 1090,"y": 420,"wires": []},{"id": "b26f54754a4e36ef","type": "ui_text","z": "a271f746b8b78baf","group": "2c4daaf625693205","order": 4,"width": 0,"height": 0,"name": "","label": "其它WiFi节点","format": "{{msg.payload}}","layout": "row-spread","className": "","x": 820,"y": 460,"wires": []},{"id": "f047fd0de0c8644c","type": "ui_chart","z": "a271f746b8b78baf","name": "","group": "edb315d0aa0404ce","order": 3,"width": 0,"height": 0,"label": "超声波传感器监视","chartType": "bar","legend": "false","xformat": "HH:mm:ss","interpolate": "linear","nodata": "","dot": false,"ymin": "0","ymax": "5","removeOlder": "5","removeOlderPoints": "","removeOlderUnit": "1","cutout": 0,"useOneColor": false,"useUTC": false,"colors": ["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs": 1,"useDifferentColor": false,"className": "","x": 1110,"y": 40,"wires": [[]]},{"id": "909bafbb628444e1","type": "ui_chart","z": "a271f746b8b78baf","name": "","group": "2c4daaf625693205","order": 3,"width": 0,"height": 0,"label": "震动传感器监视","chartType": "line","legend": "false","xformat": "HH:mm:ss","interpolate": "linear","nodata": "","dot": false,"ymin": "-1","ymax": "12","removeOlder": "5","removeOlderPoints": "","removeOlderUnit": "1","cutout": 0,"useOneColor": false,"useUTC": false,"colors": ["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs": 1,"useDifferentColor": false,"className": "","x": 1100,"y": 380,"wires": [[]]},{"id": "ccf9848aae2ae4ce","type": "function","z": "a271f746b8b78baf","name": "处理超声波传感器数据","func": "var node = msg.payload\nvar shortAddr = node[0]\nreturn [\n    {topic: shortAddr, payload: node[1]},\n    {topic: shortAddr, payload: \"\"+ (node[1] / 100) +\" m\"}\n]","outputs": 2,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 880,"y": 80,"wires": [["f047fd0de0c8644c"],["77dba539c59a386f"]]},{"id": "9de3a936b607a633","type": "serial in","z": "a271f746b8b78baf","name": "WiFi串口COM8输入","serial": "804b073ba5bac0a9","x": 130,"y": 380,"wires": [["5598f41421735b24"]]},{"id": "5598f41421735b24","type": "function","z": "a271f746b8b78baf","name": "处理串口数据函数并判读节点类型","func": "var frame = msg.payload\n// 端节点地址\nvar endDeviceAddr = frame[3]+frame[4]\n// 传感器类型\nvar sensorNo = frame[5]\nvar sensor = [\"温湿度\", \"人体红外\", \"光照\", \"震动\", \n          \"烟雾\", \"酒精\", \"超声波\", \"三轴\",\n          \"水流量\", \"雨滴\", \"门磁\"]\n// 数据\nvar data = [frame[6], frame[7], frame[8]]\nreturn {topic: sensor[sensorNo], payload: [endDeviceAddr, data]}","outputs": 1,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 400,"y": 380,"wires": [["04165a40f0638664"]]},{"id": "93cce256dae79ec0","type": "function","z": "a271f746b8b78baf","name": "处理三轴传感器数据","func": "var node = msg.payload\n// 节点短地址\nvar endDevice = node[0]\n// 三轴值\nvar x = node[1][0]\nvar y = node[1][1]\nvar z = node[1][2]\nvar data = \"x: \" + x +\",y: \" + y + \",z: \" + z\n// 三轴x值\nreturn [\n    {topic: \"x\", payload: x},\n    {topic: \"y\", payload: y},\n    {topic: \"z\", payload: z},\n    {topic: \"data\", payload: data}\n]\n","outputs": 4,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 880,"y": 320,"wires": [["01017c20c0854b66"],["01017c20c0854b66"],["01017c20c0854b66"],["07acf3dda54fa7e2"]]},{"id": "01017c20c0854b66","type": "ui_chart","z": "a271f746b8b78baf","name": "","group": "2c4daaf625693205","order": 3,"width": 0,"height": 0,"label": "三轴传感器监视","chartType": "pie","legend": "false","xformat": "HH:mm:ss","interpolate": "linear","nodata": "","dot": false,"ymin": "-20","ymax": "50","removeOlder": "5","removeOlderPoints": "","removeOlderUnit": "1","cutout": 0,"useOneColor": false,"useUTC": false,"colors": ["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs": 1,"useDifferentColor": false,"className": "","x": 1140,"y": 280,"wires": [[]]},{"id": "2714bf9cf36752b8","type": "function","z": "a271f746b8b78baf","name": "处理震动传感器数据","func": "var node = msg.payload\n// 节点短地址\nvar endDeviceAddr = node[0]\n// 震动值\nvar val = node[1][0]\nreturn {topic: endDeviceAddr, payload: val}\n","outputs": 1,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 880,"y": 400,"wires": [["909bafbb628444e1","27e9f9f58a22f1f6"]]},{"id": "e399fd2c31a733ad","type": "function","z": "a271f746b8b78baf","name": "处理串口数据函数并判读节点类型","func": "var frame = msg.payload\n// 节点短地址\nvar shortAddr = frame[5]+frame[6]\n// 传感器类型\nvar sensorNo = frame[10]\nvar sensor\nif (sensorNo == 0x86)\n{\n    // 超声波\n    sensor = \"超声波\"\n} \nelse if (sensorNo == 0x84) {\n    // 烟雾\n    sensor = \"烟雾\"\n}\n// 数据\nvar data = frame[11]\nreturn {topic: sensor, payload: [shortAddr, data]}","outputs": 1,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 400,"y": 140,"wires": [["41c18eac9586b069"]]},{"id": "41c18eac9586b069","type": "switch","z": "a271f746b8b78baf","name": "Zigbee节点判断","property": "topic","propertyType": "msg","rules": [{"t": "eq","v": "超声波","vt": "str"},{"t": "eq","v": "烟雾","vt": "str"},{"t": "else"}],"checkall": "false","repair": false,"outputs": 3,"x": 660,"y": 140,"wires": [["ccf9848aae2ae4ce"],["8a390ebd777bfc59"],["4536daee149e96d2"]]},{"id": "8a390ebd777bfc59","type": "function","z": "a271f746b8b78baf","name": "处理烟雾传感器数据","func": "var node = msg.payload\nvar shortAddr = node[0]\nvar data = node[1]\nreturn {topic: shortAddr, payload: data}","outputs": 1,"noerr": 0,"initialize": "","finalize": "","libs": [],"x": 880,"y": 140,"wires": [["83c29137012ce704","6594423759956339"]]},{"id": "83c29137012ce704","type": "ui_chart","z": "a271f746b8b78baf","name": "","group": "edb315d0aa0404ce","order": 3,"width": 0,"height": 0,"label": "烟雾传感器监视","chartType": "line","legend": "false","xformat": "HH:mm:ss","interpolate": "linear","nodata": "","dot": false,"ymin": "-20","ymax": "50","removeOlder": "5","removeOlderPoints": "","removeOlderUnit": "1","cutout": 0,"useOneColor": false,"useUTC": false,"colors": ["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs": 1,"useDifferentColor": false,"className": "","x": 1100,"y": 120,"wires": [[]]},{"id": "854e53dd8b178f91","type": "serial-port","serialport": "COM7","serialbaud": "115200","databits": "8","parity": "none","stopbits": "1","waitfor": "","dtr": "none","rts": "none","cts": "none","dsr": "none","newline": "13","bin": "bin","out": "count","addchar": "","responsetimeout": "10000"},{"id": "edb315d0aa0404ce","type": "ui_group","name": "Zigbee节点数据","tab": "9426268fa5f427a2","order": 1,"disp": true,"width": "6","collapse": false,"className": ""},{"id": "2c4daaf625693205","type": "ui_group","name": "WiFi节点数据","tab": "9426268fa5f427a2","order": 2,"disp": true,"width": "6","collapse": false,"className": ""},{"id": "804b073ba5bac0a9","type": "serial-port","serialport": "COM8","serialbaud": "9600","databits": "8","parity": "none","stopbits": "1","waitfor": "","dtr": "none","rts": "none","cts": "none","dsr": "none","newline": "10","bin": "bin","out": "count","addchar": "","responsetimeout": "10000"},{"id": "9426268fa5f427a2","type": "ui_tab","name": "数据采集系统","icon": "dashboard","disabled": false,"hidden": false}
]

2. MQTT实验

[{"id": "8cfa40f205178e09","type": "tab","label": "MQTT流程","disabled": false,"info": "","env": []},{"id": "786c122f2dca298c","type": "inject","z": "8cfa40f205178e09","name": "","props": [{"p": "payload"},{"p": "topic","vt": "str"}],"repeat": "","crontab": "","once": false,"onceDelay": 0.1,"topic": "test-MQTT","payload": "这是一个测试","payloadType": "str","x": 210,"y": 120,"wires": [["3dfcbbceac74d7a9"]]},{"id": "3dfcbbceac74d7a9","type": "mqtt out","z": "8cfa40f205178e09","name": "test-Mqtt-publisher","topic": "test-MQTT","qos": "0","retain": "false","respTopic": "","contentType": "","userProps": "","correl": "","expiry": "","broker": "cfa3263c5fc61d26","x": 490,"y": 120,"wires": []},{"id": "cfa3263c5fc61d26","type": "mqtt-broker","name": "","broker": "localhost","port": "1883","clientid": "","autoConnect": true,"usetls": false,"protocolVersion": "4","keepalive": "60","cleansession": true,"birthTopic": "","birthQos": "0","birthPayload": "","birthMsg": {},"closeTopic": "","closeQos": "0","closePayload": "","closeMsg": {},"willTopic": "","willQos": "0","willPayload": "","willMsg": {},"sessionExpiry": ""}
]

Node-RED使用记录相关推荐

  1. 关于gyp ERR node-gyp gyp ERR node -v错误记录

    重要出错信息 gyp ERR! node -v v14.15.3 gyp ERR! node-gyp -v v5.1.0 fatal error: too many errors emitted, s ...

  2. Node.js日志记录指南

    当你开始用 JavaScript 进行开发时,可能学到的第一件事就是如何用 console.log 将内容记录到控制台.如果你去搜索如何调试 JavaScript,会发现数百篇博文和 StackOve ...

  3. Node.JS 学习记录(02)

    Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在 ...

  4. _rasa_chatbot_Rasa Chatbot,Node Red和快速的Web接口

    _rasa_chatbot Imagine you could build a system that can automatically reach out to users to collect ...

  5. 如何调试Node.js应用程序?

    如何调试Node.js服务器应用程序? 现在,我主要使用带有以下打印语句的警报调试 : sys.puts(sys.inspect(someVariable)); 必须有更好的调试方法. 我知道Goog ...

  6. 查询分析器在哪里_你应该知道的3种Node.js分析器类型

    Node.js类似于许多其他编码语言,因为它需要与正确的工具结合使用来调试程序,克服任何瓶颈并优化其功能.使用正确的分析器,您可以毫不费力地实现这一目标,尽管它们都不是完美的. 在编码中,分析器是一种 ...

  7. Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志

    本指南演示了如何从 Node.js Web 应用程序中提取日志并将它们安全地传送到 Elasticsearch Service 部署中. 你将设置 Filebeat 来监控具有标准 Elastic C ...

  8. 基于QT和Node.js的八叉树算法提取图片主题色

    资源下载地址:https://download.csdn.net/download/sheziqiong/85883609 资源下载地址:https://download.csdn.net/downl ...

  9. UE动画节点 —— Blend Node

    参考:https://docs.unrealengine.com/5.0/en-US/animation-blueprint-blend-nodes-in-unreal-engine/ Blend N ...

  10. node.js 入门操作 持续学习中

    系列文章目录 本系列为我的node.js学习记录,欢迎大家参考和指出我的不足. 目录 系列文章目录 前言 node.js模块开发 具体用法: 一些简单的系统模块 js代码测试: 总结 前言 首先今天原 ...

最新文章

  1. 微信授权获取用户的openid和支付宝授权获取用户的userid
  2. 您的连接不是私密连接
  3. 【codeforces 798A】Mike and palindrome
  4. 使用 SAP UI5 CLI 命令行工具构建和运行 SAP UI5 应用
  5. Bootstrap系列 -- 8. 代码显示
  6. linux下iostat命令无效,linux iostat命令详解
  7. 文件查找工具Everything使用笔记
  8. EMD(经验模态分解)
  9. 计算机无法安装cad怎么办,电脑安装AutoCAD提示未正常卸载无法安装如何解决
  10. oracle+linux+oel+6.9,Oracle 11g(11.2.0.4) install on OEL6.7
  11. 从今天起,我决定去掉cnzz统计
  12. 电赛无人机特征匹配(二):ORB算法+BFM算法+D-P轮廓检测算法
  13. Hyperopt 参数优化
  14. 2014工作总结与2015展望
  15. 服务器共享文件搜索慢的原因,客户端访问服务器共享文件反应很慢.doc
  16. 半导体设备英文缩写_ETC的系统构成和主要设备、芯片供应商
  17. 【七里香】雨下整夜 我的爱溢出就像雨水
  18. 英文操作系统中,cmd显示中文乱码问题
  19. 【无标题】残余应力 conception
  20. MATLAB的RTL-SDR硬件支持包使用详细教程

热门文章

  1. 下载ps压缩包解压后双击set-up运行报错
  2. 计算机自带的游戏不见了怎么办,电脑桌面上的游戏图标不见了怎么办
  3. Metasploit域渗透测试全程实录(终结篇)
  4. 如何用计算机打大括号,在电脑上怎么打大括号
  5. 用CAD看图软件修改文字样式的好方法
  6. Echarts(曲线图)
  7. 【一步步学OpenGL 14】 -《相机控制1(键盘事件)》
  8. Python计算给定日期位于当年第几周
  9. 笨办法学python3在线阅读知乎_Python第三课——笨办法学Python
  10. 用python将书中流程图扫描成美观的电子稿