我想通过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来停止它。

07-24 09:45
查看更多