python - 阅读Python串行

标签 python serial-port

我正在使用控制台读取 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 '\x2F\x3F\x21\x0D\x0A' > /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("\x2F\x3F\x21\x0D\x0A")

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

它将以人类可读的形式输出设置,这可能会让您更接近解决方案。

祝你好运!

关于python - 阅读Python串行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836848/

相关文章:

python - 参数更改时处理类中的实例 - Python

python - 在Python中,带小数部分的数字的十进制到十六进制转换?

python - pyserial readline() : SerialException

delphi - 读取之前获取串行端口上等待的字节数

windows - 如何强行释放被其他应用程序占用或挂起的COM端口

python - `save_count`参数动画matplotlib ``

python - 删除网格元素 - Tkinter

python - 使用 pandas 根据另一个 df 中的信息在另一个 df 中添加新列

c# - 在 visual studio 中将串行端口应用程序从 C# 转换为 C (ERROR_INVALID_PARAMETER) 87

c# - 串口通信问题