我正在用控制台读取Raspberry Pi上的串行数据:
stty -F /dev/ttyUSB0 1:0:9a7:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
cat < /dev/ttyUSB0 &
echo -n -e 'x2Fx3Fx21x0Dx0A' > /dev/ttyUSB0
和我得到的数据行为行:
/ISk5MT174-0001
0.9.1(210832)
0.9.2(1160808)
0.0.0(00339226)
0.2.0(1.03)
C.1.6(FDF5)
1.8.1(0004250.946*kWh)
1.8.2(0003664.811*kWh)
2.8.1(0004897.813*kWh)
2.8.2(0000397.465*kWh)
F.F.0(0000000)
!
现在我试着用python做这个:
import serial
SERIALPORT = "/dev/ttyUSB0"
BAUDRATE = 300
ser = serial.Serial(SERIALPORT, BAUDRATE)
print("write data")
ser.write("x2Fx3Fx21x0Dx0A")
time.sleep(0.5)
numberOfLine = 0
while True:
response = ser.readline()
print("read data: " + response)
numberOfLine = numberOfLine + 1
if (numberOfLine >= 5):
break
ser.close()
但我只得到"写入数据",没有从我的USB0设备的响应。
有什么建议吗?
亲切的问候
我猜你的设备与这里讨论的相同:https://www.loxforum.com/forum/faqs-tutorials-howto-s/3121-mini-howto-z%C3%A4hlerauslesung-iskra-mt174-mit-ir-schreib-lesekopf-und-raspberry
如果是这样,您需要知道默认情况下,pySerial打开具有8个数据且无奇偶校验的端口。(见:https://pythonhosted.org/pyserial/pyserial_api.html -> __init__)
所以,至少你想:
ser = serial.Serial(SERIALPORT, BAUDRATE, SEVENBITS, PARITY_EVEN)
也许你还需要设置其他标志,但我不读stty:)要查看这串数字的含义,运行第一个stty命令,然后运行:
stty -F /dev/ttyUSB0 -a
它会以人类可读的形式输出设置,这可能会让你更接近解决方案。
祝你好运!