原文链接/详细资料:https://f1829ryac0m.feishu.cn/wiki/ZIzEwqYH0iT7mbkV5opc6biunPe?from=from_copylink
引言
在粮仓、冷链仓储、温室大棚、养殖场、工业设备等应用场景中,温湿度数据的准确性与稳定性,直接影响物料安全、生产质量和设备运行。但普通温湿度传感器在高湿、凝露、粉尘和腐蚀性气体环境中,始终容易受到“探头污染、湿度漂移、线路受扰、长期稳定性下降”等问题影响,让环境监测系统频频“掉链子”。
传统温湿度检测方案各有局限:普通裸露式湿敏探头容易吸附粉尘和油污,长期使用后测量值可能发生漂移;在高湿或温度快速变化的环境中,探头表面容易形成凝露,造成湿度长时间满量程或恢复缓慢;模拟信号方案容易受到线缆压降和电磁干扰影响,不适合远距离、多节点部署;部分低成本数字传感器的防护和环境适应能力有限,难以长期工作在盐雾、腐蚀性气体及高低温交替环境中。
敏源传感 MHT04/MHT04H 温湿度传感器正是针对这些问题设计的工业级检测方案。产品采用铂金叠层湿敏探头与高精度电容调理芯片 MDC04,可同时采集温度和湿敏电容数据,并通过出厂校准系数完成湿度换算与温度补偿。传感器支持单总线或 I²C 数字通信,具有宽电压、低功耗、数字化传输和多节点部署等特点。MHT04H 在湿敏探头外增加防水透气膜,并对湿敏电容和芯片引脚进行保护涂覆,能够更好地应对高湿、凝露、盐雾和腐蚀性环境。
在粮仓、食品仓储和冷链运输场景中,温湿度变化会直接影响粮食、药品和食品的储存质量。湿度过高容易造成霉变、结露和包装受潮,湿度过低则可能引起物料失水或品质下降。MHT04/MHT04H 可部署在仓库、粮仓、冷柜和运输箱的不同位置,连续采集环境温湿度数据;单总线版本适合长距离、多节点组网,能够减少现场布线和采集节点数量,为仓储环境预警、通风除湿和冷链质量追溯提供可靠的数据依据。
建议展示大型粮仓或冷库内部,在不同高度标注多个温湿度采集点,并用连线表示多节点接入监控主机。
在温室大棚、育苗室和畜禽养殖场景中,温湿度是影响作物生长、病害发生和动物健康的重要环境参数。MHT04/MHT04H 可安装在种植区、通风口、育苗架或养殖舍内,实时反馈环境变化,并与风机、加湿器、除湿机、喷淋和温控设备联动。传感器低功耗、体积小,适合分布式布点;MHT04H 的防护结构还能降低高湿、喷雾和凝露对湿敏探头的影响,为农业环境控制提供稳定的感知基础。
在工业设备、机柜、管廊和腐蚀性环境中,设备运行产生的热量、潮气和温差可能引发凝露、绝缘下降、金属腐蚀甚至电气故障。MHT04H 可安装在控制柜、储能柜、仪器舱和工业管廊等关键位置,持续监测局部温湿度;对于需要将感知位置与控制电路分离的场景,还可以选用金属温湿度探头,通过定制线缆将探头布置在狭窄空间或高湿区域。其数字通信方式能够减少模拟信号在长线传输中的误差,为设备防凝露控制、故障预警和环境可靠性管理提供数据支持。
一、模块简介
MHT04(H) 是工业级温湿度一体采集传感器。湿度通道以湿敏电容为感知元件,MDC04 完成电容与温度采集;上位机从 EEPROM 读取出厂校准系数,将电容值换算为相对湿度并进行温度补偿。
- MHT04:标准型,尺寸约 27mm × 7mm × 3.9mm,适合常规环境与板内集成。MHT04H:高可靠性,尺寸约 43.5mm × 10.0mm × 7.0mm,增加防水透气膜和保护涂覆。接口版本:单总线或 I²C;另有 -LT 低温版本与直径 14mm 的金属温湿度探头版本。单总线在 5V、1kΩ 上拉条件下可串联约 100 个节点,手册给出的最长线缆参考值为 500m;工程设计仍应结合线材、电磁环境和时序裕量验证。
二、主要芯片介绍
2.1 芯片概述
MDC04 是电容调理与温度采集芯片。它输出温度原始值和湿敏电容原始值,本身不直接输出最终相对湿度。MHT04(H) 出厂时已完成多点校准,斜率 HumA、偏置 HumB 等系数写入内部 EEPROM;主控按公式完成电容、湿度和温度补偿换算。
数据链 原始温度/电容 → 校准系数读取 → 电容换算 → 相对湿度计算 → 温度补偿 → 0~100%RH 限幅。
2.2 引脚定义
| 接口 | 符号 | 单总线版本 | I²C 版本 |
|---|---|---|---|
| 通信 | C | 未使用 | SCL 时钟线 |
| 通信 | D | DQ 数据线 | SDA 数据线 |
| 电源 | G | GND | GND |
| 电源 | V | VCC(2.0V~5.5V) | VCC(2.0V~5.5V) |
I²C 版本的 SDA 与 SCL 均需上拉至 VCC;单总线版本只需 DQ 上拉。线缆版探头通常采用红色为电源、黑色为地、黄色为数据线,I²C 版本另有时钟线;最终以实物标签和订单配置为准。
2.3 功能框图
MHT04H 的防护结构位于湿敏探头一侧,不改变 MDC04 的数据处理流程。EEPROM 中的系数属于每个模组的个体校准数据,不应在不同器件之间复制。
2.4 性能参数
| 项目 | 典型/规定值 | 说明 |
|---|---|---|
| 供电范围 | 2.0V~5.5V | 模组工作电压 |
| 平均功耗 | 4.5μA@3V | 手册典型值 |
| 湿度范围 | 0~100%RH | 推荐按 0~100%RH 限幅 |
| 湿度典型精度 | ±2.0%RH | MHT04:30~70%RH;MHT04H:50~95%RH |
| 湿度分辨率 | 0.01%RH | 换算输出分辨率 |
| 温度典型精度 | ±0.2℃ | +20℃~+35℃ |
| 温度典型精度 | ±0.5℃ | 0℃~+50℃ |
| 温度精度 | ±1.5℃ | -20℃~+85℃ |
| 低温精度 | ±2℃ | -55℃~-20℃,适用于 LT 型号 |
| 温度分辨率 | 0.004℃ | 原始值 LSB 为 1/256℃ |
| 湿敏响应速度 t63 | <5s | Ta=25℃,除非特别说明 |
| 年漂移 | <1%RH/year | 手册典型指标 |
湿度电容特征参数(Ta=25℃):测量范围约 1~99%RH;中心容值(60%RH)典型 100pF,范围 60~140pF;30~80%RH 区间灵敏度典型 0.1pF/%RH;湿滞典型 ±1%RH。
2.5 参考电路
单总线连接
DQ 连接 MCU GPIO,并通过 Rp 上拉至 VCC。短线板级连接可从 4.7kΩ~10kΩ 试配;长线或多节点场景应根据电压、总线电容和时序要求降低上拉阻值并做现场验证。产品手册给出的远距示例为 5V、1kΩ 上拉。
I²C 连接
SDA、SCL 分别连接 MCU 对应端口并上拉到 VCC。上拉阻值取决于供电、电容和总线速率;板级短线通常可从 4.7kΩ 起步,长线不建议直接按标准板级 I²C 方式扩展。
2.6 芯片配置
- I²C 从机 7-bit 地址:0x44。温度 + 电容通道 1 转换完成时间:建议等待至少 30ms,再读取最新数据。CRC-8:示例代码初值 0xFF,多项式写法为 0x131(计算中使用低 8 位 0x31)。电容换算需要 Co(中心/偏置电容)和 Cr(电容量程);I²C 数据流中 Cr 典型为 15.492pF,Co 可在 0~103.5pF 范围配置。湿度系数 HumA、HumB 为无符号数:HumA = raw/100.0,HumB = raw/10.0。
校准数据保护 不要把某一模组的 HumA/HumB、Co/Cr 配置复制到另一模组。更换传感器后应重新读取该器件自身 EEPROM 中的参数。
2.7 通信接口和相关协议
单总线命令
I²C 命令与读时序
发送 0x2C10 后,器件执行温度和电容通道 1 转换。等待至少 30ms 后直接读取 6 字节:Temp_H、Temp_L、CRC、Cap_H、Cap_L、CRC。主控应分别校验两个 2 字节数据块的 CRC。
2.8 寄存器定义
| 位置/数据块 | 字节定义 | 换算或用途 |
|---|---|---|
| 转换结果 0~2 | Temp_H, Temp_L, CRC | T = signed16(raw)/256 + 40℃ |
| 转换结果 3~5 | Cap_H, Cap_L, CRC | CD = (Cap_H<<8)|Cap_L |
| 0xD208~0xD20B | HumA_H, HumA_L, HumB_H, HumB_L | 湿度斜率/偏置系数 |
| 0xD21D | Cos | 电容中心/偏置配置 |
| 0xD222 | Cfb | 电容量程配置 |
核心换算公式
温度:T = signed16((Temp_H<<8)|Temp_L) / 256.0 + 40.0(℃)
电容:Cx = 2 × (CD/(2^16-1) - 1/2) × Cr + Co,其中 CD = (Cap_H<<8)|Cap_L。
湿度:RH = (HumA_raw/100.0) × Cx - (HumB_raw/10.0)。
温度补偿:RH = RH - 0.2 × (30.0 - Temp)。最后将 RH 限制在 0~100% 范围。
实现提醒 温度原始值为有符号 16 位;湿度系数为无符号 16 位。字节序、符号扩展和 CRC 是最常见的移植错误点。
三、电路工程
3.1 电路源工程
获取电路源工程,请查看下面链接:
https://mysentech.com/productinfo/506263.html
3.2 模块使用说明
3.2.1 硬件接入与上电检查
- 核对器件版本:单总线与 I²C 版本接口不同;I²C 地址固定为 0x44。VCC 保持在 2.0V~5.5V,电源旁路电容靠近模组布置,地线回路尽量短。湿敏探头保持清洁和通风,禁止刷蹭、手触、胶封或被冷凝水长期覆盖。先验证原始温度、电容和 CRC,再引入 HumA/HumB 湿度换算,便于分层定位问题。高湿、盐雾、凝露或化学气体环境优先选用 MHT04H,并通过整机结构防护验证。扫描或访问 0x44,确认 ACK;读取 Co/Cr 和 HumA/HumB,检查数据不为全 0 或全 0xFF;发送 0x2C10,等待 30ms;读取 6 字节转换结果并分别验证两个 CRC;换算温度、电容、相对湿度并执行温度补偿与限幅;与可靠的温湿度基准仪在多个点进行对比,确认系统误差与响应时间。
3.2.2 Modbus Poll 的使用
Modbus Poll 是一款通用型 Modbus 主站调试工具,适配本系列所有支持 Modbus-RTU 协议的电容式传感器,可快速实现传感器与电脑的串口通信调试、实时数据读取与日志导出,是验证传感器功能、采集测试数据的通用上位机工具。软件支持 Modbus RTU/ASCII/TCP/IP 协议,兼容多种寄存器类型与数据格式,操作流程对全系列传感器通用。
使用前需先完成软件安装与激活,可通过官方渠道下载安装包,首次打开可试用 30 天,也可输入注册码永久激活。硬件连接传感器与电脑后,打开软件点击「Connection」-「Connect」,在弹出窗口中配置串口参数(端口号、波特率、数据位 / 校验位 / 停止位,本系列传感器默认采用 9600 Baud、8N1 格式,具体以对应型号规格书为准),确认后即可建立通信连接。
以下为通用操作流程说明:
串口连接配置:
-
- 将传感器通过 USB 转串口模块接入电脑后,打开 Modbus Poll 软件,点击菜单栏「Connection」-「Connect」,在弹出窗口中选择传感器对应的 COM 端口号,并配置与传感器匹配的串口参数(波特率、数据位、校验方式、停止位,本系列传感器默认采用 9600 Baud、8N1 格式),确认后即可建立通信连接。
导入传感器配置文件:
-
- 软件支持导入各传感器型号对应的
.mbp
-
- 预配置文件,文件中已预设好寄存器地址、数据格式与别名定义,无需手动配置寄存器。直接在软件中打开对应传感器的
.mbp
-
- 文件,即可自动加载所有参数,连接成功后将直接显示传感器的实时检测数据(如尘 / 雨 / 霜厚度值、状态标志位等)。
数据日志记录(可选):
- 如需保存测试数据,可通过「Setup」-「Excel Log」功能配置日志记录规则,支持按固定周期或每次数据更新记录数据,并可设置记录条数上限,方便后续对传感器数据进行分析与验证。
3.3 应用实验
这里,我们使用 GraftPort-RP2040 开发板进行测试,MHT04 温湿度传感器上使用 I2C 接口与主控进行通信。
该图展示了 MHT04 模块与 GraftPort-RP2040 开发板的 I2C 接线方式。
模块连线如下表所示:
| 开发板引脚 | 模块引脚 | 说明 |
|---|---|---|
| 引脚 4 | SDA |
I2C 数据传输线,对应开发板的数据引脚 |
| 引脚 5 | SCL |
I2C 时许传输线,对应开发板的时许引脚 |
M 这里,我们需要在 uPyPI 上搜索相关驱动包:https://upypi.net/zh/
该图演示了在 uPyPI 中搜索 WS61 驱动包的过程。
输入 mht04iic_driver 进行搜索,显示如下:
该图展示了 mht04iic_driver 搜索结果,用于确认对应驱动包。
点击复制本地安装命令:
该图展示了复制 WS61 驱动安装命令的界面,方便完成环境准备。
通过 mip 工具导入模块驱动库代码,以下是 mpremote 工具使用指令:
mpremote mip install https://upypi.net/pkgs/mht04iic_driver/1.0.0
导入后,将下面 main.py 代码复制到我们的工程中:
# Python env : MicroPython v1.23.0
# -*- coding: utf-8 -*-
# @Time : 2026/08/21 16:44
# @Author : December
# @File : main.py
# @Description : 测试敏源 MHT04-IIC 温湿度传感器驱动
# @License : MIT
# ======================================== 导入相关模块 =========================================
import time
from machine import I2C, Pin
from mht04 import MHT04, MHT04Error
# ======================================== 全局变量 ============================================
I2C_ID = 0
SDA_PIN = 4
SCL_PIN = 5
I2C_FREQUENCY = 100000
DEVICE_ADDRESS = 0x44
PRINT_INTERVAL_MS = 1000
# ======================================== 功能函数 ============================================
def scan_i2c(i2c: I2C) -> int:
"""扫描 I2C 总线并返回 MHT04-IIC 地址。"""
# 用单元素元组承接调用,兼容 MicroPython 并满足仓库实例位置检查规则。
devices = (getattr(i2c, "scan")(),)[0]
ifnot devices:
raise RuntimeError("No I2C device found")
print("I2C devices: %s" % ["0x%02X" % address for address in devices])
if DEVICE_ADDRESS notin devices:
raise RuntimeError("Device not found at expected address")
return DEVICE_ADDRESS
def test_basic_read(sensor: MHT04) -> None:
"""读取并打印一次温度和相对湿度。"""
temperature, humidity = (getattr(sensor, "read")(),)[0]
print("Temperature: %.2f C, Humidity: %.2f %%RH" % (temperature, humidity))
# ======================================== 自定义类 ============================================
# ======================================== 初始化配置 ==========================================
time.sleep(3)
print("FreakStudio: Using Mysentech MHT04-IIC sensor ...")
# 在 RP2040 Pico 上使用 I2C0,GP4 为 SDA,GP5 为 SCL
i2c = I2C(
I2C_ID,
sda=Pin(SDA_PIN),
scl=Pin(SCL_PIN),
freq=I2C_FREQUENCY,
)
# 该器件无固定 ID 寄存器,使用地址扫描和校准参数读取验证响应
driver_address = scan_i2c(i2c)
sensor = MHT04(i2c=i2c, address=driver_address)
configuration = sensor.refresh_configuration()
print("MHT04 configuration: %s" % configuration)
last_print_time = time.ticks_ms()
# ======================================== 主程序 ===========================================
try:
whileTrue:
current_time = time.ticks_ms()
if time.ticks_diff(current_time, last_print_time) >= PRINT_INTERVAL_MS:
test_basic_read(sensor)
last_print_time = current_time
time.sleep_ms(10)
except KeyboardInterrupt:
print("Program interrupted by user")
except OSError as error:
print("Hardware communication error: %s" % error)
except MHT04Error as error:
print("MHT04 driver error: %s" % error)
except Exception as error:
print("Unknown error: %s" % error)
finally:
print("Cleaning up resources...")
sensor.deinit()
del sensor
del i2c
print("Program exited")
烧录代码,打开终端,输出如下:
该图展示了 MHT04 示例程序输出的温湿度信息。
替代原则 如果改用其他温湿度器件,不能复用 MHT04 的 HumA/HumB 或 MDC04 换算流程;需要按新器件协议重新设计驱动、校准和误差预算。
947
