Daten mit Xbee S6B übertragen

Hallo zusammen,
ich suche nun schon echt seit Tagen überall, um mein Prblem zu lösen, aber ohne Erfolg.
Für meine Wetterstation habe ich eine Schneehöhenmessung mit folgenden Teilen gebaut:
1 x Arduino UNO R3
1 x Ethernetshield
Mit diesem Code klappt alles prima. Die Daten werden in die MSQL Datenbank geschrieben.

#include <SPI.h>
#include <Ethernet.h>             // library for ethernet functions


//ETHERNET-SETTINGS
byte mac[]     = { 0x10, 0x90, 0x44, 0xDD, 0x1, 0x8, 0x0, 0xFD };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 1, 18 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 1, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
//byte server[]  = {81, 169, 145, 157 };                     // IP-Adresse ursprungwetter.de bei Strato

EthernetClient client;
char host[]    = "ursprungwetter.de";                      // Domain
char url[]     = "/ultraarduinoxxx.php";         // Pfad zur PHP-Datei
char key[]     = "xxxx";                     // Kennwort aus PHP-Datei
char serverName[] = "www.ursprungwetter.de";
char c;                                                     // Variable für Rückgabe des Servers
long Interval  = 15000;                                        // Upload-Interval in Minuten

int trigger=5;
int echo=6;
long dauer=0;
long entfernung=0;

void setup() {
delay(1000);  
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
Serial.println("Ethernet initialisieren...");
Ethernet.begin(mac, ip);
//Interval = Interval * 1000 * 60;                            // Das in Minuten angegebene Interval in Millisekunden umrechnen
delay(1000);                                                // warten, bis Ethernet gestartet
}

void loop() {
pinMode(trigger, OUTPUT); 
digitalWrite(trigger, LOW);
delay(2);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
pinMode(echo, INPUT);
dauer = pulseIn(echo, HIGH);
entfernung = 50 - (dauer / 58); // umrechnen in zentimeter   50 ist Installationshöhe zum Boden
if (entfernung >= 500 || entfernung < 0)
{
Serial.println("Kein Messwert");
}
else
{
Serial.print(entfernung);
Serial.println(" cm");
}
delay(5000);
Daten_senden(entfernung);                                 // Temperaturdaten an Server übertragen
delay(5000);

byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
  client.flush();

  delay(Interval);
}
/******************************
                              *
  Daten an Server schickenn   *
                              *
*******************************/
void Daten_senden(long entfernung)
{
  if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?entfernung=");
    Serial.print("?entfernung=");
    client.print(entfernung);
    Serial.println(entfernung);
    client.print("&key=" + String(key));
    Serial.print("&key=" + String(key));
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }
}

Nun versuche ich vergeblich das Ethernetshild mit einem XbeeS6B zu ersetzen, um die Daten
drahtlos über meinen Router zu versenden (kann kein Kabel verlegen).
Achso, was ich noch dazu sagen muss, ich bin noch totaler Anfänger was Arduino betrifft.
Also habe ich mir ein SainSmart XBee Shield und ein Xbee S6B gekauft:

http://www.exp-tech.de/advanced_search_result.php?keywords=xbee+s6b&XTCsid=6b8f346d83664f5f54cc59af62c7111a

