簡體   English   中英

Pyserial serial.write() 不起作用

[英]Pyserial serial.write() doesn't work

我需要與 Arduino 通信。 serial.readline()來閱讀 Arduino 所說的工作正常。 serial.write('something')似乎沒有做任何事情。

有趣的是,如果我在控制台或命令行中編寫相同的代碼,它會按預期工作......

使用 Python 2.7。

蟒蛇代碼:

import time
import serial

# setup Arduino USB communication
try:
    arduinoSerialData = serial.Serial('com3', 9600)

except: # not connected/damaged
    pass

while True:
    if arduinoSerialData.inWaiting() > 0:
        arduinoSerialData.write('A')
        arduinoSerialData.flush()
        datastr = arduinoSerialData.readline()
        print datastr
        time.sleep(1)

我知道我有點太晚了,但今天我在 Pyserial 和 ESP32(一種類似於 arduino 的設備)上遇到了同樣的問題。 解決方案是為 pyserial 提供與 ESP32 中的串行接口相同的配置:

esp = serial.Serial("COM10", 115200)
esp.parity=serial.PARITY_EVEN
esp.stopbits=serial.STOPBITS_ONE
esp.bytesize=serial.EIGHTBITS

我發送這樣的命令:

arr = [32,2,0,4] #Decimal
esp.write(arr)

這是 ESP32 配置,以防您需要知道:

uart_config_t uart_config = {
        .baud_rate = 115200,
        .data_bits = UART_DATA_8_BITS,
        .parity    = UART_PARITY_EVEN,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
    
uart_param_config(UART_PORT_NUM, &uart_config);

ESP 現在可以正確回顯命令,希望這能有所幫助。

嘗試在Python腳本中添加timeout參數,然后嘗試在while循環中設置您的主要arduino代碼step1:python

 arduinoSerialData = serial.Serial('com3', 9600, 1)

將arduinoSerialData.flush()替換為:

 arduinoSerialData.flushInput()

步驟2:Arduino:

void loop(){
    while (Serial.available > 0){
            // your main code
    }
}

打開端口后放置time.sleep(2)行,以便給Arduino時間重新啟動。

暫無
暫無

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

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