添加串口测试脚本 test_serial.py
This commit is contained in:
parent
0ecf542270
commit
721483dfce
141
test_serial.py
Normal file
141
test_serial.py
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""串口测试脚本 - 用于诊断 E104-BT12USP 网关通信问题."""
|
||||||
|
|
||||||
|
import serial
|
||||||
|
import serial.tools.list_ports
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def list_ports():
|
||||||
|
"""列出可用串口."""
|
||||||
|
print("=== 可用串口列表 ===")
|
||||||
|
ports = serial.tools.list_ports.comports()
|
||||||
|
for p in ports:
|
||||||
|
print(f" {p.device}: {p.description} ({p.hwid})")
|
||||||
|
return ports
|
||||||
|
|
||||||
|
|
||||||
|
def test_hci_mode(device, baudrate=115200):
|
||||||
|
"""测试 HCI 模式."""
|
||||||
|
print(f"\n=== 测试 HCI 模式 ({device}, {baudrate}) ===")
|
||||||
|
try:
|
||||||
|
ser = serial.Serial(device, baudrate, timeout=2)
|
||||||
|
print(f"串口已打开")
|
||||||
|
|
||||||
|
# 发送 HCI 版本查询 (E9 FF 02 00)
|
||||||
|
cmd = bytes([0xE9, 0xFF, 0x02, 0x00])
|
||||||
|
print(f"发送 HCI 版本查询:{cmd.hex().upper()}")
|
||||||
|
ser.write(cmd)
|
||||||
|
|
||||||
|
time.sleep(1)
|
||||||
|
if ser.in_waiting:
|
||||||
|
data = ser.read(ser.in_waiting)
|
||||||
|
print(f"收到响应 ({len(data)} 字节): {data.hex().upper()}")
|
||||||
|
|
||||||
|
# 尝试解析 91 响应
|
||||||
|
if data[0] == 0x91:
|
||||||
|
print("✓ 收到 HCI 响应格式 (91 头)")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("✗ 无响应")
|
||||||
|
|
||||||
|
ser.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
except serial.SerialException as e:
|
||||||
|
print(f"✗ 串口错误:{e}")
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
print(f"✗ 错误:{e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def test_at_mode(device, baudrate=115200):
|
||||||
|
"""测试 AT 命令模式."""
|
||||||
|
print(f"\n=== 测试 AT 命令模式 ({device}, {baudrate}) ===")
|
||||||
|
try:
|
||||||
|
ser = serial.Serial(device, baudrate, timeout=2)
|
||||||
|
print(f"串口已打开")
|
||||||
|
|
||||||
|
# 发送 AT 命令
|
||||||
|
cmd = b"AT\r\n"
|
||||||
|
print(f"发送 AT 命令:{cmd!r}")
|
||||||
|
ser.write(cmd)
|
||||||
|
|
||||||
|
time.sleep(1)
|
||||||
|
if ser.in_waiting:
|
||||||
|
data = ser.read(ser.in_waiting)
|
||||||
|
print(f"收到响应:{data!r}")
|
||||||
|
|
||||||
|
if b"OK" in data or b"AT+" in data:
|
||||||
|
print("✓ 收到 AT 响应")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("✗ 无响应")
|
||||||
|
|
||||||
|
ser.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
except serial.SerialException as e:
|
||||||
|
print(f"✗ 串口错误:{e}")
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
print(f"✗ 错误:{e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def monitor_raw(device, baudrate=115200, duration=10):
|
||||||
|
"""监听原始串口数据."""
|
||||||
|
print(f"\n=== 监听原始数据 ({device}, 持续{duration}秒) ===")
|
||||||
|
print("请在其他程序中触发网关发送数据...")
|
||||||
|
|
||||||
|
try:
|
||||||
|
ser = serial.Serial(device, baudrate, timeout=0.1)
|
||||||
|
start = time.time()
|
||||||
|
|
||||||
|
while time.time() - start < duration:
|
||||||
|
if ser.in_waiting:
|
||||||
|
data = ser.read(ser.in_waiting)
|
||||||
|
timestamp = time.strftime("%H:%M:%S")
|
||||||
|
print(f"[{timestamp}] 收到 {len(data)} 字节:{data.hex().upper()}")
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
ser.close()
|
||||||
|
print("监听结束")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"✗ 错误:{e}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
device = sys.argv[1]
|
||||||
|
else:
|
||||||
|
ports = list_ports()
|
||||||
|
if not ports:
|
||||||
|
print("未找到串口设备")
|
||||||
|
sys.exit(1)
|
||||||
|
device = ports[0].device
|
||||||
|
|
||||||
|
baudrate = int(sys.argv[2]) if len(sys.argv) > 2 else 115200
|
||||||
|
|
||||||
|
print(f"\n使用设备:{device}, 波特率:{baudrate}")
|
||||||
|
|
||||||
|
# 测试 HCI 模式
|
||||||
|
hci_result = test_hci_mode(device, baudrate)
|
||||||
|
|
||||||
|
# 测试 AT 模式
|
||||||
|
at_result = test_at_mode(device, baudrate)
|
||||||
|
|
||||||
|
# 结果总结
|
||||||
|
print("\n=== 测试结果 ===")
|
||||||
|
print(f"HCI 模式:{'✓ 成功' if hci_result else '✗ 失败'}")
|
||||||
|
print(f"AT 模式:{'✓ 成功' if at_result else '✗ 失败'}")
|
||||||
|
|
||||||
|
if not hci_result and not at_result:
|
||||||
|
print("\n建议:")
|
||||||
|
print("1. 检查串口权限:ls -l /dev/ttyUSB0")
|
||||||
|
print("2. 确认网关已供电")
|
||||||
|
print("3. 尝试其他波特率 (9600, 38400, 57600)")
|
||||||
|
print("4. 检查 USB 线是否完好")
|
||||||
Loading…
Reference in New Issue
Block a user