Alles zusammen gesteckt und das XbeeS6B konfiguriert. Das wird jetzt im Router erkannt.
Dann habe ich mit verschiedenen Code`s probiert eine Verbindung aufzubauen.
Es kam aber immer die Fehlermeldung:
“WiFi shield not present”
Habe auch versucht nur das Xbee ohne SainSmart XBee Shield an dem Arduino anzustecken
aber es klappt nichts. Wie gesagt , keine Ahnung. aber davon jede Menge.
Oder brauche ich vielleicht ganze andere Hardware?
Könnt ihr mir irgendwie weiterhelfen?

Grüsse Bernd

Mit nem YUN wäre das ganze deutlich einfacher.Ist Xbee mit dem Shield überhaupt kompatibel? Jumper für den Betrieb richtig gesteckt?

Hallo,
zum Shied steht in der Beschreibung:

Compatibility:
Xbee 1mw
Xbee Pro
Xbee 2.5 series

gehört den der “XBee Wi-Fi (S6B)” überhaupt dazu?
Gruß und Spaß
Andreas

Erstmal nein! Die Teile sind eigentlich für Bluetooth RF ausgelegt. Was aber nicht heißt, dass die nicht mit Wifi funktionieren. Dort gibt es je nach Modul Tx/Rx oder SPI Schnittstellen.

Das muss der TE mal in den DB nachschlagen.

Hallo,
ich interessiere mich ja schon länger für diese XBee´s.
Das Shield wird doch "nur" genutzt um die Module "bequem" zu konfigurieren und
sie ebenso "bequem" am Arduino betreiben zu können.
Sein Modul müßte sich doch ohne weiteres, ohne Shield am Arduino betreiben
lassen?
Gruß und Dank
Andreas

Natürlich kannst du die Module ohne weiteres auch standalone am Arduino bzw Atmega betreiben. Ein Shield oder Adapter ist dennoch sinnvoll, da die Xbees keine RM2.54 Pfostenstecker haben. Die passen in keine Steckbretter. Es sind nur 2mm Pfostenstecker.

Habe mir dazu diese Adapter

Aber Achtung, wie bei den HC05/06 haben diese Module auch nur ein 0 - 3V3 Pegel. 5V Schaden den Teilen. Falls du 5V Vcc am Atmel hast, sollte ein bidirektionaler Pegelwandler an die Rx/Tx Schnittstelle. Des weitern brauchen je nach typ die Teile relativ viel Strom. Die Xbee Pro2 welche ich habe, nehmen sich zwischenzeitig mal 300mA. Würde ich evtl. mit externen DCDC Wandler erledigen.

Nutzte die selber aber direkt an Vcc da ich die Attinys sowieso nur mit 3V3 nutzte, da mir die 8MHz reichen.

Hallo,
Deine beiden Link´s sind ja genial… und das (zwischenzeitig mal 300mA) ist
gut zu wissen.

Wenn er das:

nutzt, muss das nicht vorher RICHTIG konfiguriert werden?
Auf einen Arduino stöpseln- mit einem Router verbinden und Daten senden
funktioniert "doch nicht einfach so"?

Hier gibt es auch etwas:

Schau´n wir mal.
Gruß und Spaß
Andreas

SkobyMobil:
Hallo,
Deine beiden Link´s sind ja genial… und das (zwischenzeitig mal 300mA) ist
gut zu wissen.

Das ist aber je nach Typ unterschiedlich. 300mA habe ich bei Senden gehabt bei meinen XBee Pro - ZB Series 2. Diese haben dafür aber auch eine Reichweite draussen ohne Hindernisse von 1600m. Somit alles andere für von Raum zu Raum :wink: Kosten aber Stück auf irgendwo um die 30€. Genaue Typenbezeichnung müsste ich nachschauen.

Die Module müssen der Digi Software einmal konfiguriert werden.

Erstmal danke für eure Meinungen.
Also sollte es gehen, das Xbee nur mit dem Arduino zu verbinden. Hab ich auch probiert ( mit dem 3,3 Volt vom Arduino )und das Modul wird vom Router erkannt.
So ne Art Beispielcode wäre nicht schlecht. :grin:
Wie gesagt, mein Können hält sich noch in Grenzen.
Bernd

STOP!

Das darfst du nicht machen. Der Xbee verträgt nur 3V3 an Rx und Tx. Dein Arduino sendet aber 5V Pegel!

Upps, da werd ich mich mich wohl ertmal um so einen bidirektionaler Pegelwandler kümmern müsse.
Danke für den Tipp. Ich hatte gedacht das geht nur um die Versorgungsspannung

Hallo,
"WiFi shield not present"

Was (Sketch, Lib, u.a.) erzeugt denn diese Fehlermeldung?
Gruß und Spaß
Andreas

HY,
die Fehlermeldung erscheint im seriellen Monitor.
Wenn ich z.B. diesen Sketch zum Testen aufgespielt habe.

/*
 
 This example  prints the Wifi shield's MAC address, and
 scans for available Wifi networks using the Wifi shield.
 Every ten seconds, it scans again. It doesn't actually
 connect to any network, so no encryption scheme is specified.
 
 Circuit:
 * WiFi shield attached
 
 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 21 Junn 2012
 by Tom Igoe and Jaymes Dec
 */


#include <SPI.h>
#include <WiFi.h>

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }

  // Print WiFi MAC address:
  printMacAddress();

  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
}

void loop() {
  delay(10000);
  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
}

void printMacAddress() {
  // the MAC address of your Wifi shield
  byte mac[6];                    

  // print your MAC address:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
}

void listNetworks() {
  // scan for nearby networks:
  Serial.println("** Scan Networks **");
  int numSsid = WiFi.scanNetworks();
  if (numSsid == -1)
  {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }

  // print the list of networks seen:
  Serial.print("number of available networks:");
  Serial.println(numSsid);

  // print the network number and name for each network found:
  for (int thisNet = 0; thisNet<numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tSignal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tEncryption: ");
    printEncryptionType(WiFi.encryptionType(thisNet));
  }
}

void printEncryptionType(int thisType) {
  // read the encryption type and print out the name:
  switch (thisType) {
  case ENC_TYPE_WEP:
    Serial.println("WEP");
    break;
  case ENC_TYPE_TKIP:
    Serial.println("WPA");
    break;
  case ENC_TYPE_CCMP:
    Serial.println("WPA2");
    break;
  case ENC_TYPE_NONE:
    Serial.println("None");
    break;
  case ENC_TYPE_AUTO:
    Serial.println("Auto");
    break;
  }
}

Wer das erzeugt, keine Ahnung. Hab sehr viele Seiten durchsucht, was es sein könnte. 5 verschiedene Arduino
Versionen probiert, einen Kondensator zwischen 3,3 Volt und Gnd eingelötet. Nix hiflt.
Bernd

Hallo,
da kann man ja schon etwas mit anfangen.
Hier wird keine serielle Verbindung aufgebaut.
Der Arduino fragt nur, ob jemand “da” ist. Als Antwort erhält er “nein”. Dann
kommt Deine Fehlermeldung. D.h. es hat mit der Verbindung “XBee <-> extern”
noch nichts zu tun.
Wenn Du alles richtig verdrahtet hast, und alle Steckbrücken richtig gesetzt
sind, dann kann es eigentlich nur noch die falsche Konfiguration des XBee sein.
Vielleicht hilft Dir das weiter, was das Konfigurieren angeht.
Gruß und Spaß
Andreas

Hallo Andreas,
Danke für deine Antwort. Hab mir beide Videos angeschaut. Hier geht es ja um die Verbindung von 2 Xbee Modulen
untereinander. Die Module sind 802.15.4 . Mein Xbees6b ist ein Modul das mit IEEE 802.11 Verbindung zum Internet herstellt.
Es müsste richtig eingestellt sein, nach Anweisungen aus dem Netz. Eingestellt hab ich es mit XTCU Programm:
Die Einstellungen sehen so aus:

Mit dem Code aus dem letzten Beitrag von mir, müstte dann auf dem Seriellen Monitor die abgefragten Daten angezeigt werden,
wie Netzwerk, Mac Adressen usw. Die beiden Jumber auf dem Shield werden auf USB zum Programmieren gesteckt oder auf Xbee zum Verbinden mit dem Arduino.
Bitte berichtige mich, wenn ich falsch liege.
Bernd

Hallo,
bei den Video´s ging es mir um das "wie"- nicht um das "was"

Wenn ich Deinen Ausführungen richtig folge, dann wird das XBee ja vom Router
erkannt. Das spielt aber keine Rolle… glaube ich.

Das Problem, das ich hier sehe, ist- das XBee baut keine Verbindung zum
Arduino auf.
Deine abegebildeten Einstellungen haben damit aber nichts zu tun.

Wenn mich nicht alles täuscht, dann kommunizieren XBee und Arduino seriell.
Also müßte man doch beim XBee die Parameter zur Verbindung mit dem Arduino
einstellen. ÜberragungsRate, Parity u.s.w.

Das meine ich, hast Du nicht richtig eingestellt. Woher weiß das XBee wie es
mit dem Arduino eine Verbindung aufbauen soll?

So ein XBee hat doch eine ganz bestimmte ID. Kannst Du die denn mit dem
Arduino "auslesen"?

Es muß doch im Netz so etwas wie ein ArduinoXBeeTestProgramm geben, ganz
einfach um zu sehen, ob Arduino und XBee sich verstehen.

Ich sehe das ganz einfach so: Der Arduino baut zum XBee keine Verbindung auf!

Ich würde am XBee eine LED anschliessen, und die mit dem Arduino zum blinken
bringen. Das muss ja wohl möglich sein. Wenn Du das hinbekommen hast, dann weißt
Du, das Arduino und XBee eine Verbindung aufgebaut haben.
Gruß und Spaß
Andreas
P.S. GitHub - cjbearman/xbee-wifi-spi-arduino: Arduino library to support Xbee Wifi modules, using SPI communication

Danke,
werde ich mir mal in Ruhe zu gemüte führen.

Hallo,
da bin ich wieder. Soweit hab ich mein Problem gelöst. Ich habe an den Xbee 4Drähte direkt angelötet und
DOUT mit RXT, DIN mit TXT des Uno verbunden. Dann habe ich mich bei Spark-Fun angemeldet und mit einen Beispielprogramm
einen Wert (Helligkeit) übertragen. Und es funktioniert. Das Shield nehm ich nur zum konfigurieren des Xbee`s.
Leider bekomm ich es nicht hin mein Programm so umzustellen, das es mit dem Xbee läuft.
Kann mir jemand helfen das Programm umzuschreiben? Meine Fähigkeiten zum Programmiren sind nicht besonders.
Hier nochmal mein Programm:

