RedFly Wifi Shield statt Ethernet - Wie geht das?

Hallo,

Ich plane zur Zeit ein Projekt, es handelt sich um eine Universalfernbedienung auf Arduino Uno Basis. Am Ende möchte ich per Browser Befehle an den Arduino senden, der dann wiederrum per Infrarot die Signale an die entsprechenden Geräte weiterleitet. Ich bin durch diverse Literatur schon so weit gekommen das ich die IR-Codes lesen und versenden kann(wenn auch nicht sehr benutzerfreundlich nur per seriellem monitor). Jetzt möchte ich die Befehle wie gesagt per Browser an den Arduino übermitteln. Ich habe unzählige Beispiele gefunden die über Ethernet Befehle versenden, jedoch soll der Arduino nicht per Netzwerkkabel sondern per Wifi in das Netzwerk eingebunden werden. Dafür habe ich das RefFly shield von Watterott. Um einen Einstieg zu bekommen wollte ich erstmal nur eine LED über den Browser ansteuern, jedoch bin ich hierbei schon arg auf der Stelle getreten weil ich es einfach nicht hinbekomme das Beispielprogramm (welches auf dem ethernetshield basiert) auf das RedFly shield umzumünzen.

Das Beispiel habe ich hier gefunden: Arduino via Internet mit dem Android-Phone steuern – Poldis Homepage

Nun habe ich die Beispielsketches von RedFly hoch und runter gewälzt und bin zu folgendem Code im Anhang gekommen.

Ich kann ohne Probleme einen Ping ausführen, und erreiche den Arduino. Jedoch bleibt im Browser einfach nur alles Tot, per Browser erreiche ich den Arduino nicht.
Ich hoffe jemand hat eine Idee was ich falsch mache!

Danke schonmal im voraus :slight_smile:

mfG
p0fi

redfly_shield.txt (6.07 KB)

Brauchst Du nicht eine IP-Adresse?
Grüße Uwe

Die bekomme ich per DHCP zugewiesen, und die ist mir auch bekannt :slight_smile:

Hallo,

Die RedFly Server und Client-Klassen sind nicht direkt kompatibel mit den Arduino Ethernet Klassen, z.B. geht die Erstellung einer Client-Klasse vom Server nicht [RedFlyClient client = server.available()]. Die Abhandlung erfolgt beim RedFly auch in der Server-Klasse:

...
RedFlyServer server(80);
...
void loop()
{
  //listen for incoming clients
  if(server.available())
  {
    boolean currentLineIsBlank = true;
    while(server.available())
    {
      char c = server.read();
       if(c == '\n' && currentLineIsBlank)
      {
        //clear input buffer
        server.flush(); 

        //send standard HTTP 200 header
        server.print_P(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        //send some text
        server.println_P(PSTR("Hello, World! 

"));

        //output the value of each analog input pin
        for(int chn=0; chn < 6; chn++)
        {
          char tmp[32];
          sprintf_P(tmp, PSTR("analog input %i is %i 
"), chn, analogRead(chn));
          server.print(tmp);
        }
        break;
      }
      if(c == '\n')
      {
        currentLineIsBlank = true; //you're starting a new line
      } 
      else if(c != '\r')
      {
        currentLineIsBlank = false; //you've gotten a character on the current line
      }
    }

    //close connection
    server.stop();
  }
  else if(!server.connected()) //listening port still open?
  {
    server.stop(); //stop and reset server
    server.begin(); //start server
  }
}

Hallo,

Danke erstmal für deine Antwort. Jedoch hab ich mit dem verstehen noch so meine Probleme. Heißt das also das es gar nicht geht mit dem Client? und ich alles per server.print regeln muss?
Wenn ja wird das sicher meine noch sehr bescheidenen Möglichkeiten übersteigen, da ich noch recht neu bin auf diesem Gebiet. Ich wäre in diesem Falle sehr dankbar für ein paar konkretere Anregungen.

mfG
p0fi

Hier wie versprochen der Quellcode meiner BlinkM Max zusammen mit IR Fernbedienung und Webserver über WLAN.

Der Code ist allerdings nicht aufgeräumt. Ich habe diesen gerade auf meinen GMX Media Center gefunden und kann ihn deshalb jetzt zur Verfügung stellen.

Bei Fragen/Anregungen bitte melden. Aber wie gesagt, der Code zeigt nur das es funktioniert, er ist nicht optimiert.

WebServer.ino (9.29 KB)

BlinkM_funcs.h (13.1 KB)