【问题标题】:Strange behavior with arduino-PC communication using pySerial使用 pySerial 进行 arduino-PC 通信的奇怪行为
【发布时间】:2017-04-30 09:43:52
【问题描述】:

问题 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(data)”,但显然它没有用。当然是因为问题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

}

【问题讨论】:

    标签: python arduino serial-port converter pyserial


    【解决方案1】:

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

    【讨论】:

    • arduino软件总是读对,为什么PC硬件就不能读?
    • 我尝试了所有这些:(9600、14400、19200、28800、38400、57600 或 115200)波特率,问题仍然存在,即使现在是 9600(我认为它正在工作)。如果我在笔记本电脑上尝试使用蓝牙模块,它适用于 9600,但不适用于 14400 及更高版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多