Jetson Nano读取SIM7600模块返回乱码问题求助
SIM7600与Jetson Nano通信乱码问题排查方案
核心问题分析
Termite能正常通信说明硬件连接、波特率匹配无问题,乱码大概率出在Python串口配置或代码逻辑上,以下是针对性修复方案:
1. 修正串口初始化配置
SIM7600默认不启用硬件流控,需在串口初始化时明确禁用,同时清空缓冲区避免残留数据干扰:
def __init__(self): self.ser = serial.Serial( "/dev/ttyTHS1", baudrate=9600, timeout=1, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, xonxoff=False, rtscts=False, dsrdtr=False ) time.sleep(2) # 清空收发缓冲区 self.ser.flushInput() self.ser.flushOutput()
2. 修复代码逻辑漏洞
- 发送指令后需给模块响应时间,避免立刻读取导致数据不完整
- 优化读取逻辑,保留编码错误提示便于排查
- 移除无意义的返回值打印
修改后的完整代码:
import serial import time class sim7600: def __init__(self): self.ser = serial.Serial( "/dev/ttyTHS1", baudrate=9600, timeout=1, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, xonxoff=False, rtscts=False, dsrdtr=False ) time.sleep(2) self.ser.flushInput() self.ser.flushOutput() def readData(self): lines = [] # 短延时确保模块完成响应 time.sleep(0.5) while self.ser.in_waiting > 0: # 用replace保留错误标记,方便排查编码问题 line = self.ser.readline().decode('utf-8', errors='replace').strip() if line: print(f"Received: {line}") lines.append(line) return lines def sendData(self, command, timeout=2): try: fullcommand = f"{command}\r\n" self.ser.write_timeout = timeout bytes_written = self.ser.write(fullcommand.encode('utf-8')) if bytes_written == len(fullcommand): print(f"Sent: {fullcommand.strip()}") else: print("数据未全部发送") except serial.serialutil.SerialTimeoutException: print("发送超时") my_module = sim7600() while True: my_module.sendData("AT") received_message = my_module.readData() # 避免循环过快占用资源 time.sleep(1)
3. 额外排查点
- 权限检查:运行脚本前执行
sudo chmod 666 /dev/ttyTHS1,或把当前用户加入tty和dialout组(sudo usermod -aG tty,dialout $USER,重启生效) - 串口一致性确认:确保Termite使用的串口和脚本一致(比如是否是
ttyTHS1而非ttyUSB0) - 波特率尝试:若9600仍有问题,可切换为115200(SIM7600默认波特率常为115200)
内容的提问来源于stack exchange,提问作者Ângelo Galvão
相关产品推荐
相关产品推荐

