簡體   English   中英

使用pySerial進行arduino-PC通信的奇怪行為

[英]Strange behavior with arduino-PC communication using 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

}

數據有效性受到較高數據傳輸速度的影響,因為硬件無法讀取以正確順序發送的數據。 嘗試將波特率降低到57600。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM