首页/新闻资讯/正文详情

玩物联网第 5 期:使用CH348芯片IO端口,控制红外灯和传感器报警

发布时间:2026/9/26 19:35:18 来源:云帆数科 栏目:资讯中心
玩物联网第 5 期:使用CH348芯片IO端口,控制红外灯和传感器报警
系统拓扑视频地址 https://v.douyin.com/i2voy4xqrhonode-red流json数据[{id: cd3040d39f7937b9,type: tab,label: 按钮控制红外灯、报警,disabled: false,info: ,env: []},{id: 117c0905ee03d996,type: serial out,z: cd3040d39f7937b9,name: ttyUSB7-红外模块,serial: 28fe9f413d88b88a,x: 510,y: 40,wires: []},{id: d506bf92bb2fcf4e,type: function,z: cd3040d39f7937b9,name: 开/关灯红外码,func: // lightStatus灯状态为关false时才进入if中去开灯\nif (!flow.get(\lightStatus\)) {\n // 开灯 红外码\n msg.payload Buffer.from(\6863000022DC08B20446D5014347454745464646464645464646464646D50143D50143D50143D50143D50143D50143D50143D5014446464646464646464943494346464646D50144D50144D50144D50143D50144D40144D40144D026E50895024B1B16\, \hex\);\n // flow.set(\lightStatus\, true); // 将灯状态设置为true\n} else {\n // 关灯 红外码\n msg.payload Buffer.from(\6863000022DE08B50443D5014347454745474547454745474547454745D50143D50143D50143D60143D60143D60143D501424745D60143474547454745474547454745D501434745D50143D50143D50142D60142D50143D50143D326DD089902471616\, \hex\);\n // flow.set(\lightStatus\, false); // 将灯状态设置为false\n}\nreturn msg;,outputs: 1,timeout: 0,noerr: 0,initialize: ,finalize: ,libs: [],x: 300,y: 40,wires: [[117c0905ee03d996]]},{id: af1307849d80a689,type: inject,z: cd3040d39f7937b9,name: 开/关 按钮,props: [{p: payload},{p: topic,vt: str}],repeat: ,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: ,payloadType: date,x: 120,y: 40,wires: [[d506bf92bb2fcf4e]]},{id: a43122b200bae615,type: modbus-write,z: cd3040d39f7937b9,name: 设置报警温度上限值,showStatusActivities: false,showErrors: false,showWarnings: true,unitid: 1,dataType: MHoldingRegisters,adr: 608,quantity: 2,server: c5ccfb4a6c3e3160,emptyMsgOnFail: false,keepMsgProperties: false,delayOnStart: false,startDelayTime: ,x: 480,y: 180,wires: [[],[]]},{id: e3a87633109033f3,type: inject,z: cd3040d39f7937b9,name: 报警0度,props: [{p: payload}],repeat: ,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: 0,payloadType: str,x: 120,y: 100,wires: [[3a6032ad23f4711d]]},{id: 6a56f001cff6514d,type: inject,z: cd3040d39f7937b9,name: 报警99度,props: [{p: payload}],repeat: ,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: 99,payloadType: str,x: 130,y: 160,wires: [[3a6032ad23f4711d]]},{id: 3a6032ad23f4711d,type: function,z: cd3040d39f7937b9,name: 转换成CDAB格式,func: // 将温度字符串变number(数字)\n// let temperature Number(msg.payload);\n\nlet temperature flow.get(\alarmStatus\)?0:99;\n\nif (isNaN(temperature)) {\n node.error(\温度不是有效数字\);\n return null;\n}\n\n// 声明buffer变量(二进制容器)\nlet buffer Buffer.alloc(4);\n\n// 将温度值写入buffer\nbuffer.writeFloatBE(temperature, 0);\n\n// 将温度值转为CDAB格式\nmsg.payload [\n buffer.readUInt16BE(2), // 从第2格开始读2字节 → 00 00(CD低字)\n buffer.readUInt16BE(0) // 从第0格开始读2字节 → 42 A0(AB高字)\n];\nreturn msg;,outputs: 1,timeout: 0,noerr: 0,initialize: ,finalize: ,libs: [],x: 310,y: 120,wires: [[a43122b200bae615]]},{id: b917608ef48e5d4c,type: exec,z: cd3040d39f7937b9,command: /home/ch348/ch348_gpio,addpay: payload,append: ,useSpawn: false,timer: 0.06,winHide: false,oldrc: false,name: ,x: 490,y: 280,wires: [[9f7cbc3216d30517],[],[]]},{id: ac52f4da0539aaa8,type: inject,z: cd3040d39f7937b9,name: 绿LED,props: [{p: payload},{p: topic,vt: str}],repeat: ,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: ,payloadType: date,x: 90,y: 360,wires: [[831d7acbe495de40]]},{id: 831d7acbe495de40,type: function,z: cd3040d39f7937b9,name: 输出控制指令,func: // // ledStatus状态为关false时调用“输出高电平”指令\n// if(!flow.get(\ledStatus\)) {\n// msg.payload \write 1 1\; // gpio1设置为高电平\n// flow.set(\ledStatus\, true); // LED状态设置为true\n// } else {\n// // ledStatus状态为关true时调用“输出低电平”指令\n// msg.payload \write 1 0\; // gpio1设置为低电平\n// flow.set(\ledStatus\, false); // LED状态设置false\n// }\nmsg.payload \write 1 \ (flow.get(\lightStatus\)?0:1);\nreturn msg;,outputs: 1,timeout: 0,noerr: 0,initialize: ,finalize: ,libs: [],x: 240,y: 360,wires: [[b917608ef48e5d4c]]},{id: 8290cf21c15ab7b6,type: inject,z: cd3040d39f7937b9,name: 红LED,props: [{p: payload},{p: topic,vt: str}],repeat: ,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: ,payloadType: date,x: 90,y: 420,wires: [[90e7c4c93927fd96]]},{id: 90e7c4c93927fd96,type: function,z: cd3040d39f7937b9,name: 输出控制指令,func: // // ledStatus状态为关false时调用“输出高电平”指令\n// if(!flow.get(\redLedStatus\)) {\n// msg.payload \write 10 1\; // gpio10设置为高电平\n// flow.set(\redLedStatus\, true); // LED状态设置为true\n// } else {\n// // ledStatus状态为关true时调用“输出低电平”指令\n// msg.payload \write 10 0\; // gpio10设置为低电平\n// flow.set(\redLedStatus\, false); // LED状态设置false\n// }\nmsg.payload \write 10 \ (flow.get(\alarmStatus\)?1:0);\nreturn msg;,outputs: 1,timeout: 0,noerr: 0,initialize: ,finalize: ,libs: [],x: 240,y: 420,wires: [[b917608ef48e5d4c]]},{id: 531c61bc00a810b5,type: inject,z: cd3040d39f7937b9,name: 检测按钮B,props: [{p: payload},{p: topic,vt: str}],repeat: 0.5,crontab: ,once: true,onceDelay: 0.6,topic: ,payload: read 6,payloadType: str,x: 140,y: 300,wires: [[b917608ef48e5d4c]]},{id: 6c4a01e1a873c298,type: inject,z: cd3040d39f7937b9,name: 检测按钮A,props: [{p: payload},{p: topic,vt: str}],repeat: 0.5,crontab: ,once: false,onceDelay: 0.1,topic: ,payload: read 5,payloadType: str,x: 140,y: 240,wires: [[b917608ef48e5d4c]]},{id: 9f7cbc3216d30517,type: function,z: cd3040d39f7937b9,name: 解析exec节点输出,func: // 1. 强转 exec 节点输出的文本并去除首尾空格\nlet rawText msg.payload.toString().trim();\n\ntry {\n // 2. 专业操作将标准的 JSON 字符串解析成 JavaScript 纯对象\n let res JSON.parse(rawText);\n \n // 3. 直接通过属性和纯数字进行精准、专业的工控逻辑判断\n if (res.data.pin 5 res.data.value 1) {\n msg.payload \✅ 按钮 A被按下\;\n flow.set(\lightStatus\, !flow.get(\lightStatus\)); // 设置红外灯状态\n return msg;\n } \n else if (res.data.pin 6 res.data.value 1) {\n msg.payload \ 按钮 B被按下\;\n flow.set(\alarmStatus\, !flow.get(\alarmStatus\)); // 设置报警状态\n return msg;\n }\n} catch (error) {\n // 驱动程序输出了非 JSON 错误信息避免节点奔溃\n node.error(\JSON 数据解析失败原始文本为: \ rawText);\n}\nreturn null;,outputs: 1,timeout: 0,noerr: 0,initialize: ,finalize: ,libs: [],x: 490,y: 360,wires: [[ebc3cb76c0bac34e,d506bf92bb2fcf4e,831d7acbe495de40,3a6032ad23f4711d,90e7c4c93927fd96]]},{id: ebc3cb76c0bac34e,type: debug,z: cd3040d39f7937b9,name: debug 1,active: true,tosidebar: true,console: false,tostatus: false,complete: false,statusVal: ,statusType: auto,x: 680,y: 360,wires: []},{id: 28fe9f413d88b88a,type: serial-port,name: ttyUSB7-红外模块,serialport: /dev/ttyCH9344USB7,serialbaud: 115200,databits: 8,parity: none,stopbits: 1,waitfor: ,dtr: none,rts: none,cts: none,dsr: none,newline: \\n,bin: false,out: char,addchar: ,responsetimeout: 10000},{id: c5ccfb4a6c3e3160,type: modbus-client,name: ttyUSB0,clienttype: simpleser,bufferCommands: true,stateLogEnabled: false,queueLogEnabled: false,failureLogEnabled: true,tcpHost: 127.0.0.1,tcpPort: 502,tcpType: DEFAULT,serialPort: /dev/ttyUSB0,serialType: RTU-BUFFERD,serialBaudrate: 9600,serialDatabits: 8,serialStopbits: 1,serialParity: none,serialConnectionDelay: 100,serialAsciiResponseStartDelimiter: 0x3A,unit_id: 1,commandDelay: 1,clientTimeout: 20,reconnectOnTimeout: false,reconnectTimeout: 20,parallelUnitIdsAllowed: true,showErrors: false,showWarnings: true,showLogs: true},{id: 085c3b93156b9d02,type: global-config,env: [],modules: {node-red-node-serialport: 2.0.3,node-red-contrib-modbus: 5.45.2}}]

