【发布时间】:2016-09-06 10:12:00
【问题描述】:
我正在尝试通过串行端口在装有 Ubuntu 14.04LTS 的 PC 和我的 RoMeo Arduino Board (Atmega 328) 之间建立通信。使用的串口是2个Xbee模块,一个在PC上,一个在板子上。
首先,我正在尝试开发一个简单的程序来向董事会发送消息并接收它们。我用于 Arduino 板的代码如下:
void loop(void)
{
char msg;
if (Serial.available()){
msg = Serial.read();
msg = Serial.print(msg);
}
}
当我发送一个唯一字符时,PC 会正确接收它。但是,我面临的问题是,对于较长的字符串,以下字符拼写错误,因为我得到了奇怪的十六进制数字,如下所示:
>>> import serial
>>> ser = serial.Serial(port='/dev/ttyUSB0', baudrate=57600, timeout=0.1)
>>> ser.write('H')
>>> ser.read(1)
'H'
>>> ser.write('Hello')
>>> ser.read(5)
'H\x8b\xbd'
提前致谢。
编辑:XBee modules 似乎存在溢出问题,但我无法完全弄清楚:如果我在发送的字符之间等待 0.01 秒或更长时间,问题就解决了,这是一个巨大的时间。即,我现在用于发送单词的代码是:
for letter in word:
serial.write(letter)
time.sleep(0.01)
但是,只有在从 PC 向 Arduino 发送数据时才需要此等待时间。当通信以另一种方式进行时(Arduino 将数据发送到 PC),我不需要睡眠并且字节以 57600 波特正确发送。
【问题讨论】:
-
尝试将
msg声明为int并使用Serial.write(msg)来回显字符。 -
按你说的做,@mhawke,但问题仍然存在。如果我用 Python >>ser.write('Hello') 编写,我会返回 'H\x8b'
-
@mhawke
Serial.write()接受byte而不是int@Jalo 尝试在ser.write()和ser.read()之间设置延迟 -
两者都试过了,没有什么不同...但是,根据arduino.cc/en/Serial/Write,我也可以发送整数或字符串
-
用PySerial发送一整串好像有问题。如果我将消息分段为单个字符,即: >>ser.write('H') >>ser.write('E') ... 我可以正确获取完整的字符串
标签: python arduino serial-port pyserial xbee