hds_driver

MicroPython Modbus RTU driver for the Mysentech HDS humidity detection sensor

1.0.0 Gypsyold Updated At: 2026-08-24
Install Package
Local Install
mpremote mip install https://upypi.net/pkgs/hds_driver/1.0.0
Remote Install
mip.install("https://upypi.net/pkgs/hds_driver/1.0.0")
Version Selection
README

HDS 湿度检测传感器驱动 - MicroPython版本

目录

简介

本项目为敏源 HDS(Humidity Detection Sensor)湿度检测传感器提供 MicroPython 驱动。驱动通过 UART Modbus-RTU 读取温度、两路电容、计数值、频率及设备信息,适用于滚刷、拖布、地毯等吸水材料的干湿状态检测。

HDS 使用电容变化表征材料含水变化,其结果不是环境相对湿度 %RH。如需输出干湿状态或分档结果,应在实际机械结构、材料和温度条件下采集样本并建立阈值。

主要功能

  • 支持 UART Modbus-RTU 通信,默认地址为 0x01
  • 内置独立命名的 hds_umodbus 通信库,避免与其他驱动包互相覆盖。
  • 支持读取温度、C1/C2 电容及全部实时测量寄存器。
  • 支持读取设备地址、平均次数、ID 和软硬件版本。
  • 支持设置平均次数、修改设备地址及触发校准命令。
  • 支持超时与 CRC 异常分类,读取失败默认重试 2 次。
  • 使用外部 Modbus 主机依赖注入,驱动内部不创建 UART。
  • 提供 RP2040 GP16/GP17 的完整运行示例。

硬件要求

推荐测试硬件

  • Raspberry Pi Pico 或其他 RP2040 开发板
  • 敏源 HDS 湿度检测传感器
  • USB 数据线
  • 杜邦线或可靠的焊接连接
  • 可选:3.3 V UART 逻辑分析仪,用于排查通信问题

引脚说明

Raspberry Pi Pico 物理脚 HDS 引脚 功能描述
3V3(OUT) 36 VDD 传感器电源正,建议使用 3.3 V
GND 38 或其他 GND GND 电源地,必须与 Pico 共地
GP16 / UART0 TX 21 RX Pico 发送端连接 HDS 接收端
GP17 / UART0 RX 22 TX Pico 接收端连接 HDS 发送端

RP2040 GPIO 不耐受 5 V。若 HDS 使用 5 V 供电,应确认其 UART TX 输出电平,并在 HDS TX 与 GP17 之间使用合适的电平转换。

软件环境

项目 要求
MicroPython 固件 v1.23.0
驱动版本 v1.0.0
测试平台 Raspberry Pi Pico / RP2040
通信协议 UART Modbus-RTU,9600 bps,8N1
依赖库 包内附带的 hds_umodbus
外部固件依赖

文件结构

hds_driver/
├── code/
│   ├── hds.py
│   ├── main.py
│   └── hds_umodbus/
│       ├── __init__.py
│       ├── common.py
│       ├── const.py
│       ├── functions.py
│       ├── modbus.py
│       ├── serial.py
│       ├── tcp.py
│       ├── typing.py
│       └── version.py
├── package.json
├── README.md
└── LICENSE

文件说明

文件 用途
code/hds.py HDS 寄存器、单位换算、重试及设备异常封装
code/main.py RP2040 GP16/GP17 数据采集示例
code/hds_umodbus/__init__.py hds_umodbus 包初始化与版本导出
code/hds_umodbus/common.py Modbus 通用主从功能接口
code/hds_umodbus/const.py Modbus 功能码、异常码和 CRC 常量
code/hds_umodbus/functions.py Modbus PDU 生成、解析和数据转换函数
code/hds_umodbus/modbus.py Modbus 基础类及寄存器处理逻辑
code/hds_umodbus/serial.py UART Modbus-RTU 主机与从机实现
code/hds_umodbus/tcp.py Modbus-TCP 实现,本驱动运行时不直接使用
code/hds_umodbus/typing.py MicroPython 类型标注兼容辅助模块
code/hds_umodbus/version.py hds_umodbus 版本信息
package.json GraftSense/mip 文件安装映射和包元数据
README.md 驱动使用说明
LICENSE MIT 许可协议

快速开始

1. 安装 MicroPython 固件

为 Raspberry Pi Pico 安装 MicroPython v1.23.0 或兼容版本,并确认开发工具可以访问开发板文件系统。

2. 复制文件

使用 Thonny、MicroPico 或 mpremote,将以下内容复制到开发板文件系统根目录:

/
├── hds.py
├── main.py
└── hds_umodbus/
    ├── __init__.py
    ├── common.py
    ├── const.py
    ├── functions.py
    ├── modbus.py
    ├── serial.py
    ├── tcp.py
    ├── typing.py
    └── version.py

使用 package.json 安装时会安装 hds.pyhds_umodbus。独立命名可避免安装其他 Modbus 驱动时覆盖本驱动依赖。测试文件 code/main.py 不在安装映射中,如需开机运行示例,应单独上传为开发板根目录的 main.py

3. 完成接线

按照“硬件要求”中的引脚表连接 HDS,重点确认:

  • HDS TX 连接 GP17。
  • HDS RX 连接 GP16。
  • Pico 与 HDS 必须共地。
  • 推荐使用 3.3 V 为 HDS 供电。

4. 最小运行示例

from machine import Pin
from hds_umodbus.serial import Serial as ModbusRTUMaster
from hds import HDS

