[英]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.