Arduino Mega Ethernet Shield Browsereingaben speichern

Tobi NoUser 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 User 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 NoUser 2010-04-16 09:01:01 Link
Vielen Dank Andreas, das werde ich ausprobieren.

Tobi

Tobi NoUser 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 NoUser 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 NoUser 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 User 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 NoUser 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 User 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 NoUser 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 User 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

Antworten

Name
eMail (wird nicht angezeigt)
Betreff (keinen Text nur mit Großbuchstaben; kein HILFE, HELP...)
Text
HTML Tags werden nicht unterstützt und Links werden automatisch erstellt, wenn sie mit http o. ftp beginnen.
Längeren Sourcecode oder Logdateien bitte als Dateianhang einfügen (nur registrierte Benutzer).
Bitte die Zahl eingeben 7983