Go Down

Topic: Webserver ansteuern (Read 4 times) previous topic - next topic

Magicrookie

Vielen Dank @ Nachtaktiv.
Dein Beitrag hat mir sehr geholfen.
Ich verstehe nun viele Beispiele anderer Arduinonutzer , die mir warscheinlich nun weiterhelfen können.

Magicrookie

Soweit jetzt das aktuelle Programm.
Ich kriege keine Rückgabe von der angesteuerten Homepage an den Arduino.
Vlt weiß einer von euch da weiter.

Code: [Select]
#include <SPI.h>  //Anbindung microcontroller an Ethernet-Shield
#include <Ethernet.h>
#include <WString.h>
#include <Client.h>
#include <Server.h>
int LED =4;
boolean testdiode=false;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte ip[] = { 192,168,1, 177 };

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
String readString = String(100);      // string for fetching data from address





void setup(){
  Ethernet.begin(mac, ip);  //Start der Ethernet-Verbindung und des Servers
  server.begin();
    pinMode(4, OUTPUT);
    Serial.begin(9600);
}

void loop(){

  // listen for incoming clients
EthernetClient client = server.available(); //Client Verbindung herstellen
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length()< 100){
          readString = readString + c;
        }
        Serial.print(c);
          // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          // print something, in HTML format:
        }
        else if (c == '\n') {
if(readString.indexOf("3=AN") > -1) {
   togglediode; // verändert den status von testdiode
                        }
                        if(readString.indexOf("3=AUS") > -1) {
   togglediode; // verändert den status von testdiode
                        }
                       

   
         
         
           client.println("<html>");
           client.println("<head>");
            client.println("<TITLE>Sörens Testpage</TITLE>");
           client.println("</head>");
           client.println("<body>");

           
          client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='einschalten'></form></td>");
           
           
             if (testdiode==true) {
     client.println("<input type=submit value=AN  name=3 style=width:200;height:100;background-color:lightgreen;/>");
}else {
     client.println("<input type=submit  value=AUS name=3 style=width:200;height:100;background-color:red;>");
}
           

           client.println("</body>");
           client.println("</html>");



          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    readString=" ";
    delay(1);
    // close the connection:
    client.stop();
  }

}

void togglediode (){
   if (testdiode == false){
     testdiode=true;
     digitalWrite(LED, HIGH);
   }
   else {
     testdiode=false; 
     digitalWrite(LED, LOW);
   }
}

nachtaktiv68

Hallo,

wenn Du in Deinem Formular den Wert "einschalten" schickst und in der Auswertung dann auf "AN" oder "AUS" prüfst, kann das nicht funktionieren ;)

Code: [Select]

if(readString.indexOf("3=AN") > -1) {

...

client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='einschalten'></form></td>");


Auch das Formular wird so nicht funktionieren. Der Submit-Button hat ja gar nichts zum Wegschicken. Du musst im gleichen Formular sowas definieren:

<input type=\"hidden\" name=\"schalten\" value=\"aus\">

Funktioniert das denn mit den einfachen Anführungszeichen? 'einschalten' ? Ich würde schreiben \"einschalten\"

Viel Erfolg!
twitter: @darktom

Magicrookie

Sooo

Hab die Befehle  readString.append(c);  und readString.contains() durch  readString = readString + c; und if(readString.indexOf("3=AN") > -1) { getauscht und
mit dm letzteren eine Abfrage gebastelt.

Und habe mit Hidden unten drunter nochmal Name und Value bestimmt.
Allerdings wenn ich nun klicke ändert sich in der Adressleiste immer noch nichts und somit kann ja auch nichts übertragen werden.
Hab mir das ganze nochmal in diversen online Beispielen angeschaut und es mit meinem Code abgeglichen. Ich sehe keinen direkten Unterschied.
Hab nun gute 8 Stunden damit zugebracht den Code ans laufen zu bekommen aber es läuft immer noch nicht.

Zu dem folgenden Code
Hier habe ich einen HTML-Code ausprobiert, welcher in einer HTML-Datei eine Rückgabe in der Adressleiste ergab, es jedoch in meinem Programm nicht tut.
Vlt kann mir jmd eine Musterlösung für mein Problem geben, denn ich verzweifle so allmählig.

Danke schonmal im Vorraus

Code: [Select]
#include <SPI.h>  //Anbindung microcontroller an Ethernet-Shield
#include <Ethernet.h>
#include <WString.h>

int LED =4;
boolean testdiode=false;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte ip[] = { 192,168,1, 190 };

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
String readString = String(100);      // string for fetching data from address


void setup(){
  Ethernet.begin(mac, ip);  //Start der Ethernet-Verbindung und des Servers
  server.begin();
    pinMode(4, OUTPUT);
    Serial.begin(9600);
}

void loop(){

  // listen for incoming clients
EthernetClient client = server.available(); //Client Verbindung herstellen
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length()< 100){
          readString = readString + c;
        }
        Serial.print(c);  //oput chars to serial port
       
        if (c == '\n') {
if(readString.indexOf("3=einschalten") > -1) {
   togglediode; // verändert den status von testdiode
                        }
                        if(readString.indexOf("3=ausschalten") > -1) {
   togglediode; // verändert den status von testdiode
                        }

           client.println("<html>");
           client.println("<head>");
            client.println("<TITLE>Sörens Testpage</TITLE>");
           client.println("</head>");
           client.println("<body>");

client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='einschalten'></form></td>");
client.println(" <input type=\'hidden\' >");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='ausschalten'></form></td>");
client.println(" <input type=\'hidden\' >");

           client.println("</body>");
           client.println("</html>");
        }
       
      }
    }
    // give the web browser time to receive the data
    readString=" ";
    delay(1);
    // close the connection:
    client.stop();
  }

}

//UNTERPROGRAMME


void togglediode (){
   if (testdiode == false){
     testdiode=true;
     digitalWrite(LED, HIGH);
   }
   else {
     testdiode=false; 
     digitalWrite(LED, LOW);
   }
}



mkl0815

Also was mir erstmal auffällt ist, das Deinem Formular der "action" Parameter fehlt. Außerdem müssen die hidden-Parameter innerhalb der <form> Tags stehen und nicht dahinter. 
Im Browser sollte Dein Formular wiefolgt aussehen
Code: [Select]

<html>
<head></head>
<body>
<form action="/" method="get"><input type=submit name=3 value='einschalten'>
<input type="hidden" name="varname" value="inhalt">
</form>
<form action="/" method=get><input type=submit name=3 value='ausschalten'>
<input type="hidden" name="varname" value="inhalt">
</form>
</body>
</html>

Parameter würde ich auch nicht mit Zahlen oder Ziffern bezeichnen, sondern schon mit einem "sprechenden Namen" (z.B. "schalten=an" und "schalten=aus"), aber das ist Geschmackssache, technisch sollte das erstmal kein Problem sein.
Was passiert denn, wenn Du die URL im Browser direkt anpasst, also Deinen Parameter "3=einschalten" mit einem "?" an die aufgerufene URL anhängst?
Welche Ausgaben bekommst Du über die serielle Schnittstelle?

Go Up