Redfly-Shield als Webserver konfigurieren und mit Html-Buttons Ausgänge steuern

Hallo und schönen Guten Tag !

Ich versuche im Moment meinen Arduino Uno und RedFly-Shiled als Webserver zu konfigurieren. Es ist mir gelungen mich mit dem WLAN zu verbinden und auch eine Html Seite zu erzeugen auf denen ich Ein bzw. Aus Schalter habe. Die Html Seite lässt sich mit dem Browser auch aufrufen. Nun habe ich folgende Frage:" Wie kann ich meine Buttons dazu bringen Ausgänge auf meinem Arduino zu schalten"? Ich habe mir diverse Beispiele im Internet angeschaut und versucht umzuändern, damit mit diese mit meinem Programm funktionieren. Dies gelingt mir allerdings nicht!:frowning: Ich wollte damit eine RGB_LED ansteuern und verschieden Farben erzeugen. Wie kann ich dies am besten realisieren ? Ist es mit dem WebServer möglich ? Ich würde mich sehr Lösungsmöglichkeiten und antworten freuen :slight_smile:

Wünsch euch noch einen schönen Tag! :slight_smile:
Gruß Benni

Poste mal Deine Versuche (der Deiner Meinung nach erfolgversprechendste genügt wahrscheinlich) und beschreibe, welches Resultat sie erzeugten. Wir werden versuchen, Dir zu helfen, Deinen Code zu fixen, aber wir werden Dir nicht den Code schreiben, das musst Du selbst tun.

Vielen Dank schon mal im Vorraus !! :slight_smile:
Hier ist der Sketch den ich erstellt habe, nun weiß ich nicht wie ich weiter vorgehen soll. Gibt es eine bestimme Funktion um einen Wert von einem HTML-Button einzulesen und damit einen Ausgang zu schalten? Mit eine paar Anhaltspunkten würd ich es dann erneut programmieren und versuchen.

Sketch:
//created by Benni 1980

#include <RedFly.h>
#include <RedFlyServer.h>

int ledPinR = 9;
int ledPinG = 10;
int ledPinB = 11;

byte ip[] = { 192,168, 2, 30 }; //ip from shield (server)
byte netmask[] = { 255,255,255, 0 }; //netmask

RedFlyServer server(80);

void debugout(char *s)
{
#if defined(AVR_ATmega32U4)
Serial.print(s);
#else
RedFly.disable();
Serial.print(s);
RedFly.enable();
#endif
}

void debugoutln(char *s)
{
#if defined(AVR_ATmega32U4)
Serial.println(s);
#else
RedFly.disable();
Serial.println(s);
RedFly.enable();
#endif
}

