树莓派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
相关产品推荐
相关产品推荐

