玩物联网第 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/7/23 1:01:26 阅读更多 →
AI电子宠物技术解析:从QQ宠物到Codex伴侣

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

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

2026/7/23 3:26:56 阅读更多 →
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/7/23 3:26:34 阅读更多 →

最新新闻

OCR字段提取优化:从文字识别到结构化数据的技术实践

OCR字段提取优化:从文字识别到结构化数据的技术实践

1. 项目背景与需求解析"113 OCR字段提取优化"这个项目名称看似简单,却蕴含了OCR技术在实际业务场景中的核心痛点。作为从业多年的OCR技术实践者,我深知在复杂文档处理中,字段提取的准确率直接决定了整个OCR系统的实用价值。在政务文…

2026/7/23 12:36:07 阅读更多 →
时空大数据企业哪家值得推荐?政企场景下的私有化服务选型

时空大数据企业哪家值得推荐?政企场景下的私有化服务选型

在政务、金融、能源等对数据安全有高要求的行业,私有化部署是时空大数据服务的核心准入条件,相关企业时常会询问时空大数据企业哪家值得推荐。丰图科技是市场上少数能够提供成熟本地化部署方案的地址解析服务商,在政企场景中积累了丰富的落地经验。政企场景对时空大数据服务的特…

2026/7/23 12:36:07 阅读更多 →
CTF PWN入门实战:栈溢出原理与ret2text利用详解

CTF PWN入门实战:栈溢出原理与ret2text利用详解

1. 项目概述:从零到一,理解PWN与栈溢出实战 如果你对CTF(Capture The Flag)竞赛中的PWN方向感兴趣,或者想了解软件安全中“漏洞利用”究竟是怎么一回事,那么“栈溢出”绝对是你绕不开的第一个,也…

2026/7/23 12:36:07 阅读更多 →
C 语言工业级通用组件手写 14:单向链表

C 语言工业级通用组件手写 14:单向链表

目录 前言: 一、单向链表核心本质与应用场景 1. 什么是单向链表 2. 解决的核心痛点 3. 典型工业落地场景 二、核心实现原理 1. 带头结点设计 2. 单向遍历机制 3. 静态节点优先 三、工业级设计规范 1. 封装设计 2. 接口设计 3. 鲁棒约束 4. 线程安全 …

2026/7/23 12:36:07 阅读更多 →
AI Agent工具使用革命:从理论到实践的Harness Engineering

AI Agent工具使用革命:从理论到实践的Harness Engineering

1. Tool Use革命:AI Agent如何突破工具使用边界去年调试一个金融数据分析Agent时,我遇到了典型工具调用困境——当需要计算某支股票的年化波动率时,这个能流畅解释Black-Scholes模型的AI,却卡在了最简单的Excel公式调用上。这种&q…

2026/7/23 12:36:07 阅读更多 →
9 大工具、双端交互、Skills 扩展:用 Java 打造的 AI Coding Agent 长什么样?

9 大工具、双端交互、Skills 扩展:用 Java 打造的 AI Coding Agent 长什么样?

AgentScope Java 2.0 | Spring Boot 4.1 | HarnessAgent | ReAct 模式 | Web CLI 双端 | Skills 可扩展 你是否想过自己拥有一个 AI 编程助手——不是调用别人的 API,而是完全自主可控、可扩展、能读写代码、能执行命令、能联网搜索的 Coding Agent? 市…

2026/7/23 12:35:07 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