使用pySerial进行arduino-PC通信的奇怪行为

时间:2016-12-14 22:14:03

标签: python arduino serial-port converter pyserial

问题1: 我正在尝试使用pySerial读取来自我的arduino的串行数据。 有时代码似乎运行良好,但有时它打印奇怪 的东西。 arduino监视器总是打印正常数据,这很奇怪 行为恰好发生在python代码上。

另一件事:这恰好发生了 当我将波特率从9600增加到115200时,我真的需要这个 更高的波特率。

输出示例:

Opening COM port...
Port successfully opened
b'7\r\n'
b'133\r\n'
b'125\r\n'
b'114\r\n'
b'104\r\n'
(...) (and suddenly here comes again)
b'\xbaj\xea2\x93j\n'
b'\xa6\x13j\n'
b'&\x13j\n'
b'&\x93j\n'
b'\xa6\xd3j\n'
(...)
[Finished in 2.0s]

有时我需要取消构建,因为它会卡住 在for循环中。

问题2: 除此之外,在读取数据后我需要将其转换为int。 刚试过“int(数据)”,但很明显它没有用。当然是因为问题1.

当我改变这个时:

print(data)  

对此:

print(int(data))  

我明白了:

ValueError: invalid literal for int() with base 10: b'\xa1j\n'

Python代码:

import serial

print("Opening COM port...")

# open and prepare serial port
ser = serial.Serial('COM3', 115200, timeout=8,
                    parity=serial.PARITY_EVEN, rtscts=1)

print("Port successfully opened")

for i in range(50):
    data = ser.readline()
    print(data) # print(int(data))  

ser.close()

Arduino代码:

void setup() {
    Serial.begin(115200); // set baudrate
}

void loop() {
    int data = 0;
    int analogPin = 1;

    data = analogRead(analogPin); // read pin
    Serial.println(data, DEC); // print data to the serial port

}

1 个答案:

答案 0 :(得分:0)

数据有效性受到较高数据传输速度的影响,因为硬件无法读取以正确顺序发送的数据。尝试将波特率降低到57600。