2012-11-22 114 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。