Johnny-Five 实战:在 Intel Edison 上用 Grove TH02 温湿度传感器(Multi 组合组件)读取温度与湿度

发布时间:2026/9/23 3:32:30

Johnny-Five 实战:在 Intel Edison 上用 Grove TH02 温湿度传感器(Multi 组合组件)读取温度与湿度 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载Johnny-Five 的 Grove 生态支持在 Intel Edison Arduino Breakout 上直接驱动 Seeed 的 Grove 温湿度传感器 TH02高精度 Mini 版。本文以仓库中的 grove-humidity-temperature-edison 文档 为骨架结合 lib/sip.js、lib/thermometer.js、lib/hygrometer.js 的源码实现完整讲解硬件接线、运行方式、示例代码逐行解析以及 TH02 在 Johnny-Five 底层的 I2C 读取原理与数据换算公式帮助你用约 30 行代码同时拿到摄氏/华氏/开尔文温度和相对湿度。一、功能概览与适用平台TH02 是 Grove 系列高精度 Mini温湿度传感器内部通过 I2C 总线与主控通信。在 Johnny-Five 中它被建模为一个MultiSIP组合组件一次实例化同时提供thermometer温度计与hygrometer湿度计两个子模块分别暴露celsius、fahrenheit、kelvin和relativeHumidity属性。官方文档明确指出该 shield 与组件可与任何 Arduino pin-out 兼容的硬件平台协同工作但本指南以 Intel Edison Arduino Breakout 为示例平台对应 eg/grove-humidity-temperature-edison.js。二、硬件准备与接线要运行本示例你需要准备以下硬件Intel Edison Arduino Breakout扩展板即 Edison 的 Arduino 兼容底座将 Grove 的 I2C 信号桥接到 Edison 的 I2C 总线Grove Base Shield v2插在 Breakout 上提供标准 Grove 4-Pin 接口Grove – ThermometerHumidity SensorHigh-Accuracy Mini即 TH02 传感器模块。接线方式非常简单——TH02 模块本身就是 I2C 设备直接将其插入Grove Base Shield 上的 I2C 接口jack即可无需额外接线。传感器模块的 I2C 从机地址为0x40详见下文源码分析该地址由 lib/sip.js 中的ADDRESSES定义。仓库中提供了该场景的接线示意图参考 docs/breadboard/grove-humidity-temperature-edison.png图中展示了 Intel Edison含 Arduino Breakout、Grove Base Shield v2 与 TH02 模块的完整连接关系Base Shield 叠放在 Breakout 上TH02 插入 Base Shield 的 I2C 排座。三、环境依赖与运行方式示例程序位于仓库的 eg/grove-humidity-temperature-edison.js。它依赖两个 npm 包johnny-five本项目框架本体提供Board、Multi等高层 APIedison-ioIntel Edison 的 IO 插件负责把 Johnny-Five 的 IO 抽象映射到 Edison 的引脚与 I2C 总线。在项目根目录即包含 package.json 的目录安装依赖后在命令行直接运行node eg/grove-humidity-temperature-edison.js运行前请确认Edison 已通过 USB 连接并识别串口Grove Base Shield 上的 I2C 接口已插入 TH02 模块。程序启动后会自动探测板载 I2C 设备随后进入事件驱动的数据流在控制台持续打印温湿度读数。四、示例代码逐段解析下面是完整的示例代码与文档一致var five require(johnny-five); var Edison require(edison-io); var board new five.Board({ io: new Edison() }); board.on(ready, function() { // Plug the TH02 Barometer module // into an I2C jack var multi new five.Multi({ controller: TH02 }); multi.on(change, function() { console.log(Thermometer); console.log( celsius : , this.thermometer.celsius); console.log( fahrenheit : , this.thermometer.fahrenheit); console.log( kelvin : , this.thermometer.kelvin); console.log(--------------------------------------); console.log(Hygrometer); console.log( relative humidity : , this.hygrometer.relativeHumidity); console.log(--------------------------------------); }); });1. 创建 Board 实例并注入 Edison IOvar five require(johnny-five); var Edison require(edison-io); var board new five.Board({ io: new Edison() });与使用 Arduino 固件StandardFirmata的默认方式不同这里通过io选项直接注入edison-io插件使 Johnny-Five 以原生方式访问 Edison 的 GPIO 与 I2C 总线无需额外烧录固件。edison-io会在连接阶段自动完成初始化Board的ready事件表明底层 IO 已就绪。2. 实例化 Multi 组件var multi new five.Multi({ controller: TH02 });Multi是 Johnny-Five 对多功能传感器的统一抽象。从 lib/johnny-five.js 可以看到module.exports.Multi module.exports.SIP;即Multi是SIP的别名IMU同样是SIP的别名。因此在代码中你也可以写new five.SIP({ controller: TH02 })二者等价。controller: TH02告诉框架从驱动表中查找 TH02 的专属实现。由于 TH02 是纯 I2C 设备默认从机地址0x40会被自动采用因此这里无需显式指定address。3. 监听 change 事件输出读数multi.on(change, function() { console.log(Thermometer); console.log( celsius : , this.thermometer.celsius); console.log( fahrenheit : , this.thermometer.fahrenheit); console.log( kelvin : , this.thermometer.kelvin); ... console.log(Hygrometer); console.log( relative humidity : , this.hygrometer.relativeHumidity); ... });change事件在传感器数值发生变化时触发。回调中的this指向 Multi 实例本身可通过this.thermometer与this.hygrometer两个子组件访问子组件属性含义输出示例来源见后文换算thermometercelsius摄氏温度°C保留 1 位小数25.4thermometerfahrenheit华氏温度°F77.7thermometerkelvin开尔文温度K298.5hygrometerrelativeHumidity相对湿度%RH保留 2 位小数42.31五、源码级原理TH02 底层 I2C 驱动Multi/SIP组件会依据controller从 lib/sip.js 的Drivers表中加载对应驱动。TH02 的驱动定义在 lib/sip.js 的TH02段其核心信息如下I2C 地址ADDRESSES: [0x40]从机地址固定为0x40测量命令COMMAND.MEASURE_TEMPERATURE 0x11温度测量/转换、COMMAND.MEASURE_HUMIDITY 0x01湿度测量/转换寄存器STATUS 0x00状态寄存器bit0 表示转换是否完成、READ 0x01数据读取起始位、CONFIG 0x03配置寄存器写入测量命令。驱动的工作循环readCycle按以下顺序执行轮询切换测量类型用一个cycle计数器交替选择温度与湿度cycle 0时测温度否则测湿度并把对应命令写入CONFIG寄存器触发一次转换等待转换完成反复读取STATUS寄存器直到其 bit0status 0x01为 0表示测量与转换已完成读取原始数据源码注释特别说明了一个实践细节——数据手册声称应从0x01、0x02读取 MSB/LSB但实测从0x01读不到数据正确的数据实际位于0x02与0x03而直接读0x02的 2 个字节同样会得到垃圾值因此最终实现是分别从0x01与0x02各读 1 字节拼成 16 位原始值换算并触发 data温度与湿度各完成一次后把两个原始值组合成{ temperature, humidity }并emit(data)随后开启下一轮循环。这一步印证了 Johnny-Five 对不合规芯片数据手册的兼容处理——驱动的正确性来自实测调试而非照搬文档这也是真实接线可用的保障。六、数据换算公式原始值如何变成摄氏度与相对湿度温度换算lib/thermometer.js在 lib/thermometer.js 的TH02.toCelsius中只对上层传入的已换算温度做保留 1 位小数的格式化真正的原始值 → 摄氏温度换算发生在 lib/sip.js 的驱动内computed.temperature ((uint16(data[0], data[1]) 2) / 32) - 50;即将 16 位原始读数右移 2 位、除以 32 再减 50得到摄氏温度。源码注释引用 TH02 数据手册Page 8, Table 5指出其温度精度在 25°C 时典型 ±0.5°C、最大 ±1.0°C。fahrenheit与kelvin由 Johnny-Five 的Thermometer基类基于celsius自动换算华氏°F °C × 9/5 32开尔文K °C 273.15因此上层只需关心摄氏温度这一个原始换算入口。湿度换算lib/hygrometer.jslib/hygrometer.js 的TH02.toRelativeHumidity负责把驱动传来的湿度原始值转成百分比value(value) { if (value 100) { value 0; } return toFixed(value || 0, 2); }而驱动侧lib/sip.js的原始换算公式为computed.humidity ((uint16(data[0], data[1]) 4) / 16) - 24;即右移 4 位、除以 16 再减 24。源码注释Table 4, Resolution 12bit16 codes per %RH解释了其分辨率约 16 个码对应 1%RH即约 0.06%RH 的量化粒度换算后保留 2 位小数。toRelativeHumidity中还有一道防御逻辑若换算结果超过 100%RH物理上不可能则归零处理避免脏数据上报。完整数据流TH02 传感器(0x40) ↓ 状态轮询 寄存器读取lib/sip.js Drivers.TH02 原始 16bit 温度 / 湿度 ↓ 公式换算lib/sip.js2 /32 -50 与 4 /16 -24 celsius 与 humidity 原始数值 ↓ Thermometer/Hygrometer 控制器lib/thermometer.js / lib/hygrometer.js celsius、fahrenheit、kelvin、relativeHumidity ↓ Multi 组件聚合后 emit(change) 控制台输出七、change 事件是如何触发的示例监听的是 Multi 组件的change事件。在 lib/sip.js 的 Multi 组件实现中每个子组件thermometer、hygrometer自身会在数值变化时触发自己的changeMulti 内部订阅这些子组件事件并做聚合this[component].on(change, () { ... if (this.isReady) { this.emit(change, this, component); } });也就是说任一次温度或湿度变化都会向外冒泡为 Multi 的change回调里读取的this.thermometer.*与this.hygrometer.*始终是最新值。这也解释了为什么示例中只需订阅一次change就能同时拿到两类读数。八、扩展与注意事项换平台官方文档强调该 shield 与组件可用于任何 Arduino pin-out 兼容平台。若改用其他平台只需替换io选项对应的插件如firmata代码其余部分保持不变。安装依赖在项目根目录执行npm install即可同时安装johnny-five与edison-io依赖声明见 package.json。验证接线程序启动后若长时间无输出优先检查 TH02 是否插在 Base Shield 的 I2C 接口上、地址是否为默认0x40可通过在Multi选项中显式传address覆盖默认地址。数据边界湿度换算带有100归零的防御逻辑属于驱动对异常读数的容错实际使用中若持续出现 0应检查传感器接线与供电。更多组合用法Multi同时支持其他温湿度控制器如 SHT31D、HTU21D、DHT_I2C_NANO_BACKPACK 等见 lib/hygrometer.js更换controller即可复用同一套change事件模式。九、小结通过本文你可以在 Intel Edison Grove Base Shield v2 上仅用不到 30 行代码完成 TH02 温湿度传感器的高层接入Boardedison-io建立平台连接Multi({ controller: TH02 })一行实例化组合传感器change事件驱动输出摄氏/华氏/开尔文温度与相对湿度。结合 lib/sip.js 的驱动源码你还能看到 Johnny-Five 如何在底层处理 I2C 状态轮询、寄存器兼容与公式换算——这正是从会用 API到理解框架的关键一步。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐Maral-7B-alpha-1在Google Colab上的免费部署方案零基础也能快速上手的AI模型运行指南Maral 7B alpha 1在Google Colab上的免费部署方案零基础也能快速上手的AI模型运行指南 Maral 7B alpha 1是一款功能强大IoT机器人嵌入式Vben Admin 组件库切换实战从 Ant Design Vue 到 Element Plus、Naive UI 的多组件库架构解析Vben Admin 组件库切换实战从 Ant Design Vue 到 Element Plus、Naive UI 的多组件库架构解析 Vue AdminIoT机器人嵌入式Johnny-Five 温度计实战在 Arduino 上驱动 HIH6130 I2C 温湿度传感器Johnny Five 温度计实战在 Arduino 上驱动 HIH6130 I2C 温湿度传感器 HIH6130 是一款通过 I2C 总线通信的数字温湿度传IoT机器人嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/23 3:32:29

苹果描述文件在哪:3个源码解析技巧,面试必背

苹果描述文件在哪:3个源码解析技巧,面试必背 很多应届生刚入行,对着官方文档背熟了语法,结果一上项目就懵。明明知道怎么配环境变量,怎么起服务,但一碰到真机调试、证书签名这些底层逻辑,脑子就一片空白。这就是典型的“知其然不知其所以然”。今天咱…

2026/9/23 3:32:29

ROT13加密原理图解:面试必问的字符映射底层逻辑

ROT13加密原理图解:面试必问的字符映射底层逻辑 刚入行写代码,是不是经常陷入一个死循环?看了一堆教程,觉得自己懂了,结果一上手写项目就抓瞎。尤其是碰到像 ROT13 这种看似简单实则暗藏玄机的加密算法,面试官喜欢拿它考你对 字符集 和…

2026/9/23 4:22:31

SpringBoot+Vue+Hive旅游数据分析系统架构与实现全解析

做了几个大数据方向的Web项目后,我越来越觉得“数据平台”这类系统最大的难点不在技术有多新,而在于“数据怎么取、指标怎么算、结果怎么展示”这一整条链路能不能串起来。这次我整理的这个基于SpringBootVue的Hive旅游数据分析系统,就是一个…

2026/9/23 4:22:31

快慢思考分层:Claude Code+Jev+/loop让AI Agent成本降90%

最近在给团队搭内部AI Agent平台时,一个很现实的问题把我逼到了墙角:什么任务都塞给旗舰模型,结果是账单每天几百美元地涨,而且很多活根本不需要那么强的推理。后来我把整个架构改成“Claude Code Jev /loop”的分层循环方案&am…

2026/9/23 4:22:31

基于大模型AI的芯片电子束晶圆检测系统平台设计与实践

做半导体工艺或者设备这一行的朋友,应该对“晶圆检测”这四个字不陌生。但今天聊的这套东西,不是常规的光学检测机台,而是把大模型和人工智能直接塞进电子束晶圆检测平台里做核心引擎。这个方向在行业里属于既有硬件门槛、又有软件深度的交叉…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码