Forum: Mikrocontroller und Digitale Elektronik WebServer Erweiterun


von Matze (Gast)


Lesenswert?

Guten Abend

Ich habe in den letzten Tagen meinen ersten WebServer mit einem Arduino 
UNO zum laufen gebracht. Nun kann ich zwei Ausgänge per Browser auf High 
oder Low setzten.

Nun komme ich aber nicht weiter da ich so etwas wie ein Ausgabefeld 
suche. Ich möchte anzeigen lassen ob der jeweilige Ausgang High oder Low 
ist.

So ein Textfeld werde ich auch in der Zukunkt benötigen ob 
Statusmeldungen an zu zeigen.

Kann mir da jemand weiter helfen.

Quellcode Arduino:
######################################################################## 
###
#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>

byte mac[] = {
  0x5A, 0xA2, 0xDA, 0x0D, 0x56, 0x7A }; // MAC-Adresse des 
Ethernet-Shield
byte ip[]  = {
  192, 168, 2, 102 };                   // IP zum aufrufen des 
Webservers
byte sdPin = 4;                                      // Pin der SD-Karte

EthernetServer server(80);                           // Server port

File webFile;

void setup()
{
  Ethernet.begin(mac, ip); // Client starten
  server.begin();          // Server starten
  Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");

  Serial.println("Initialisiere SD-Karte...");
  if (!SD.begin(sdPin))
  {
    Serial.println(" - Initialisierung der SD-Karte fehlgeschlagen!");
    return;
  }
  Serial.println(" - SD-Karte erfolgreich initialisiert.");

  if (!SD.exists("index.htm"))
  {
    Serial.println(" - Datei (index.htm) wurde nicht gefunden!");
    return;
  }
  Serial.println(" - Datei (index.htm) wurde gefunden.");

  Serial.println();
  Serial.println("Verbraucher schalten");
}

void loop()
{
  EthernetClient client = server.available(); // Auf Anfrage warten

  if(client)
  {
    /*****************************************
      Ausgänge über das Webformular steuern  
     *****************************************/
    TextFinder finder(client);

    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();

        if(typ == 'D')
        {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, val);
          Serial.print(" - D"+String(pin));
        }
        else if(typ == 'A')
        {
          analogWrite(pin, val);
          Serial.print(" - A"+String(pin));
        }
        else Serial.print(" - Falscher Typ");

        if(val==1) Serial.println(" ein");
        else Serial.println(" aus");
      }
    }

    /************************
      Webformular anzeigen  
     ************************/
    boolean current_line_is_blank = true;       // eine HTTP-Anfrage 
endet mit einer Leerzeile und einer neuen Zeile

      while (client.connected())
    {
      if (client.available())                   // Wenn Daten vom Server 
empfangen werden
      {
        char c = client.read();                 // empfangene Zeichen 
einlesen
        if (c == '\n' && current_line_is_blank) // wenn neue Zeile und 
Leerzeile empfangen
        { // Standard HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();

          // Website von SD-Karte laden
          webFile = SD.open("test.htm");  // Website laden
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client 
schicken
            }
            webFile.close();
          }
          break;
        }
        if (c == '\n')
        {
          current_line_is_blank = true;
        }
        else if (c != '\r')
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch der Code vom WebServer angehangen. :)

von Stefan F. (Gast)


Lesenswert?

> Nun komme ich aber nicht weiter da ich so etwas wie ein
> Ausgabefeld suche.

Kennst du dich mit HTML aus? Du musst die HTML Seite dynamisch erzeugen, 
so dass sie die Werte enthält.
1
<form>
2
  Label: <input type="text" name="ausgabefeld" value="12345" readonly />
3
</form>
Oder einfach:
1
Label: 12345
Oder du aktualisierst eine statische Seite mit AJAX (siehe Wikipedia), 
aber das ist komplexer.

von Matze (Gast)


Lesenswert?

Hey erstmal danke für deine Antwort :)

Also ich habe nicht sehr viel Erfahrung mit HTML... Nur mit C

Du meinst quasie eine Variable die den Text anzeigt und durch das 
beschreiben der Variable ändert sich auch der sichtbare text ?
So in etwa...? ^^

Könntest du mir vielleicht wenns keine umstände macht ein Code Bsp. 
geben.

Ich musste erst mal überlegen wo ich was ändern muss. Also im HTML Code 
oder im C Code.

Gruß Matze
PS: Frohe Weihnachten :)

von Der Bonzz (Gast)


Lesenswert?

Auf dem Webserver bringt nur HTML Code etwas. Denn er wird auf dem 
Client, dh dem Browser ausgefuehrt.

Also. eine Eingabe :
<input type="submit" name="myinput" value="1">
<input type="text" name="mytext" value="hsjahjh shjsadj klj">
<input type="radio" name="sex" value="male" checked>Male
<button type="submit" name="mybtn" value="1"> drueck hier</button>


Zuerst muss man natuerlich sagen, was dann geschehen soll. Also das form 
:
<html>
<head><title>seitertitel</title></head>
<body><form action="input.php" method="post">
..
<button type="submit" name="mybtn" value="1"> drueck hier</button>
..
</form></body></html>


siehe auch :
 http://www.w3schools.com/html/default.asp

von Der Bonzz (Gast)


Lesenswert?

Wie werden werte vom Browser dem Webserver uebergeben. Als :
index.html?myinput=1&input2="abc"

Dafuer geibt's den Firebug Debugger als Erweiterung der Firefox 
Browsers. Damit kann man sich die Variablen ansehen.

von Matze (Gast)


Lesenswert?

Danke dir. ;) Ich probiere mich mal und lese mich da durch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.