Hallo, kann mir jemand sagen, ob es irgendeinen (einfachen) Weg gibt, bei Verwendung des EthernetShield mit WebServer, z.B. Formulardaten im Webbrowser einzugeben und diese in eine C-Variable zu speichern? Oder geht das wirklich nur über den Umweg mit PHP und SQL. Ich messe mit den AD-Kanälen Ströme und stelle die aktuellen Werte im Browserfenster dar. Jetzt möchte ich dort aber auch bestimmte Maximalwerte eingeben können und diese im Controller in Variablen speichern, so das das Programm damit arbeiten kann. Hat jemand Ideen? Vielen Dank Tobi
Arduino Mega Ethernet Shield Browsereingaben speichern
Man kann auch einfache HTML Formulare benutzen und diese erzeugen dann eine "HTTP GET" oder "HTTP POST" Anfrage an den Server/Arduino. http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Argument.C3.BCb...
Hi, nur kurz als Rückmeldung: Mit HTTP GET (oder POST) funktioniert es sehr gut. Ich lese die übertragenen Daten mit client.read() in ein char Array ein. Dieses kann ich dann auswerten, da an bestimmten Positionen die Werte aus den html-Formularen stehen. Grüße Tobi
Hi, hänge gerade am gleichen Problem ich bekomme HTTP und die C Variable nicht zusammen. 1) wie baue ich unter arduino ein HTML Eingabefeld ich habe es wie unter http://de.selfhtml.org/html/formulare/eingabe.htm#tabelle beschrieben versucht mit server.print("") da hagelt es aber immer Fehlermeldungen 2) wie weise ich denn z.B. x mit int x =client.read(); das "Richtige" Feld zu (wen ich mehrere habe) ich glaub ich seh gerade den Wald vor lauter Bäumen nicht..... danke und Grüsse Andi
zu 1) wie baue ich unter arduino ein HTML Eingabefeld ich habe es wie unter http://de.selfhtml.org/html/formulare/eingabe.htm#tabelle beschrieben versucht mit server.print("") da hagelt es aber immer Fehlermeldungen denke ich habe ich eine Lösung gefunden server.println("<form method=get><input type=text size=30 value=Eingabe></form>"); baut mir ein Eingabefeld auf. zu 2 hänge ich noch char c = client.read(); liesst irgenseinen schrott aus, aber nicht das was ich will..... Grüsse
Es gibt 2 Möglichkeiten der Abfrage: GET und POST. Bei GET werden die Variablen und Parameter in der URL übergeben, sprich http://www.domain.de/seite.htm?a=123&b=456 bei POST werden sie gleich nach dem HTTP Header gesendet. Ich glaube mit client.read() kann nur die POST Variante gelesen werden. Hast du dir mal alle ankommenden Daten angeschaut, z.B. über die serielle Schnittstelle? ... void loop() { if(client.available()) { char c = client.read(); Serial.print(c); } } ... Weitere Infos zu GET und POST: http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol Gruß Andreas
Ich habe mit
server.print("<FORM> <method=get><INPUT type=text name=int></FORM>");
ein Eingabefeld erzeugt.
Egal ob ich get oder post anwende, wenn ich daten eintrage und der Web
server in seinen nächsten zyklus kommt schreibt er
http://ip/?int=1 also so wie Du es auch beschriebn hast (warum er das auch
für post tut???). Wenn ich nun mit
if(client.available()) {
char c = client.read();
Serial.print(c);
}
Anfrage kommt bei serial.print ein schlichtes G heraus, egal was ich
eingebe, egal ob ich get oder post benutze. Ist villeicht mein Formular
nicht richtig?
Danke und Gruß
Andreas
Das Formular müsste so aussehen:
server.print("<form method='post'><input type='text' name='int'><input
type='submit'></form>");
Gruß
Andreas
Hallo Andreas,
ich rauf mir die Hare, ich denke es funzt eigendlich alles nur cahr = c ist
eben nur ein int deshalb liest der auch bei method post nur ein P aus und
bei Get nur ein G, aber alle versuche aus dem char =c[10] ein
Mehrdeminsonales Feld zu bauen scheiterteten denn darean das bei char c =
client.read(); ein Typkonvertierungsfelher hochkommt, leider ist bei allen
geposteten Beispielen nie die Rede davon ob man char = c mehrdeminsional
ausfüren muss und wenn ja wie es geht. Hast Du dazu noch einen Tipp?
Anbei mal mein Coding
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC Adresse
festlegen
byte ip[] = { 192, 168, 178, 90 }; //IP frstlegen
Server server(80); // Server an Port 80
void setup()
{
Ethernet.begin(mac, ip); //w1500 HW initialisieren
server.begin(); //server starten und auf clients warten
Serial.begin(9600); // Seriale kommunikation mit 9600 Baut starten
}
void loop()
{
Client client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
//---HTML Sektion Start
server.print("<HTML><HEAD></HEAD>");
server.print("<BODY>");
server.print("<form method='post'><input type='text' name='int'><input
type='submit'></form>");
server.print("</BODY></HTML>");
//---HTML Sektion Ende
if(client.available()) {
char c = client.read();
Serial.print(c); //hier kommt nur P oder g je nach method....
}
delay(1500);
client.stop();
Serial.println("Webserver gestoppt");
}
Schau dir mal das WebServer Beispiel aus der Ethernet Lib an. Das ist ein Grundgerüst für einen Server. Weil dein Code einige Fehler enthält. Gruß Andreas


