Die XRF-Module werden mit einer seriellen Firmware für 9600 Baud ausgeliefert. Dies ist für die HomeAutomation 2.0 zu langsam. Des Weiteren müssen die Rahmenlänge und der Timeout angepasst werden. Ich habe es zuerst über einen Arduino-Sketch mit AT-Befehlen versucht und mir dabei ein Modul zerschossen. Besser ist es das Konfigurationsprogramm XCM von Ciseco zu verwenden, welches auf einem Windows-Rechner läuft.

 

Hardware-Aufbau für die Konfiguration

Für die Konfiguration empfiehlt sich das Seeed Studio XBee Shield das man aktuell für 4,95€bei EXP-Tech erwerben kann:

http://www.exp-tech.de/seeed-studio-xbee-shield

Seed Studio XBee Shield

Zusätzlich benötigt man einen FTDI-Adapter für 3,3 Volt:

FTDI-Adapter

Mit 4 Leitungen kann dieser mit dem XBee-Shield verbunden werden:

FTDI   XBee-Adapter
Label Funktion Kabel Label Funktion
GND Masse grün Pin 10 Masse
VCC +3,3 V rot Pin 1 VCC
RXI Receive FTDI schwarz Pin 3 Transmit Shield
TXO Transmit FTDI weiß Pin 2 Receive Shield

Hier ist zu sehen, wie die Kabel auf dem XBee-SHield eingesteckt werden:

XBee-Shield

Der rechte Schalter im Bild muß ganz nach oben gestellt werden, der linke Schalter ganz nach unten.

 

Konfiguration mit dem XCM

Nach dem Herunterladen wird der XCM auf einem Windows-Rechner installiert. Jetzt wird der FTDI-Adapter per USB-Kabel mit dem Rechner verbunden. Im Geräte-Manager der Systemsteuerung kann der zugeordnete COM-Port gefunden werden, bei mir ist es COM-Port 13. Der XCM wird gestartet und dwer ermittelte COM-Port bei "Select Port" ausgewählt. Dies geht viel schnell, als wenn der XCM alle COM-Ports durchsucht. Die "Baud Rate" wird auf 9600 eingestellt, das ist die Geschwindigkeit im Auslieferungszustand. Anchließend klickt man auf den Button "Download Config" und die Werte werden aus dem XRF in den XCM übertragen:

Register "General": Hier steht die Baudrate auf 9600 Baud:
XRF Seite 1
Register "Advanced": Die Packetsize (ATPK) steht auf 12Byte, der Packet Timeout (ATRO) auf 16msec:
XRF Seite 2
Die Baudrate wird auf 115200 Baud angepasst:
XRF Modifizierte Werte Seite 1
Die Packetsize wird auf 30 Byte erhöht, der Packet Timeout auf 5 msec heruntergesetzt:
XRF Modifizierte Werte Seite 2

Nach Änderung und Kontrolle der Parameter werden sie mit

  1. "Upload Config" ins Memory des XRF hochgeladen
  2. "Apply Changes (ATAC)" aktiviert
  3. "Write Config (ATWR)" ins Flash permanent geschrieben

Man kann den Erfolg kontrollieren, indem man nochmals den XCM aufruft und mit dem COM-Port verbindet. Jetzt muß allerdings die Baudrate auf 115200 eingestellt werden. Mit dem Button "Download Config" sollten jetzt die Werte abgerufen werden können.

 

Verwendung des XRF-Moduls

Jetzt ist das XRF einsatzbereit. Es kann mit 4 Leitungen mit einem Arduino verbunden werden. Alternativ kann man ein Arduino-XBee-Shield verwenden:

XRF-Shield

Dieses Shield ist vom Hersteller Sparkfun und kann für 14,95€ beim Distributor EXP-Tech bezogen werden:

http://www.exp-tech.de/sparkfun-xbee-shield-wrl-12847

Um die Funkverbindung zu testen, benötigt man die Hardware zweimal! Mit zwei einfachen Arduino-Sketches macht man ein Modul zum Sender und das andere zum Empfänger.

Testprogramm Daten senden

Es wird ein Integer-Zähler jede Sekunde um Eins hochgezählt und der Zählerwert über das Funkmodul gesendet. Zusätzlich wird die Pin13-LED bei jedem Sendezyklus zwischen ein/aus umgeschaltet. Der Sketch eignet sich für:

  • Arduino UNO mit Sparkfun-Shieldund XRF-Modul -oder-
  • Arduino UNO mit einem Ciseco SRF-Shield

Die XRF-Module müssen vor Ausführen des Sketch auf 115200 Baud konfiguriert worden sein!

// Testet ein SRF-Shield oder ein XRF-/SRF-Funkmodul, das an einem Arduino UNO angeschlossen ist
// A.Kriwanek 16.04.2015
//
// XRF module: Pin 0 Arduino RxD --> Pin 2 TxD XRF
// XRF module: Pin 1 Arduino TxD --> Pin 3 RxD XRF

int counter;
byte LedState;

void setup() {
  // put your setup code here, to run once:
  pinMode(8, OUTPUT);        // only for Ciseco SRF-Shield
  digitalWrite(8, HIGH);     // only for Ciseco SRF-Shield
  pinMode(13, OUTPUT);       // Use Pin 13 LED
  delay(500);
  Serial.begin(115200);
  Serial.println("Booted!");
  counter = 0;
  LedState = 0;
}

void loop() {
  // put your main code here, to run repeatedly:
  if (LedState == 0) {
    LedState = 1;
  } else {
    LedState = 0;
  }
  digitalWrite(13, LedState);    // Use Pin13 LED
  Serial.println(counter);
  counter += 1;
  delay(1000);
}

Testprogramm Daten empfangen

Jeder Character, welcher über RxD empfangen wird, wird sofort wieder auf TxD ausgegeben. Lässt man den Serial Monitor der Arduino IDE laufen, sieht man die empfangenen Daten. Der Sketch eignet sich für:

  • Arduino UNO mit Sparkfun-Shieldund XRF-Modul -oder-
  • Arduino UNO mit einem Ciseco SRF-Shield

Die XRF-Module müssen vor Ausführen des Sketch auf 115200 Baud konfiguriert worden sein!

// Testet ein SRF-Shield oder ein XRF-/SRF-Funkmodul, das an einem Arduino UNO angeschlossen ist
// Transmits a 8 bit counter value every second
// A.Kriwanek 16.04.2015
//
// XRF module: Pin 0 Arduino RxD --> Pin 2 TxD XRF
// XRF module: Pin 1 Arduino TxD --> Pin 3 RxD XRF

char inByte;

void setup() {
  // put your setup code here, to run once:
  pinMode(8, OUTPUT);        // only for Ciseco SRF-Shield
  digitalWrite(8, HIGH);     // only for Ciseco SRF-Shield
  delay(500);
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    // Print byte on console:
    Serial.print(inByte);
  }
}