You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Minimalmodbus RTU连接XY-MD02(SHT20)传感器无响应问题求助

问题排查解决思路

1. 补全串口通信参数配置

Minimalmodbus默认串口参数可能和XY-MD02传感器默认参数不匹配,且库层面会覆盖直接设置的serial.timeout参数,这也是你debug日志中显示读取超时为0.0ms的原因,需显式指定所有通信参数:

instr.serial.bytesize = 8          # 数据位8位
instr.serial.parity = serial.PARITY_NONE # 无校验
instr.serial.stopbits = 1          # 停止位1位
instr.timeout = 3                  # 配置minimalmodbus层级的超时,优先级高于serial层配置

2. 验证串口端口权限与驱动正常

  • 确认USB转RS485适配器的识别名称:拔插适配器执行ls /dev/ttyUSB*或ls /dev/ttyACM*,确认端口号无误,部分型号适配器会被识别为ttyACM*而非ttyUSB*
  • 树莓派默认普通用户没有串口访问权限,执行sudo usermod -aG dialout $USER后重启系统,或者临时用sudo python3 你的脚本名.py测试通信是否正常

3. 二次确认RS485接线

  • 确认适配器的A/B线和传感器的A/B线对应连接,不要接反
  • 传感器供电的负极必须和树莓派的供电负极共地,避免电平漂移导致传感器无法识别查询指令、无法返回响应

4. 适配半双工适配器收发切换延迟

部分低成本USB转RS485适配器切换收发状态需要额外时间,可添加以下配置适配:

instr.clear_buffers_before_each_transaction = True
instr.serial.write_timeout = 2

另外读取寄存器时需添加signed=True参数,匹配传感器返回的有符号温度格式,避免负温度解析错误。


可直接测试的完整修改后代码

#!/usr/bin/env python3
import minimalmodbus
import serial
import time

instr = minimalmodbus.Instrument('/dev/ttyUSB0', 1, debug=True)
# 串口参数全匹配XY-MD02默认配置
instr.serial.baudrate = 9600
instr.serial.bytesize = 8
instr.serial.parity = serial.PARITY_NONE
instr.serial.stopbits = 1
instr.serial.timeout = 3
instr.timeout = 3
instr.clear_buffers_before_each_transaction = True

while True :
        # 读取有符号数,按手册除以10得到实际温度
        raw_val = instr.read_register(registeraddress=1, functioncode=4, signed=True)
        temp = raw_val / 10
        print(f"当前温度:{temp}℃")
        time.sleep(3)

内容的提问来源于stack exchange,提问作者minilong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:45:07