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

无法通过QModBus或pySerial正常连接SHT20 RS485传感器求助

RS485接口SHT20传感器无响应问题排查

问题概况

  • 尝试通过Python脚本、多款串口工具连接RS485接口的SHT20传感器,传感器对所有命令无正常响应,仅返回乱码,红灯持续闪烁
  • 线缆通断正常,已按手册要求提供5V DC供电
  • 更换两个同型号传感器,问题完全一致
  • 使用QModBus测试时,从机返回异常十六进制数据:01 81 01 81 90

所用Python脚本

import serial 
import time

ser = serial.Serial( 
    port='COM5',
    baudrate=9600,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=3)

def readtempandhum():
    print ("reading temperature-humidity") 
    x= b'\x01\x04\x00\x01\x00\x02\x20\x0B' 
    for i in x:
        envio=chr(i) 
        ser.write(envio.encode()) 

ser.isOpen() 
readtempandhum() 

while True:
    line=ser.readline() 
    if len(line)>0: 
        print(line)
        try:
            temp=float((line[3]*256+line[4])/100) #温度数据转换
            hum=float((line[5]*256+line[6])/100) #湿度数据转换
            print (str(temp)+' '+str(hum))
        except Exception as e:
            print("read error "+str(e))
        ser.flush() 
        readtempandhum() 
    time.sleep(2) #每2秒重复一次

可能的原因及排查步骤

  • RS485接线反接:RS485的A(+)、B(-)引脚必须一一对应连接,接反会直接导致通信失败。立刻检查传感器与转换器的接线,确认A对A、B对B。
  • ModBus参数不匹配:
    • 校验位错误:当前脚本用的是偶校验,但部分RS485 SHT20传感器默认用无校验,尝试把parity=serial.PARITY_EVEN改成serial.PARITY_NONE测试。
    • 从机地址错误:脚本中指令的从机地址是0x01,若传感器默认地址不是01,指令会被忽略。查手册确认默认地址,或尝试常见的0x02、0x03地址。
  • RS485转换器故障:
    • 廉价转换器兼容性差,或未正确工作。换一个靠谱的RS485-USB转换器测试,优先选带指示灯的型号,观察发送/接收灯是否正常闪烁。
    • 部分无源转换器供电不足,若传感器距离远,需用有源RS485转换器。
  • 指令CRC校验错误:
    • 你发送的指令中CRC位是0x20 0x0B,用在线ModBus CRC计算器重新计算01 04 00 01 00 02的CRC16值,若不一致,传感器会返回错误响应(比如你看到的01 81...,81代表功能码错误)。
  • 供电电流不足:
    • 5V供电电压够,但电流不够也会导致传感器异常。换一个输出电流≥100mA的5V电源测试,避免用电脑USB口直接供电(部分USB口带负载能力弱)。
  • 总线干扰与匹配问题:
    • 通信距离超过10米的话,在RS485总线两端加120Ω终端电阻,减少信号反射。
    • 必须用屏蔽双绞线作为RS485线缆,普通导线易受干扰导致乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:25:58