modbus = ModbusRTUMaster(
    uart_id=0,
    baudrate=9600,
    data_bits=8,
    stop_bits=1,
    parity=None,
    pins=(Pin(16), Pin(17)),
)

sensor = HDS(
    host=modbus,
    address=0x01,
    retries=2,
    retry_delay_ms=50,
)

print(sensor.read_basic_measurements())

5. 运行结果

code/main.py 每秒读取一次数据,典型输出如下:

FreakStudio: HDS Humidity Detection Sensor Initialization
Device: {'address': 1, 'averaging': 10, 'humidity_level_raw': 0, 'id': 0, 'software_version': None, 'hardware_version': None}
T=26.7 C, C1=7.929 pF, C2=51.282 pF

Ctrl+C 可停止程序并释放驱动和 UART 资源。

主要 API

初始化

sensor = HDS(
    host=modbus,
    address=0x01,
    retries=2,
    retry_delay_ms=50,
    debug=False,
)
参数 类型 默认值 说明
host object 提供寄存器读写方法的 hds_umodbus RTU 主机
address int 0x01 Modbus 从机地址,范围 1~247
retries int 2 读取失败后的重试次数
retry_delay_ms int 50 重试间隔,单位 ms
debug bool False 是否输出英文调试信息

公共方法

方法 返回值或作用
read_register(register) 读取单个原始寄存器
read_registers(start_register, count) 连续读取多个原始寄存器
write_register(register, value) 写入单个寄存器,不自动重试
read_temperature() 返回摄氏温度
read_capacitance() 返回 (C1_pF, C2_pF)
read_basic_measurements() 返回温度、C1 和 C2,推荐周期采样使用
read_humidity_level_raw() 返回预留湿度档位寄存器原始值
read_measurements() 返回全部实时测量数据
read_device_info() 返回地址、平均次数、ID 和版本信息
set_averaging(count) 设置平均次数,范围 0~30
set_device_address(new_address) 修改从机地址,范围 1~247
trigger_calibration() 向校准命令寄存器写入 1
deinit() 释放驱动持有的 Modbus 主机引用

寄存器与单位

地址 内容 操作 驱动换算
0x0002 设备地址 读写 原始整数
0x0003 平均次数 读写 原始整数,范围 0~30
0x0004 湿度档位 只读 手册标为预留,不解释为 %RH
0x0005 ID 只读 原始整数
0x0006 校准指令 读写 写入 1 触发校准
0x0007 温度 只读 有符号值除以 10,单位 ℃
0x0008 C1 电容 只读 除以 1000,单位 pF
0x0009 C2 电容 只读 除以 1000,单位 pF
0x000A 内部参比电容计数值 只读 原始整数
0x000B 通道 1 电容计数值 只读 原始整数
0x000C 通道 2 电容计数值 只读 原始整数
0x000D 内部参比频率 只读 除以 100,单位 MHz
0x000E 通道 1 频率 只读 除以 100,单位 MHz
0x000F 通道 2 频率 只读 除以 100,单位 MHz
0x0010 通道 1 校准参数 读写 原始整数
0x0011 通道 2 校准参数 读写 原始整数
0x0012 通道 1 差值 只读 有符号 16 位整数
0x0013 通道 2 差值 只读 有符号 16 位整数
0x0014 软件版本 只读 除以 10;0xFFFF 返回 None
0x0015 硬件版本 只读 除以 100;0xFFFF 返回 None

注意事项

分类 注意事项
供电电压 HDS 支持 2~5 V;与 RP2040 直连时建议使用 3.3 V,避免 5 V UART 电平进入 GPIO
UART 接线 TX 与 RX 必须交叉连接,并确保 Pico 与 HDS 共地
通信参数 使用 9600 bps、8 数据位、无校验、1 停止位,默认地址 0x01
感应距离 感应面与目标之间应为 0~5 mm 非金属介质,附近避免金属遮挡
测量语义 C1/C2 表征材料干湿变化,不是环境相对湿度 %RH
干湿分档 应在最终机械结构和目标材料上采集样本后建立阈值,不应直接套用其他设备阈值
偶发超时 驱动默认重试 2 次;持续超时应检查供电、接线长度、连接可靠性及电机干扰
版本字段 软件或硬件版本寄存器返回 0xFFFF 时,驱动返回 None
写寄存器 写操作不会自动重试,以避免地址修改、校准等操作产生重复副作用
校准操作 现有手册未给出完整工艺,执行 trigger_calibration() 前应向敏源确认安装和材料状态
资源管理 HDS.deinit() 不关闭外部注入的 Modbus 主机;UART 生命周期由调用者管理

版本记录

版本号 日期 作者 修改说明
v1.0.0 2026-08-21 December 初始版本;支持 HDS Modbus-RTU 数据读取、配置写入、异常分类和重试

联系方式

许可协议

MIT License

Copyright (c) 2026 December

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

File List
Name Size Type
LICENSE 1.1KB File
README.md 11.6KB Doc
code/hds.py 25.0KB Python
code/hds_umodbus/__init__.py 1.1KB Main
code/hds_umodbus/common.py 28.1KB Python
code/hds_umodbus/const.py 7.8KB Python
code/hds_umodbus/functions.py 23.1KB Python
code/hds_umodbus/modbus.py 53.1KB Python
code/hds_umodbus/serial.py 29.8KB Python
code/hds_umodbus/tcp.py 28.5KB Python
code/hds_umodbus/typing.py 15.3KB Python
code/hds_umodbus/version.py 1.1KB Python
code/main.py 2.4KB Main
package.json 1.2KB Conf