繁体   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