PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Ausgabe im Webbrowser



jbaben
11.02.2018, 09:44
Hallo,

ich habe ein Problem mit dem ESP8266 als Webserver.
Bei dem folgenden Beispiel wird nur einmal der Text in der Zeile "server.on("/", handleRoot); " ausgegeben, die folgenden Texte mit "server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});" aber nicht und auch nicht die folgenden.


// Sensorwerte auf Webserver (ESP 8266) anzeigen
// Sensorwerte_anzeigen_02.ino
// Beispiel von:
// http://michaelsarduino.blogspot.co.za/2015/09/sensorwerte-auf-webserver-esp-8266.html

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <TimeLib.h>

const char* ssid = "ssid";
const char* password = "password";
MDNSResponder mdns;

String bewegung_html = "<table border = 1>";

ESP8266WebServer server(80);

void handleRoot() {
server.send(200, "text/html", "<html>");
//server.send(200, "text/html", bewegung_html);
//server.send(200, "text/html", "</table></html>");
}

void handleNotFound(){
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}

void setup(void){
// Uhrzeitm(hr, min, sec, day, mon, year)
setTime(17, 25, 10, 10, 02, 2018);
pinMode(D2, INPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}

server.on("/", handleRoot);
server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});

server.onNotFound(handleNotFound);

server.begin();
Serial.println("HTTP server started");
}

unsigned long akt = millis();
unsigned long zuletzt = millis();
void loop(void){
akt = millis();
if(digitalRead(D2) == HIGH && ((akt - zuletzt) > 1000))
{
bewegung_html = bewegung_html + "<tr><td>" + hour() + ":" + minute() + "</td> <td> Bewegung erkannt an Sensor 1 </td> </tr><br />";
zuletzt = millis();
Serial.println("Sensor betaetigt");
Serial.println(bewegung_html);
server.send(200, "text/plain", "Sensor betaetigt");
}
mdns.update();
server.handleClient();
}

Programmier IDE = Arduino 1.8.5
Webbrowser = Firefox 58.0.2
OS = WINDOWS 7 und 10.

MfG

Juergen B.
:confused:

HaWe
11.02.2018, 11:52
hallo,
das mit den []() sieht ein wenig seltsam aus -
ich mache es so:


ESP8266WebServer server(8081);

void setup() {
// ...
server.on("/",handleRoot) ;
server.on("/client/client0/", handleClientIOs);
server.on("/client/client1/", handleClientIOs);
server.begin();
// ...
}

handleClientIOs() ist eine selbstdefinierte Funktion, die die Variablenwerte von Server und Clients und die Kommunikations-messages in alle Richtungen verwaltet + auswertet.

dann werden
server.handleRoot();
server.handleClient();
zyklisch auch in loop() aufgerufen

(Anm: handleRoot() brauche ich selber eigentlich gar nicht und habe es inzwischen auskommentiert)

jbaben
12.02.2018, 10:58
Hallo,
vielen Dank für die schnelle Antwort, hat aber leider keine Änderung gebracht.
Mein Problem ist aber auch das ich die Syntax rund um die Server-Befehle noch nicht verstehe.
Normalerweise erarbeite ich mir das anhand von Beispielen und Infos aus Büchern usw.
Aber wenn ein Beispiel nicht funktioniert, ist das natürlich schwierig.
Das mit "server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});" wird in allen Beispielen die ich verwendet habe benutzt.
Was ist der Unterschied zwischen: "server.on("/",handleRoot) ;"
und "server.on("/client/client0/", handleClientIOs);" ?

MfG

Juergen B.

HaWe
12.02.2018, 11:28
Was ist der Unterschied zwischen: "server.on("/",handleRoot) ;"
und "server.on("/client/client0/", handleClientIOs);" ?

ich bin auch Neuling auf diesem Gebiet.
Zunächst sind handleRoot und handleClient oder handleClientIOs in jedem Falle eigene Funktionen.
Soweit ich es verstehe, richtet sich das Verhalten des webservers, welche Funktion aufgerufen wird, danach, welchen Pfad ein Client aufruft - entweder den Root-Pfad oder ein abhängiges Unterverzeichnis.
Man kann sie auch anders nennen, z.B.
server.on("/",handleRoot) ;
server.on("/sensor/temperatur/", handleTemperatur);

Guck mal hier, etwa in der Mitte der Website, im Kapitel
"Wir programmieren einen ESP-Server und ESP-Client um Temperaturwerte per WLAN zu übertragen"

http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/