2017-06-26 103 views
0

我有一個配置爲協調器的XBee S1 Pro。和配置爲端節點的XBee S2C。兩者都加載了802.15.4固件。通過使用XCTU,我發送並接收透明模式下的數據。XBee S2C和XBee S1 Pro通信

我現在已將端節點配置爲API-1模式並將其連接到Arduino Nano。我想讀取有效載荷。這裏是我的Arduino代碼:

Setup done... 
FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
,FFFFFFFF 
, 

是否有更簡單的方法來做到這一點喜歡使用Arduino的的XBee庫:

void setup() { 
    Serial.begin(9600); 
    Serial.println("Setup done..."); 
    while (!Serial) {;} 
} 

void loop() { 
    if (Serial.available()) { 
    for (int i = 0; i < 8;i++) { 
     byte discard = Serial.read(); 
    } 
    Serial.write(Serial.read()); 
    Serial.print(","); 
    } 

當我從協調我得到派「你好」? 有人可以幫助我嗎?

+0

閱讀:[在Arduino上讀取序列](https://hackingmajenkoblog.wordpress.com/2016/02/01/reading-serial-on-the-arduino/) –

回答

2

您確認兩個XBee模塊已連接到同一網絡嗎?我的理解是S1是802.15.4,而S2是ZigBee。您應該使用相同的網絡硬件來開始您的項目,以消除這些問題。

我建議您使用a tutorial並使用該代碼爲要編寫的任何代碼建立工作起點。

編輯:添加一些代碼

首先,你需要有兩個串口。一個用於您的控制檯,您可以在其中看到Serial.print()的輸出,另一個用於與XBee模塊進行通信。

二,開始與這個循環:

void loop() { 
    // echo bytes received on XBee module to serial console 
    if (XBee.available()) { 
     Serial.write(XBee.read()); 
     Serial.print(","); 
    } 
    // echo bytes received on serial console to XBee module 
    if (Serial.available()) { 
     XBee.write(Serial.read()); 
    } 
} 

這樣你傾倒,你收到的每一個字節,只有調用XBee.read()當有可用來讀取數據。

您可能希望保持XBee模塊的波特率爲9600,但由於您從XBee模塊接收的每個字節打印多個字符,因此將您的stdio界面(Serial)增加到115200。

+0

是的,我檢查了兩者都是與XCTU相同的網絡,我可以在兩者上收發,我將xbee S2C的固件更新爲802.15.4 –

+0

好,然後嘗試使用別人的代碼作爲您的出發點。 – tomlogic

+0

明白了,因爲我試圖從串行緩衝區讀取值之前,它填充輸入這就是爲什麼它打印這些垃圾值。 –