Arduino und 868MHz - XBee

Hallo,
hier ist etwas, das in den Dokumentationen des XBee nicht beschrieben ist-
aber den ArduinoBastler in den Wahnsinn treiben kann…

Ich nutze am Arduino zwei 868MHz XBee (XB8-DMUSB002). Diese Dinger sind
programmierbar und haben zwei Prozessoren on Board.

Einer von diesen Dreck´s Dingern hat ein Bootloader mit Menü im Speicher.
Trennt man während des Betrieb die Spannungsversorgung, dann fährt der Arduino
zwar wieder hoch, aber das XBee nicht!
Das will über das BootloaderMenü neu gestartet werden.

XCTU und CoolTerm auf dem Mac finden das Ding auch nicht. Über CoolTerm kommt
man aber einfach an das BootloaderMenü ran. Hat man das aufgerufen, und das
XBee ist “hochgefahren” dann wird es auch von allen gefunden.

In CoolTerm stellt man also eine Verbindung zum XBee her…
-dann betätigt man 1x Enter
-das XBee gibt ein .C. aus
-dann gibt man in CoolTerm ein B ein

jetzt läuft das XBee ohne Probleme und wird auch von XCTU gefunden.

Diese CoolTermProzedur kann man auch im eigenem Sketch nutzen, so das das XBee
nach Spannungsverlust mit dem Arduino wieder hochfahren kann.

Am Rande, irgendwelche AdapterBoards oder FTDI-Adapter mit ihren Treibern
braucht man nicht zu kaufen, wenn man den Arduino am Mac als FTDI-Adapter nutzt.
CoolTerm, wie auch XCTU funktionieren ohne Probleme.
Gruß und Spaß
Andreas

Mega 2560 R3 als Sender

#include <Wire.h>
void setup()  
{

  Serial3.begin(9600);
  delay(50);
 Serial3.print('\r');// Enter
 delay(50);
  Serial3.print("B");// Befehl
   delay(50);
}


void loop()
{
 Serial3.print("H");
 delay(2000);
 Serial3.print("L");
 delay(2000);
 
}

Uno als Empfänger

#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial XBee(2, 3); // RX, TX
int LED = 13;
byte Schalter;


void setup()  
{

  XBee.begin(9600);
    delay(50);
 XBee.print('\r');// Enter
 delay(50);
  XBee.print("B");// Befehl
   delay(50);
  pinMode(LED,OUTPUT);
}


void loop()
{
  if (XBee.available())
  {
   byte Schalter = XBee.read();
   
   if (Schalter == 'H')
   {
     digitalWrite(LED,HIGH);
   }
   else if(Schalter == 'L')
   {
       digitalWrite(LED,LOW);
   }
    }
}