Arduino Mega Ethernet Shield Browsereingaben speichern

Tobi 2010-04-13 20:05:41 Link
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

Andreas Watterott 2010-04-14 20:11:38 Link
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...

Tobi 2010-04-16 09:01:01 Link
Vielen Dank Andreas, das werde ich ausprobieren.

Tobi

Tobi 2010-06-18 09:59:03 Link
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

andi 2010-08-27 23:58:52 Link
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

andi 2010-08-28 18:36:56 Link
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

Andreas Watterott 2010-08-29 17:09:55 Link
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

andi 2010-08-29 21:21:19 Link
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

Andreas Watterott 2010-08-30 16:14:19 Link
Das Formular müsste so aussehen:
server.print("<form method='post'><input type='text' name='int'><input
type='submit'></form>");

Gruß
Andreas

andi 2010-09-01 21:22:31 Link
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");
    }

Andreas Watterott 2010-09-02 09:14:44 Link
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

Andi 2010-10-10 13:27:31 Link
ich wollte eine Rückmeldung geben,

Der Tip mit dem Example war hilfreich ich habe zusätzlich noch
http://www.mats-vanselow.de/post/351122719/arduino-ins-netz-bringen
Ich habe es mit http get realisiert, welches auch super funktioniert.

lptr 2011-06-24 11:25:41 Link
hallo,

könntest du bitte dein funktionierendes Mini-Beispiel (ein Textfeld das vom
Server eingelesen wird) posten? Der Link oben ist tot. Ich kämpfe auch mit
der Server Implementierung. Irgend wie hänge ich daran, dass ich nicht
herausfinden kann, wie der Browser auf Arduino Seite eine Änderung anstößt.

Danke schon im Voraus.

Reply

Name
eMail (not visible)
Subject (no text only in upper case; no HELP, URGENT...)
Text
HTML tags are not supported and links are generated automatically if they start with http or ftp.
Please submit long source code or log files as attachment (only registered users).
Please enter the number 1852