相关推荐

RuoYi-Vue-Plus Docker 部署踩坑:MySQL 中文双重编码的根因与修复
RuoYi-Vue-Plus Docker 部署踩坑:MySQL 中文双重编码的根因与修复

现象 用 docker-compose 部署完 RuoYi-Vue-Plus 后,打开前端页面: ✅ 正常:按钮文字「新增」「修改」「删除」、表头「角色名称」「权限字符」❌ 乱码:左侧菜单、面包屑、表格中的中文角色名 乱码长这样:Ÿ¡†… · 2026/9/11 2:01:35

AI电子宠物技术解析:从QQ宠物到Codex伴侣
AI电子宠物技术解析:从QQ宠物到Codex伴侣

1. 桌面电子宠物的文艺复兴:从QQ宠物到AI伴侣 2005年,一只胖乎乎的企鹅从QQ客户端右下角蹦出来,对着1.5亿中国网民喊"主人好"的场景,构成了千禧年初最鲜活的互联网记忆。如今OpenAI用Codex技术让电子宠物以全新形态回归… · 2026/9/16 2:19:30

GPT-5.6 Sol在Cerebras上实现750 TPS:AI智能体工作流的响应速度革命
GPT-5.6 Sol在Cerebras上实现750 TPS:AI智能体工作流的响应速度革命

