使用 XBee 丢失信息

Loss of information using XBee

我正在尝试通过串行端口在装有 Ubuntu 14.04LTS 的 PC 和我的 RoMeo Arduino 板 (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 波特正确地一起发送。

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

  • 波特率:57600

  • 字节大小:8

  • 奇偶校验:None

  • 停止位:1

如果其中一个参数在其中一个 XBee 模块中不同,则通信将出现故障(如这种情况)甚至无法通信。

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

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

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