【发布时间】:2017-01-28 15:30:59
【问题描述】:
我有一个 Arduino UNO,我正在与我的 PC 和 UNO 进行串行通信。我正在使用 pyserial 与 UNO 进行通信,并且我只接收到我发送到我的微控制器的字符串的第一个字符。下面是串口通信的脚本:
import serial
import time
port = "\\.\COM4"
baudrate = 19200
parity=serial.PARITY_NONE
no=serial.EIGHTBITS
stopbits= serial.STOPBITS_ONE
ser=serial.Serial()
ser.port=port
ser.baudrate=baudrate
ser.timeout=1
ser.parity=parity
ser.bytesize=no
ser.stopbits=stopbits
ser.open()
time.sleep(1)
time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)
ser.write("Hello World");
bytes=ser.read()
print bytes,
ser.close()
我已经设置了我的微控制器以回显发送给它的任何内容,并且我的程序退出而不打印字符串“Hello World”。但是,它会打印第一个字符“H”。我的脚本有问题吗?我使用 Arduino 串行监视器检查了我的微控制器代码,当我通过监视器发送数据时,它会很好地回显输出。这段代码有什么问题?为什么我的代码不打印整个字符串,而只打印我传递给 ser.write() 方法的字符串的第一个字母?提前感谢您的回复!
【问题讨论】:
-
您确定您已阅读所有发回的内容吗?
-
接收时,您需要什么,直到所有响应都到达。这可能是通过等待特定数量的字符,或者等待直到在一定(相对较长的)时间内没有收到任何字符。在 19200 的波特率下,每个字符发送/接收需要多长时间?
-
我的超时时间应该根据我发送的字符数来设置,还是我应该实现一个循环来检查 bytes == "Hello World" 是否存在,如果是则中断?我认为实现循环没有任何意义,因为此脚本的目的是与 UNO 进行通信,而与交换的数据无关。