一、问题起因
在尝试网上N多种Arduino和pyserial的串口通讯的过程中,电脑发送命令给Arduino后,串口始终接收不到来自Arduino的数据,偶然翻到一篇英语教程时,看到一个带了双端代码的教程,索性试了一下,发现竟然通讯成功了,教程原帖:原文
二、解决方式
待定思路:有可能是这种方式发送数据需要串口初始化一下,而这需要一定时间,所以一个Python端中来一个sleep非常重要,目前测试nano板子需要至少2秒,mega2560需要1秒左右。
三、源码
Python端代码:
import serial
from time import sleep
# 注意换端口和波特率
ser = serial.Serial(port="COM5", baudrate=9600)
sleep(2) # 就是这里解决了通讯失败的问题!!!!!!!!!
write_len = ser.write(b'1') #板子上的灯会亮,改成0会灭
output = ser.readline(ser.inWaiting())
print(output)
ser.close()
Arduino代码:
int incomingData;
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite (LED_BUILTIN, LOW);
Serial.write("Press the button to control LED (Message from Arduino");
}
void loop() {
while (Serial.available()) {
incomingData = Serial.read();
if (incomingData == '1') {
digitalWrite (LED_BUILTIN, HIGH);
Serial.write("LED Turned ON");
}
if (incomingData == '0') {
digitalWrite (LED_BUILTIN, LOW);
Serial.write("LED Turned OFF");
}
}
}