1. 先搞清楚GPT-5.6 Sol在Cerebras上的750 TPS到底意味着什么看到GPT-5.6 Sol在Cerebras上达到750 TPS(每秒处理750个token)这个数字,很多人的第一反应可能是“文本生成变快了”。但实际测试和工程部署经验告诉我,这个数字背后真正… · 2026/9/14 21:30:24

DeepSeek Harness 新手必装插件推荐:8 个提升开发效率的 DSH 插件
DeepSeek Harness 新手必装插件推荐:8 个提升开发效率的 DSH 插件

1. 为什么新手装完 DSH 第一件事是挑插件,而不是急着写代码刚接触 DeepSeek Harness(后面统一简称 DSH)的人,十有八九会犯同一个错误:装完本体,打开终端,看到那个朴素的命令行界面,然… · 2026/9/26 19:34:43

DSH新手必装:8个插件快速上手与避坑指南
DSH新手必装:8个插件快速上手与避坑指南

1. 为什么我劝新手从这 8 个 DSH 插件开始上手刚接触 DSH(DeepSeek Harness)的朋友,十有八九会卡在同一个地方:装好了本体,打开界面,然后盯着空荡荡的插件列表发呆,不知道下一步该干什么。我当初… · 2026/9/26 19:34:43

多相机同步精度怎么测:从曝光时刻到抖动统计的工程方法
多相机同步精度怎么测:从曝光时刻到抖动统计的工程方法

多相机系统的同步精度,指的是同一个物理事件在各路数据中出现时刻之间的差值。工程上真正被测的东西经常被搞错:很多人测的是"数据到达主机的时刻差",而不是"曝光发生的时刻差"。前者包含读出、封装、传输与驱动排队&… · 2026/9/26 19:34:37

OpenCode Harness 架构解析:智能体数据分析全流程实操指南
OpenCode Harness 架构解析:智能体数据分析全流程实操指南

1. 从 Harness 说起:为什么智能体需要一个“骨架”第一次接触 OpenCode 的 Harness 架构时,我脑子里冒出来的第一个念头是:这不就是给大模型装了一副骨架吗?后来用久了才发现,这个比喻只对了一半。Harness 更像是一套“… · 2026/9/26 19:34:37

当 AI 学会了“越狱”:从 Codex 绕过 Sudo 事件看智能体权限管理的边界——用 TaoToken 统一 Key 复现权限配置骨架
当 AI 学会了“越狱”:从 Codex 绕过 Sudo 事件看智能体权限管理的边界——用 TaoToken 统一 Key 复现权限配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:34:11

提升效率:利用工具自动生成 Git 提交注释——TaoToken 统一 Key 接入 IDE 插件与脚本的配置骨架
提升效率:利用工具自动生成 Git 提交注释——TaoToken 统一 Key 接入 IDE 插件与脚本的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 19:34:11

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码