PySerial 读取问题

Posted

技术标签:

【中文标题】PySerial 读取问题【英文标题】:Trouble with PySerial read 【发布时间】:2021-01-04 22:10:59 【问题描述】:

我正在尝试从 Arduino 串行监视器读取数据,但我遇到了 pyserial 的 readline 函数的问题。这是打印到监视器的简单代码:

void setup() 
  Serial.begin(19200);


void loop() 
  Serial.print("helloWorld");
  delay(1);        // delay in between reads for stability

这是我用来读取打印输出的 Python 代码:

import serial
arduinoSerialData = serial.Serial()
arduinoSerialData.port = "COM4"
arduinoSerialData.baudrate = 19200
arduinoSerialData.timeout = 1
arduinoSerialData.setDTR(False)
#arduinoSerialData.setRTS(False)
arduinoSerialData.open()
while(True):
    b = arduinoSerialData.readline().decode('utf-8').strip().split(',')
    print(b)


这是错误:

  File "SerialRead.py", line 11, in <module>
    str_b = b.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 7: invalid start byte

我不知道可能出了什么问题。有没有人有什么建议?感谢您的宝贵时间!

【问题讨论】:

Arduino发送串口到底是什么?您发布的代码中没有显示任何内容。 @jasonharper 抱歉,我不小心漏掉了一行。它现在应该已修复,但错误仍在出现。 【参考方案1】:

我有这个代码,这是完美的:

import serial

Ser=serial.Serial(port='com8',baudrate='9600',timeout=1)

while True:
    print(Ser.readline())

将此数据转换为字符串,并删除不必要的字符。 示例:

import serial

Ser=serial.Serial(port='com8',baudrate='9600',timeout=1)

while True:
    data=Ser.readline()
    data=str(data)
    try:
        dat1=data.replace("b","")
        dat2=dat1.replace("\r\n","")
        dat3=dat2[:-5]
        dat4=dat3.replace("'", "")
        print(dat4)
    except:
        print("ERROR: replace method error")

祝你好运!

【讨论】:

以上是关于PySerial 读取问题的主要内容,如果未能解决你的问题,请参考以下文章

准确的pyserial读取周期

仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效

从 Pyserial 读取串行输出不能可靠地工作

Jetson Xavier NX 无法读取 pyserial (usb)

Pyserial readline() 永远挂起程序而不读取串行数据

在 Windows XP 上使用 pyserial 模块从串口 (COM3) 读取数据