Arduino und XBee

Hallo,

bin gerade dabei, für meine geplante Garagentorsteuerung einige Experimente mit XBees zu machen.
Zum Testen habe ich erst mal eine einfache Variante gewählt, ich habe die XBees erst mal ganz ohne Arduino zu testen

  1. Zwei XBee-Module in Verbindung mit jeweils einem XBee-Explorer-USB (http://www.watterott.com/de/XBee-Explorer-USB), auf zwei Computer habe ich dann mit CoolTerm die Verbindung getestet, das hat ohne Probleme funktioniert.

  2. Als nächstes habe ich auf einem Breadboard einen der XBees mit einem Arduino verbunden (Arduino ist über USB angeschlossen, Arduino und XBee-Module sind mir 3,3 V, Ground, sowie Pin 3 und Pin 4 des Arduinos mit Data In und Data Out des XBee-Moduls verbunden). Das XBee-Modul ist auf einem Adapter (http://www.watterott.com/de/Adapterplatine-fuer-XBee-Module) montiert. Das andere XBee-Modul war immer noch anhand des Explorer-Boards mit einem anderen Computer verbunden.

Softwareseitig habe ich versucht, Daten zwischen den beiden XBee-Modulen hin- und herzusenden - hat ebenfalls wunderbar in beiden Richtungen geklappt. Dazu habe ich ein SoftwareSerial-Objekt mit Pin 3 + 4 gemappt.
Testweise habe ich die XBee-Module ausgetauscht, hat immer wunderbar funktioniert.

  1. Als nächstes habe ich versucht, auch das zweite XBee-Modul über ein Adapterboard mit dem gleichen Arduino zu verbinden.
    Dazu habe ich wieder 3,3 V sowie Ground des Arduinos mit den entsprechenden Anschlüssen des XBee-Moduls verbunden sowie Pin 5 und Pin 6 mit Data In und Data Out des XBee-Moduls.
    Softwareseitig sind nun zwei serielle SoftwareSerial-Objekte vorhanden, die auf die Pins 3+4 sowie 5+6 gemappt werden.
    Jetzt funktioniert das Versenden der Daten interessanterweise nur noch in eine Richtung. Wenn ich Daten von XBee1 zu XBee2 schicke, klappt das wunderbar, in der Gegenrichtung kommt nichts an. Habe schon die Adapter-Boards vertauscht, ebenso zusätzlich auch die XBee-Module.

Hat da jemand einen Tipp für mich, woran das liegen könnte? Die Adapterboards für sich alleine funktionieren problemlos, ebenso die XBee-Module. EInen Defekt an der Hardware würde ich ausschließen, weil ich ja auch verschiedene Konstellationen getestet habe. Ich würde eher davon ausgehen, dass ich da einen logischen Fehler beim Anschließen der XBee-Module gemacht habe - darf ich die evtl. nicht gemeinsam an einen einzigen Arduino anschließen?

Ciao,

Rudi

PS: Anbei der Code:

#include <SoftwareSerial.h>


const int DEBUG_LED = 13;
const int OUTPUT_LED = 11;

SoftwareSerial XBeeSerial_1(2, 3);
SoftwareSerial XBeeSerial_2(6, 7);

#define SENDER1

void setup()

{
  pinMode(DEBUG_LED, OUTPUT);
  pinMode(OUTPUT_LED, OUTPUT);
  Serial.begin(9600);
  XBeeSerial_1.begin(9600);
  XBeeSerial_2.begin(9600);
#ifdef SENDER1  
  XBeeSerial_1.println("Serial_1: Testprogramm zur Kommunikation mit XBEE");
#endif
#ifdef SENDER2
  XBeeSerial_2.println("Serial_2: Testprogramm zur Kommunikation mit XBEE");
#endif
}

void loop()

{
  unsigned char ch;
  String s; 
  char buffer[10];
  unsigned int count1, count2;

#ifdef SENDER2
  count1 = XBeeSerial_1.available();
  if (count1 >= 1)
  {
    while (XBeeSerial_1.available() > 0)
    {
      ch = XBeeSerial_1.read();
      Serial.write(ch);
    }
  }  
  #endif
  #ifdef SENDER1
  count2 = XBeeSerial_2.available();
  if (count2 >= 1)
  {
    Serial.print("Receiver Serial_2 from ");
    while (XBeeSerial_2.available() > 0)
    {
      ch = XBeeSerial_2.read();
      Serial.write(ch);
    }
  }
 #endif
}

Das was ich sehe ist daß Du
SoftwareSerial XBeeSerial_1(2, 3);
SoftwareSerial XBeeSerial_2(6, 7);
aber schreibst gleichzeitig:
Softwareseitig sind nun zwei serielle SoftwareSerial-Objekte vorhanden, die auf die Pins 3+4 sowie 5+6 gemappt werden.
Wenn die Pins stimmen mit denen Du die XBee verbindest ist das der Fehler.

Ich würde diesem Experiment nicht zuviel Beachtung schenken da einige Variablen Probleme bereiten können:

  • 2 serielle Softwareschnittstellen gleichzeitig verwendet;
  • Der stromverbrauch am 3,3V pin . Arduino UNO kann da nur 80mA geben, der 2009 nur 50mA.
    Falls Du wirklich 2 XBee am selben Arduino brauchst rate ich Dir zu einem Arduino MEGA 2560 und einem externen 3,3V Spannungsstabilisator oder Spannungswandler.
    Grüße Uwe

Sorry,

das war ein Fehler im Text mit den Pins - ich habe beide Varianten ausprobiert, um evtl. Problem mit den Ports zu eliminieren - hat aber beides nicht funktioniert.

Ich brauche die beiden XBees nicht parallel an einem Arduino (ich habe übrigens den Uno), eigentlich will ich einen XBee mit einem Arduino verbinden, der andere XBee - eigentlich sollen es mal mehr als zwei werden - soll ohne Arduino nur Daten liefern (z. B. Temperatur, Licht sowie Daten von einem Reedkontakt).

Das habe ich schon mal versucht, allerdings konnte ich da überhaupt keine Daten empfangen - aus diesem Grund habe ich mir gedacht, ich gehe erst mal systematisch in kleinen Schritten vor und verifiziere, dass die Verbindung überhaupt funktioniert. Ich war schon am Zweifeln, ob die XBee-Module überhaupt noch funktionieren

Ich könnte daher natürlich mal die XBees an zwei verschiedenen Arduinos hängen und sehen, ob's dann funktioniert - das ist zwei auch nicht 100% das, was ich im Endausbau brauche, aber ich kann damit verifizieren, dass beide XBees im AT-Modus korrekt iim Zusammenspiel mit Arduino funktionieren.

Danke für deine Hinweise, insbesondere für die Auskunft bzgl. des Stromverbrauchs, das kann gut sein, dass das im konkreten Fall mein Problem darstellt. Elektronik ist nicht so meine Stärke, die liegt eher auf der Programmierungsseite;-(

Rudi

der andere XBee - eigentlich sollen es mal mehr als zwei werden - soll ohne Arduino nur Daten liefern (z. B. Temperatur, Licht sowie Daten von einem Reedkontakt).

Hmm woher weiss denn dann der zweite XBee was er senden soll und in welchem Format? Wenn ich das richtig verstanden habe, ist ein XBee ja "nur" ein Sender/Empfänger ohne weitere Eigenintelligenz.

XBees können in zwei verschiedenen Modi betrieben werden - AT-Modus und API-Modus. Im AT-Modus können z. B. Zeichen geschickt werden oder Kommandos ausgeführt werden. Nur im API-Modus jedoch können Sensordaten gelesen und gesendet werden. Dazu gibt es verschiedene Übertragungsformate bzw. -Protokolle (z. B. Request, Data, ...) anhand dessen können die Daten empfangen und entschlüsselt werden.
Man muss dann auf der Empfängerseite die serielle Schnittstelle lesen, auf das Startbyte warten und kann dann anhand der Frame-Id entscheiden, welches Format das Paket hat.

XBee hat sowas wie einen primitiven Mikrocontroller an Bord, der allerdings nur für diese Zwecke geeignet ist - Steuerungsaufgabe z. B. können damit nicht erfolgen, dafür bräuchte es dann wieder z. B. Arduino.

Rudi

Ok, danke für die Aufklärung.