我想通过python中的pyserial向arduino发送一些数据。我只想让arduino从串行端口读取可变长度的字符串数据,并将其写回,以便python能够读取它。由于我无法做到这一点,下面的代码只有python发送的字符。下面是python代码:
import serial
import sys
import pywapi
import time
def main():
ser = serial.Serial(3, 9600, timeout=1)
print "Conn established"
print "Sending: %s" % "z".__repr__()
print ser.write('z'.encode("ascii"))
time.sleep(2)
print "Received: %s" % ser.read(10).__repr__()
ser.close()
以下是Arduino代码:
void setup(){
analogReference(DEFAULT);
Serial.begin(9600);
}
void loop(){
if(Serial.available() > 0)
Serial.println("x");
while(Serial.available() > 0){
Serial.print(Serial.read(), BYTE);
}
}
输出:
Conn established
Sending: 'z'
1
Received: ''
我知道Arduino的代码是有效的,因为它在从Arduino终端发送数据时工作。但是,当我尝试从python发送任何内容时,它就失败了。我一整天都在和这个做斗争。任何帮助都将不胜感激。
最佳答案
尝试增加或删除超时,并将read的大小设置为1。您可能还想增加睡眠延迟,甚至实现一个简单的读取循环。
类似于:
try:
while True:
data = ser.read(1).__repr__()
if data:
print "Received: %s." % data
else:
print "Looping."
except KeyboardInterrupt:
print "Done."
except:
raise
finally:
ser.close()
print "Closed port."
然后用ctrl-c来停止它。