使用XBee

时间:2016-09-06 10:12:01

标签: python arduino serial-port pyserial xbee

我正在尝试通过串行端口在带有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波特处正确地发送了所有字节。

1 个答案:

答案 0 :(得分:0)

PC无法向Arduino板发送超过1个字符的原因是,有一个XBee模块配置了与其他模块和pyserial实例不同的端口参数。在这种情况下,通信在Python中建立,具有以下主要参数:

  • 波特率:57600

  • Bytesize:8

  • 奇偶校验:无

  • 停止位:1

如果其中一个参数在其中一个XBee模块中不同,则通信将出现故障(如本例),甚至不可能。

要检查XBee配置,可以使用Digi XCTU应用程序:将RF模块连接到PC,打开程序并阅读其配置。打开后,必须确保“Serial interfacing”选项与之前列出的选项相同。

XCTU interface with the Serial options opened

在图像中,显示可以更改这些选项的菜单。请注意,无法配置停止位和字节大小。第一个参数在XB24-ZB版本和最后一个版本seems to not be possible to change之前不可调整。

对于这个问题,错误的参数是奇偶校验,因为它在其中一个模块中设置为 space parity ,而不是 no奇偶校验。因此,第一个字节被正确发送,但在此之后数据不一致。更改此参数后,连接运行正常。