2017-06-26 4 views
0

Ich habe einen XBee S1 Pro, der als Koordinator konfiguriert ist. und ein XBee S2C, der als ein Endknoten konfiguriert ist. Beide sind mit der Firmware 802.15.4 geladen. Mit XCTU habe ich die Daten im Transparent-Modus gesendet und empfangen.XBee S2C und XBee S1 Pro Kommunikation

Ich habe jetzt den Endknoten zu API-1-Modus konfiguriert und es mit einem Arduino Nano verbunden. Ich möchte die Nutzlast lesen. Hier ist mein Arduino Code:

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(","); 
    } 

Als ich ‚Hallo‘ vom Koordinator senden erhalte ich:

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

Gibt es einen einfacheren Weg, dies zu tun, wie die Arduino XBee-Bibliothek? Könnte mir jemand freundlicherweise helfen?

+0

Lesen: [Lesen Serial auf dem Arduino] (https://hackingmajenkoblog.wordpress.com/2016/02/01/reading-serial-on-the-arduino/) –

Antwort

2

Haben Sie bestätigt, dass die beiden XBee-Module mit demselben Netzwerk verbunden sind? Mein Verständnis war, dass S1 nur 802.15.4 und S2 ZigBee war. Sie sollten Ihr Projekt wahrscheinlich mit identischer Netzwerkhardware starten, um das Problem zu beheben.

Ich würde empfehlen, a tutorial zu folgen und diesen Code zu verwenden, um einen funktionierenden Startpunkt für jeden Code zu erstellen, den Sie schreiben möchten.

Edit: Hinzufügen einiger Code

Zunächst einmal müssen Sie zwei serielle Anschlüsse haben. Eine für Ihre Konsole, wo Sie die Ausgabe von Serial.print() und die andere für die Kommunikation mit dem XBee-Modul sehen können.

Zweitens mit dieser Schleife starten:

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()); 
    } 
} 

diese Weise können Sie jedes Byte sind Dumping Sie erhalten, und nur XBee.read() aufrufen, wenn gibt es Daten zur Verfügung zu lesen.

Sie sollten Ihr XBee-Modul bei 9600 Baud belassen, erhöhen Sie jedoch Ihre stdio-Schnittstelle (Serial) auf 115200, da Sie mehr als ein Zeichen pro Byte vom XBee-Modul empfangen.

+0

Ja, ich habe überprüft, dass beide eingeschaltet sind das gleiche Netzwerk, mit XCTU, kann ich auf beiden senden und empfangen, aktualisierte ich die Firmware von xbee S2C zu 802.15.4 –

+0

OK, dann versuchen Sie, jemand anderen Code als Ausgangspunkt zu verwenden. – tomlogic

+0

Verstanden, da ich versucht habe, Werte aus dem seriellen Puffer zu lesen, bevor sie mit der Eingabe gefüllt wurden, deshalb druckte sie diese Müllwerte. –

Verwandte Themen