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

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

发布时间:2026/9/23 3:32:17 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

用日期编号打造目标执行系统:从260110说起
用日期编号打造目标执行系统:从260110说起

“260110”这串数字,我第一眼看到时以为是某个项目的内部编号,后来才反应过来,它其实是一个日期:2026年1月10日。我习惯用日期给重要的事情当锚点,尤其是跨年度的规划。如果你正打算在年初启动一个需要长期坚持的个人项… · 2026/9/23 3:32:11

EMQX 认证与授权拒绝日志的后端归因:per-authenticator 与 per-authorization-source 的告警日志及限流实现
EMQX 认证与授权拒绝日志的后端归因:per-authenticator 与 per-authorization-source 的告警日志及限流实现

后端物联网消息队列通信 【免费下载链接】emqx The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 点击查看 免费下载 导读 在同时配置多个认证器(Authenticat… · 2026/9/23 3:32:05

7MB的Photoshop平替:轻量图像编辑器Paint.NET实测
7MB的Photoshop平替:轻量图像编辑器Paint.NET实测

前阵子 Reddit 上冒出一个讨论帖,标题大意是“我把用了五年的 Photoshop 换成了一个 7MB 的小软件”。评论区没有平时那种数码区常见的剑拔弩张,反而是一片“我也是”的现场:有人贴出安装目录截图,有人发自己用这个小工具完成的电… · 2026/9/23 3:32:05

图解原理:十折交叉验证实战对比与避坑指南
图解原理:十折交叉验证实战对比与避坑指南

图解原理:十折交叉验证实战对比与避坑指南 上周给一个做自动驾驶感知模型的后端同学调参,他盯着屏幕骂娘:环境配了三天,跑个十折交叉验证还得手动写循环,结果数据泄露了,指标虚高,上线就翻车。这种“配置环境就卡半天,代码逻辑又容易写错”的痛点,在… · 2026/9/23 4:18:16

5个女性健康作息时间表开发坑,面试必问的避坑指南
5个女性健康作息时间表开发坑,面试必问的避坑指南

5个女性健康作息时间表开发坑,面试必问的避坑指南 配置环境就卡半天?别慌,这不是你电脑慢,是你掉进坑里了。 我干了10年开发,见过太多人在 女性健康作息时间表… · 2026/9/23 4:18:03

Word排版疑难杂症:单词间距突然变大?一份从原理到修复的完整排查指南
Word排版疑难杂症:单词间距突然变大?一份从原理到修复的完整排查指南

先讲个真实场景。我之前帮学弟修改毕业论文,有一段英文参考文献列表,标题格式看起来挺正常,但正文里单词之间的空隙大得离谱,一句话被拉成两端贴边中间悬空,审稿老师看到直接批注“排版混乱”。更麻烦的是,… · 2026/9/23 4:18:03

2026 Java面试备战指南:牛客网刷题与高频考点深度拆解
2026 Java面试备战指南:牛客网刷题与高频考点深度拆解

前几天有学弟问我:2026年了,准备Java面试还靠牛客网刷题行不行?会不会过时了?这个问题我挺有感触。这几年Java岗位的考察方式确实在变,以前背一背八股文可能就能过一面,现在面试官更擅长顺着一个点往下追问… · 2026/9/23 4:17:45

机房动环监控协议接入实战:Modbus TCP、UDP与SNMP温湿度终端选型指南
机房动环监控协议接入实战:Modbus TCP、UDP与SNMP温湿度终端选型指南

做机房动环监控的朋友应该都懂,现场最头疼的事情往往不是设备本身好不好用,而是让一批协议五花八门的设备在同一个平台里开口说话。UPS走SNMP,精密空调走Modbus RTU,新买的温湿度采集终端说支持Modbus TCP,另一间机房还… · 2026/9/23 4:17:45

3个坑让你在线识别文字面试翻车,避坑指南
3个坑让你在线识别文字面试翻车,避坑指南

3个坑让你在线识别文字面试翻车,避坑指南 看了一堆教程还是不会写项目,这大概是很多后端和全栈开发者的通病。特别是当面试官问起 在线识别文字… · 2026/9/23 4:17:38

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

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

企业微信二维码