----------------------------------SETUP-----------------------------
void setup()
{
uint8_t ret;
pinMode(ledPinR, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinB, OUTPUT);

#if defined(AVR_ATmega32U4)
Serial.begin(9600);
while(!Serial);
#endif

ret = RedFly.init();
if(ret)
{
debugoutln("INIT ERR");
}
else
{

RedFly.scan();

//ret = RedFly.join("", "", INFRASTRUCTURE);
ret = RedFly.join("
", "**", INFRASTRUCTURE);
if(ret)
{
debugoutln("JOIN ERR");
for(;;);
}
else
{

ret = RedFly.begin(ip, 0, 0, netmask);
if(ret)
{
debugoutln("BEGIN ERR");
RedFly.disconnect();
for(;;);
}
else
{
RedFly.getlocalip(ip);
server.begin();
}
}
}
}

--------------------------------------LOOP----------------------------
void loop()
{

if(server.available())
{

boolean currentLineIsBlank = true;
while(server.available())
{
char c = server.read();

if(c == '\n' && currentLineIsBlank)
{

server.flush();

---------------------------------HTML--------------------------------------
server.print_P(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"));

server.println_P(PSTR("LED Controller

"));

server.println("");

server.println("");

server.println("");

server.println("");

server.println("LEDController");

server.println("");

server.println("<BODY");

server.println("");
server.println("");
server.println("

LED Aktion Status
");

server.println("

");
server.println("");
server.println("");
server.println("
Rot
");

server.println("

");
server.println("");
server.println("");
server.println("
Grün
");

server.println("

");
server.println("");
server.println("");
server.println("
Blau
");

server.println("

");
server.println("");
server.println("");

server.println("");

server.println("");

if(c == '\n')
{

currentLineIsBlank = true;
}
else if(c != '\r')
{

currentLineIsBlank = false;
}
}

server.stop();
}
}
else if(!server.connected())
{
server.stop();
server.begin();
}

Weiß

Schau dir mal das WebServer2 Beispiel [1] an. Hier werden Parameter per HTTP GET gesendet und ausgewertet.

[1] https://github.com/watterott/RedFly-Shield/blob/master/src/libraries/RedFly/examples/WebServer2/WebServer2.ino

Gruß
Andreas

Vielen Dank Andreas :slight_smile:
Ich versuche jetzt das ganze mal für mein Programm umzusetzen und werde dann Berichten :slight_smile:

Gruß Benni

Nochmals Vielen Dank Andreas !!
Hab es so umgeändert das ich die Ausgänge schalten kann! Das Funktioniert auch wunderbar! Ist es möglich auch ein Blinkmuster mit den verschiedenen Farben zu erstellen?? Hab was ausprobiert komm aber nicht mehr aus der Schleife! Die HTML Seite wird ständig geladen und denk mal deswegen kann ich danach auch keine weiteren Daten verarbeiten! Hier ist mal der Quelltext dazu ! Bestimmt ist das keine gute Lösung, aber als Anfänger war ich schon mal zufrieden damit :slight_smile:
Dann hab ich noch das Problem sobald ich noch mehr Buttons anlegen will das die HTML nicht mehr aufgebaut wird?? Wieso eigentlich hab, ca 20 kB für dieses Programm gerbraucht. ist das zu viel? Gruß Benni _:slight_smile:
Hab nur den unteren Teil des Quelltextes dargestellt sont wäre das zu lange

#include <RedFly.h>
#include <RedFlyServer.h>
#include <RedFlyNBNS.h>

int ledPinR=9;
int ledPinG=10;
int ledPinB=11;

byte ip[] = { 192,168, 2, 30 }; //ip from shield (server)
byte netmask[] = { 255,255,255, 0 }; //netmask

//initialize the server library with the port
//you want to use (port 80 is default for HTTP)
RedFlyServer server(80);
//initialize the NBNS library with the device name (max. 16 characters)
RedFlyNBNS NBNS("REDFLY");

server.begin();
}
}
}
}

char* strrmvspace(char *dst, const char *src) //remove space at start and end of a string
{
uint16_t i;

if(src == 0)
{
dst = 0;
}
else
{
//at start
for(i=0; isspace(src
); i++);

_ strcpy(dst, &src*);_
_
//at end*_
* i=strlen(dst)-1;*
_ for(i=strlen(dst)-1; isspace(dst*); i--)
{
dst = 0;
}
}
return dst;
}
uint16_t htou(const char *src) //hex to uint
{_

uint16_t value=0;
_ while(src)
{

if((src >= '0') && (src <= '9')) { value = (value16) + (src-'0'+ 0); }
else if((src >= 'A') && (src <= 'F')) { value = (value16) + (src-'A'+10); }
else if((src >= 'a') && (src <= 'f')) { value = (value16) + (src-'a'+10); }
else { break; }

src++;

}

* return value;
}
uint16_t url_decode(char *dst, const char *src, uint16_t len)
{_

uint16_t i;
_ char c, ptr, buf[10]={0,0,0,0,0,0,0,0,0,0};
ptr = dst; //save dst

* for(i=0; i<len;)
{
c = src++; i++;
if((c == 0) ||

* (c == '&') ||
(c == ' ') ||
(c == '\n') ||
(c == '\r'))
{
break;
}
else if(c == '%')
{
buf[0] = src++; i++;
buf[1] = src++; i++;
dst++ = (unsigned char)htou(buf);
}

else if(c == '+')

* {
dst++ = ' ';
}

* else*
* {
dst++ = c;
}

* }
dst = 0;
//remove space at start and end of string

* strrmvspace(ptr, ptr);
return i;
}
{
//send standard HTTP 200 header*

* server.print_P(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"));*
* //send HTML*_

* server.println_P(PSTR("

<font color="#FF0000">L<font color="#00C000">E<font color="#0000FF">DController

\r\n"*

* "\r\n"*
* "

\n\r"*
* "<form method="get">\r\n" *

* "\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "*
*\r\n"*
* "

Farbe

Schalter EIN

Schalter AUS

<font color="#FF0000">Rot <input type="submit"name="p1"value="An" <input type="submit"name="p2"value="Aus">
<font color="#00C000">Grün <input type="submit"name="p3"value="An" <input type="submit"name="p4"value="Aus">
<font color="#0000FF">Blau <input type="submit"name="p5"value="An" <input type="submit"name="p6"value="Aus">
<font color="#000000">Weiß <input type="submit"name="p7"value="An" <input type="submit"name="p8"value="Aus">
<font color="#FF00FF">Lila <input type="submit"name="p9"value="An" <input type="submit"name="p10"value="Aus">
<font color="#00CED1">Tkis <input type="submit"name="p11"value="An" <input type="submit"name="p12"value="Aus">
<font color="#FFFF00">Gelb <input type="submit"name="p13"value="An" <input type="submit"name="p14"value="Aus">
<font color="#000000">Blin>/td>

")); *
* if(p1)*
* {*
* digitalWrite(ledPinR,HIGH);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*

* }*
* if(p2)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p3)*
* {*
* digitalWrite(ledPinG,HIGH);*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p4)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p5)*
* {*

* digitalWrite(ledPinB,HIGH);*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* }*
* if(p6)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p7)*
* {*
* digitalWrite(ledPinR,HIGH);*
* digitalWrite(ledPinG,HIGH);*
* digitalWrite(ledPinB,HIGH);*
* }*
* if(p8)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p9)*
* {*
* digitalWrite(ledPinR,HIGH);*
* digitalWrite(ledPinB,HIGH);*
* }*
* if(p10)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p11)*
* {*
* digitalWrite(ledPinG,HIGH);*
* digitalWrite(ledPinB,HIGH);*
* }*
* if(p12)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*
* if(p13)*
* {*
* while(!p14)*
* {*
* digitalWrite(ledPinR,HIGH);*
* delay(1000);*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,HIGH);*
* delay(1000);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,HIGH);*
* delay(1000);*
* digitalWrite(ledPinB,LOW);*
* digitalWrite(ledPinB,HIGH);*
* delay(1000);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,HIGH);*
* digitalWrite(ledPinR,HIGH);*
* digitalWrite(ledPinG,HIGH);*
* delay(1000);*
* digitalWrite(ledPinB,LOW);*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,HIGH);*
* digitalWrite(ledPinR,HIGH);*
* delay(1000);*
* }*
* }*
* if(p14)*
* {*
* digitalWrite(ledPinR,LOW);*
* digitalWrite(ledPinG,LOW);*
* digitalWrite(ledPinB,LOW);*
* }*

}

Bitte editiere Deinen Post (das kleine Symbol unten rechts) und füge Code-Tags ein (sind im Editor über den #-Button erreichbar). Wenn Du das nicht machst, versucht das Forum-System den Code zu interpretieren und verändert ihn unter Umständen. Er wird auch viel lesbarer, noch lesbarer wäre er, wenn Du die Auto-Formatierung der IDE verwendet hättest.