Johnny-Five 温度传感器实战:基于 MS5611 气压温度计的 Thermometer 使用指南

发布时间:2026/9/23 12:38:59
Johnny-Five 温度传感器实战:基于 MS5611 气压温度计的 Thermometer 使用指南 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载MS5611 是一款通过 I²C 接口通信的高分辨率数字气压/温度传感器温度测量分辨率优于 0.01 °C因此在 Johnny-Five 中既可作为独立Thermometer使用也可与Barometer、Altimeter组合成 Multi 综合传感器。本文以 docs/temperature-MS5611.md 为骨架结合 lib/thermometer.js 与 lib/sip.js 的源码实现讲解接线方式、最小可用代码、核心配置参数以及底层 I²C 驱动与温度换算原理帮助你快速在真实硬件上跑通基于 MS5611 的温度采集程序。MS5611 通过 I²C 挂载在面包板上对应 Johnny-Five 文档中的接线示意更完整的连线设计可参考 Fritzing 源文件 docs/breadboard/multi-MS5611.fzz。一、硬件与接线前提MS5611 是一颗气压-温度一体传感器数据手册见 lib/datasheets.md给出的温度量程为 -40 ℃ 至 85 ℃。它通过 I²C 与主控板通信从源码看其默认从机地址为0x77lib/sip.js 中ADDRESSES: [0x77]。接线时按 I²C 标准连接即可VCC→ 主控板 3.3V / 5V以具体模块规格为准GND→ 主控板 GNDSCL→ 主控板 I²C 时钟线Arduino 上通常为 A5Edison/树莓派等平台视所用 io 插件而定SDA→ 主控板 I²C 数据线Arduino 上通常为 A4由于 Johnny-Five 的Thermometer通过board.io这一层抽象访问 I²C 总线只要所用主控板固件Firmata 等支持i2cConfig/i2cRead/i2cWriteMS5611 驱动即可直接工作无需额外数字引脚。二、最小可用示例与运行方式仓库为Thermometer - MS5611提供了可直接运行的示例 eg/temperature-MS5611.js。在命令行中执行node eg/temperature-MS5611.js完整代码如下const { Board, Thermometer } require(johnny-five); const board new Board(); board.on(ready, () { const thermometer new Thermometer({ controller: MS5611 }); thermometer.on(change, () { const {celsius, fahrenheit, kelvin} thermometer; console.log(Thermometer); console.log( celsius : , celsius); console.log( fahrenheit : , fahrenheit); console.log( kelvin : , kelvin); console.log(--------------------------------------); }); });运行后每当温度读数发生变化控制台就会输出三行日志摄氏、华氏、开尔文三个温标下的当前温度。程序启动顺序如下new Board()建立与主控板的连接board.on(ready)在连接就绪后执行回调new Thermometer({ controller: MS5611 })通过Drivers.get(this.board, MS5611, options)加载 I²C 驱动并初始化传感器lib/thermometer.js驱动在每次完成温度换算后触发data事件Thermometer将其换算为三个温标并对外触发change事件。三、核心配置参数controller指定使用的传感器控制器本例为MS5611。Thermometer内部通过Board.Controller按该字符串匹配到对应实现lib/thermometer.js实现里会把Drivers.get(...)驱动发出的data事件中的temperature字段交给toCelsius处理。值得注意的是MS5611 是一个“一芯多用”的芯片除Thermometer外它同样被注册为Barometer气压计见 lib/barometer.js与Altimeter高度计见 lib/altimeter.js的控制器。这意味着同一颗芯片你在 Johnny-Five 中可以按需用不同组件类读取不同物理量。mode可选mode控制 ADC 转换精度与转换耗时之间的权衡默认值为5。在驱动源码 lib/sip.js 中可以看到如下映射const mode options.mode || 5; const kpDelay [1, 2, 3, 4, 5, 10][mode];即mode 取值模式换算后使用的延迟ms0ULTRA_LOW_POWER11LOW_POWER22STANDARD33HIGH_RES44ULTRA_HIGH_RES55默认对应数组最后一个元素10默认mode 5对应kpDelay 10也就是驱动按最高精度档位预留更长的转换等待时间。如果你的场景更看重采样速率而非分辨率可以显式传入较小的mode如mode: 0转换延迟会从 10 ms 缩短到 1 ms。address可选I²C 从机地址默认0x77。若硬件模块因 A0/A1 地址引脚配置不同而使用其他地址可显式传入覆盖默认值。四、源码级原理MS5611 驱动如何算出温度Thermometer的 MS5611 控制器实现非常简洁lib/thermometer.jsMS5611: { initialize: { value(options, callback) { const { Drivers } require(./sip); Drivers.get(this.board, MS5611, options) .on(data, ({temperature}) callback(temperature)); } }, toCelsius: { value(raw) { // Resolution 0.01 °C return toFixed(raw, 2); } } }真正复杂的工作全部封装在 lib/sip.js 的 MS5611 驱动中它忠实复刻了数据手册的采样流程Reset 与 PROM 校准系数读取上电后先写RESET (0x1E)延时后依次从0xA2起始的寄存器读出 6 个出厂校准系数 C1~C6lib/sip.js交替执行 D2温度与 D1压力转换通过0x50 mode温度与0x40 mode压力寄存器发起转换并按kpDelay延时后从0x00读取 24 位 ADC 原始值lib/sip.js温度计算先算温差dT D2 - C5 * 2^8再算TEMP 2000 dT * C6 / 2^23最后按数据手册执行二阶温度补偿TEMP 2000时的修正项见 lib/sip.js得到computed.temperature TEMP / 100即带两位小数的摄氏温度压力与高度同一轮采样中还会计算温度补偿后的压力P与海拔altitude涉及options.elevation参数lib/sip.js完整数据对象经data事件发出。由此可见示例中thermometer.on(change, ...)拿到的celsius实际已经经过了校准系数修正与二阶补偿精度可到 0.01 ℃ 量级源码注释标注为 “Resolution 0.01 °C”。摄氏温度随后在Thermometer内部按fahrenheit celsius * 9 / 5 32、kelvin celsius 273.15常量CELSIUS_TO_KELVIN见 lib/thermometer.js换算得到另外两个温标因此示例里可以一次解构出三个值。五、进阶用 Multi 一次读取温度、气压与高度由于 MS5611 天然集成了温度、气压、高度三项测量能力Johnny-Five 还把它注册为组合传感器Multi的组件。在 lib/sip.js 中可以确认MS5611: { initialize: { value(options) { Components.call(this, MS5611, options); } }, components: { value: [ALTIMETER, BAROMETER, THERMOMETER] } }也就是说实例化Multi({ controller: MS5611 })后可以同时访问multi.thermometer、multi.barometer、multi.altimeter三个子组件通过各自的change/data事件拿温度、气压与海拔。相关示例与文档可对照多合一用法eg/multi-MS5611.js、docs/multi-MS5611.md气压计单独用法eg/barometer-MS5611.js、docs/barometer-MS5611.md高度计单独用法eg/altimeter-MS5611.js、docs/altimeter-MS5611.md在 Multi 模式下IMU基类会等待所有组件各自完成首次change后才把整体标记为 ready 并对外触发事件lib/sip.js因此multi.thermometer的温度、multi.barometer的气压、multi.altimeter的高度在逻辑上是同一次采样周期内完成的非常适合做天气站、飞行高度计或环境监测这类需要多物理量同步读数的项目。六、调试与常见问题I²C 扫描不到设备先确认地址是否为0x77检查 SDA/SCL 是否接对、上拉电阻是否到位部分模块允许通过地址引脚改为0x76此时需在构造参数中显式传入address。没有change事件输出change只在读数发生变化时触发若环境温度恒定日志不会持续刷新这是正常行为需要周期性读数的场景可以改听data事件。读数精度不符合预期确认是否处于默认mode: 5最高精度档若使用了自定义mode转换延迟会缩短原始 ADC 精度相应降低。板级兼容MS5611 依赖主控板的 I²C 能力与对应固件/io 插件支持不同平台Arduino、Edison、树莓派等的接线引脚不同请以所用 io 插件文档为准。总结本文围绕 Johnny-Five 官方Thermometer - MS5611示例展开先给出了接线与最小可运行代码再逐项拆解controller、mode、address等配置参数最后深入 lib/sip.js 驱动源码解释了 PROM 校准系数、D2 温度转换、二阶温度补偿与三个温标换算的完整链路。基于这套知识你不仅能跑通示例还能将同一颗 MS5611 扩展为气压计、高度计乃至Multi三合一传感器覆盖温度、气压、海拔同步采集的常见 IoT 场景。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐Johnny-Five Thermometer MPL115A2 实战指南I2C 气压温度传感器的温度采集与源码解析Johnny Five Thermometer MPL115A2 实战指南I2C 气压温度传感器的温度采集与源码解析 本文以 Johnny Five 官方文档IoT机器人嵌入式Maral-7B-alpha-1在Google Colab上的免费部署方案零基础也能快速上手的AI模型运行指南Maral 7B alpha 1在Google Colab上的免费部署方案零基础也能快速上手的AI模型运行指南 Maral 7B alpha 1是一款功能强大IoT机器人嵌入式Movary多用户管理家庭共享观影记录的最佳实践Movary多用户管理家庭共享观影记录的最佳实践 Movary是一款开源的自托管电影追踪应用支持多用户管理功能让家庭成员可以在同一平台上各自维护独立的观影IoT机器人嵌入式上一篇KOReader 实战指南3 条命令跑起这款电子墨水阅读器5 步完成设备换装下一篇如何在5分钟内掌握EscrcpyAndroid设备图形化控制的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询