#include <SPI.h>
#include <Ethernet.h>             // library for ethernet functions


//ETHERNET-SETTINGS
byte mac[]     = { 0x10, 0x90, 0x44, 0xDD, 0x1, 0x8, 0x0, 0xFD };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 1, 18 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 1, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
//byte server[]  = {81, 169, 145, 157 };                     // IP-Adresse ursprungwetter.de bei Strato

EthernetClient client;
char host[]    = "ursprungwetter.de";                      // Domain
char url[]     = "/ultraarduinodbuv.php";         // Pfad zur PHP-Datei
char key[]     = "xxxx";                     // Kennwort aus PHP-Datei
char serverName[] = "www.ursprungwetter.de";
char c;                                                     // Variable für Rückgabe des Servers
long Interval  = 15000;                                        // Upload-Interval in Minuten

int trigger=5;
int echo=6;
long dauer=0;
long entfernung=0;

void setup() {
delay(1000);  
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
Serial.println("Ethernet initialisieren...");
Ethernet.begin(mac, ip);
//Interval = Interval * 1000 * 60;                            // Das in Minuten angegebene Interval in Millisekunden umrechnen
delay(1000);                                                // warten, bis Ethernet gestartet
}

void loop() {
pinMode(trigger, OUTPUT); 
digitalWrite(trigger, LOW);
delay(2);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
pinMode(echo, INPUT);
dauer = pulseIn(echo, HIGH);
entfernung = 50 - (dauer / 58); // umrechnen in zentimeter   50 ist Installationshöhe zum Boden
if (entfernung >= 500 || entfernung < 0)
{
Serial.println("Kein Messwert");
}
else
{
Serial.print(entfernung);
Serial.println(" cm");
}
delay(5000);
Daten_senden(entfernung);                                 // Temperaturdaten an Server übertragen
delay(5000);

byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
  client.flush();

  delay(Interval);
}
/******************************
                              *
  Daten an Server schickenn   *
                              *
*******************************/
void Daten_senden(long entfernung)
{
  if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?entfernung=");
    Serial.print("?entfernung=");
    client.print(entfernung);
    Serial.println(entfernung);
    client.print("&key=" + String(key));
    Serial.print("&key=" + String(key));
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }
}

Danke