2012-11-22 67 views
1

我有一个python脚本,我想用它来配置一些XBee模块。当通过xbee development board连接到电脑时,它可以很好地发现,但通过pi电路板连接到树莓派时失败。配置XBee模块的Python脚本在树莓派上失败

我已经缩小了问题,因为它没有进入命令模式,在发送+++之后,xbee从不发送OK消息。下面是相关代码:

... 
CC = '+' 
GT = '1.1' # Tried different values here 
... 

def startCommandMode(self): 
    self.emptyBuffer() # Tried with and without this line 
    sleep(self.GT) # Tried with and without this line 
    self.ser.write(self.CC + self.CC + self.CC) 
    sleep(self.GT) 
    return self.getReply() == 'OK' 

... 

def getReply(self): 
    count = 0 
    reply = '' 
    while True: 
     char = self.ser.read() 
     if char == '\r': 
      break 
     if len(char) == 0: 
      return None 
     reply += char 

    return reply 

完整的源代码可以在github如果需要的话。

我知道它不是xbee模块,覆盆子pi或pi板片的问题,因为如果我使用“picocom -lc/dev/ttyAMA0”手动尝试它,它工作得非常好。

+0

你能确认'sleep()'真的睡了1.1秒吗? – tomlogic

+0

xbee模块上的默认保护时间为1秒,在此之前您必须确保没有发生读取。我已经尝试了各种值大约5秒没有成功,所以在时间上的一个小错误是可以接受的。在我的桌面上,所有这些值都按预期工作。 – James147

回答

0

有些事情要检查:

  • 你响应得到什么?

  • 您是否启用了XBee上的流量控制?确保D6D7设置为0,因为Raspberry Pi串行端口没有流量控制。

  • Python代码是否配置为流量控制?它可能正在等待从未断言的CTS信号。

  • 你可以尝试在Raspberry Pi的USB端口上使用XBee开发板吗?

0

使用以下:

.... 
if args.common: 
    args.at = ['ID', 'CH', 'MY', 'DL', 'DH', 'AP'] + args.at 
xbee = XBee(args.port, args.baud); 
sleep(2) 
xbee.CC = args.CC 
xbee.GT = args.GT 
.... 
.... 

恕我直言,我厚厚的Rpi需要更多的时间来初始化串口,这就是为什么我使用这种延迟 。也适用于透明模式,因此在端口初始化后添加延迟。

我希望这会对你有好处。对我来说,它已经解决了。

BR。 Manel。 Manel。