Der Haupttab (Esp8266 WebServer) und der Ordner (mit allen Tabs) müssen unbedingt den selben Namen haben.
Als Haupttab bezeichne ich den Tab der "setup()" und "loop()" enthält.
Esp8266 WebServer Tab
Der Webserver ist der erste Tab, auf dem sich alles aufbauen lässt.
Inklusive Arduino OTA um Updates online zum ESP8266 zu senden.
Mit dem Login Manager für deine ESP8266 Projekte brauchst du die Netzwerk-Zugangsdaten (SSID und Passwort)
nicht mehr fest codieren.
Eingabe der Zugangsdaten mittels Captive Portal. Es wird ein Access-Point mit dem Namen "EspConfig" erstellt.
Die Zugangsdaten werden nicht menschenlesbar im Dateisystem gespeichert.
Dies ist die Klassiche Version, bei jedem schalten wird die komplette Webseite neu gesendet.
Um die Webseite im Browsers aufzurufen gib die IP deines ESP gefolgt von "/led" ein. zB.:
"http://192.168.179.44/led"
Auf der Webseite werden automatisch die Bezeichnungen der Schaltflächen die du im Sketch unter "NAME[]" einträgst angezeigt.
Diese Namen werden nur beim ersten Aufruf der Webseite zum Browser gesendet und anschließend aus dem Local Storage gelesen.
Die Html Datei muss im Filesystem des Esp gespeichert werden.
Sollte die Anzahl der Ds18b20 Sensoren nicht mit der der Adressen übereinstimmen, wird Fehler angezeigt.
............................................
Esp8266 BME280 Tab
Die Klimadaten werden zur Anzeige auf der Webseite jede Sekunde aktuallisiert.
Die Messwerte werden mittels Javascript "Fetch.Api" zum Browser übertragen.
Es ist auch Möglich zwei Esp.. mit Bme280 Sensor auf einer Webseite darstellen.
Sollte der Bme280 Sensor nicht gefunden werden, wird Fehler angezeigt.
............................................
Esp8266 mit zwei BME280 Tab
Zwei BME280 mit der selben I2C Adresse lassen sich, dank "Pin mapping", mit dem Esp8266 auslesen.
Beide Sensoren werden jede Sekunde nacheinander abgefragt.
Entgegen allem was ich bis jetzt über den I2C Bus gelesen habe, hängt der Aussensensor erfolgreich an
einem 5 Meter langen Anschlußkabel.
Die Html Datei muss im Filesystem des Esp gespeichert werden.
............................................
Esp8266 Dual Relais Tab
2-Kanal Relais schalten ohne die Webseite zu erneuern. Dazu brauchst du kein JQuery oder Ajax.
Der Tab Dual Relais ist für LOW und HIGH aktive Relais, Solid State Relais oder Mosfet geeignet. Dies muss
vor dem Hochladen einmalig im Tab eingestellt werden.
Der Schaltzustand der Relais wird beim öffnen der Webseite eingelesen.
Der Buttontext und die Kontrolleuchten werden bei jedem Schalten aktualisiert.
Die Webseite inklusive animierte SVG-Grafik zur Anzeige der Helligkeit.
ESP8266 Filesystem Manager
LittleFS Upload Download Delete von Dateien mittels Browser.
Füge die "LittleFS.ino", vorzugsweise als Tab, zu deinem Webserver Sketch hinzu und rufe anschliesend
unter Angabe der IP deines Esp8266 die fs.html über die Adresszeile deines Browsers auf.
Sortierung der Dateien ist mittels Klick auf den Pfeil im untersten Listeneintrag
Neu!
ETag Unterstüzung: ab Core Version 2.7.0.
Beim Hovern mit der Maus über dem Datei Namen wird der Zeitpunkt der letzten Änderung eingeblendet.
Sortierung der Dateien nach Zeit der letzten Änderung.
............................................
ESP8266 Datei Manager
Spiffs sollte nicht mehr verwendet werden!
Spiffs Upload Download Delete von Dateien von einer HTML-Seite
Füge die "spiffs.ino", vorzugsweise als Tab, zu deinem Webserver Sketch hinzu und rufe anschliesend
unter Angabe der IP deines Esp8266 die spiffs.html über die Adresszeile deines Browsers auf.
Beispielsweise so "http://192.168.179.44/spiffs.html"
Wenn sich im Spiffs (Speicher) des Esp8266 noch keine "spiffs.html" befindet wird ein kleiner Helfer zu
deinen Browser gesendet mit dem du die "spiffs.html" und die "style.css" hochladen kannst.
Hast du die "spiffs.html" erfolgreich in den Speicher deines Esp8266 geladen siehst du die Esp8266 Datei
Verwaltung.
Jetzt kannst du loslegen. Upload Download Delete Html CSS usw. hochladen LOG Dateien
einsehen/runterladen.
Die Sortierung der Dateien ist mittels Klick auf den Pfeil im untersten Listeneintrag möglich.
Der Dateiname dient gleichzeitig als Link zur Seite bzw. zur Ansicht (Textdatei) im Browser.
Es ist nicht möglich Dateien hochzuladen, die größer sind als der noch verfügbare Speicher.
Eine gute Erklärung für die notwendige Begrenzung findest du auf
Ullis Roboter Seite.
Getestet von 1 MB bis 16 MB Flash. Getestet mit Nodmcu, Wemos D1 Mini Pro, Sonoff Switch, Sonoff Dual
SMTP2GO Free hat ein Limit von 25 E-Mails pro Stunde / 1.000 E-Mails pro Monat.
Deshalb die Funktion "sendmails();" niemals unlimitiert aufrufen.
Die Serverantwort von smtp2go.com, ob die Übertragung erfolgreich war, wird nicht blockierend
ausgewertet.
Bei Zeitüberschreitung wird eine Fehlermeldung gesendet.
............................................
Esp8266 UDP Unicast Tab
Senden und empfangen von Nachrichten per UDP.
Unicast ist der Informationsfluss zwischen nur zwei Netzteilnehmern.
Das Sonoff Dual mit zwei integrierten Relais benutze ich zum schalten meiner Aussenbeleuchtung.
Mit integrierten Betriebsstundenzähler seperat für jeden LED Fluter.
Sonoff flashen
Arduino IDE unter Werkzeuge einstellen.
Board: "Generic ESP8266 Module"
Flash Size: "(1M 128k SPIFFS)"
alle anderen beibehalten
Die erste Programmierung des Sonoff Dual erfolgt mittels eines USB to TTL Serial Adapter, der für 3.3V
geeignet ist.
Danach über Arduino OTA.
Der Wlan-Präsenzmelder kann bei Abwesenheit aller Personen als Anwesenheitssimulator mittels einer Lichtquelle verwendet werden.
Oder spezielle Funktionen der Heizung und/oder Lüftung bei Anwesenden Personen auslösen.
............................................
Esp8266 DHT22 Tab
Temperatur Luftfeuchte Taupunkt Hitzeindex
Die Klimadaten werden zur Anzeige auf der Webseite aller zwei Sekunden aktuallisiert.
Funktioniert erst ab Arduino Core Version 2.4.0 aufwärts.
Füge die "admin.ino", vorzugsweise als Tab, zu deinem Webserver Sketch hinzu und lade anschliesend
mit Hilfe der Esp8266 Dateiverwaltung die admin.html in das Filesystem.
Die Spiffs.ino ist zum ausführen der Admin.ino erforderlich.
Die "Admin.ino" funktioniert jetzt auch mit Linux. Danke an Gerhard für die freundliche Unterstüzung.
Zeitzone auswählen und durch einen Mausklick ausserhalb der Liste übernehmen.
Bitte beachte das die Sommerzeit für Asia/Tehran nicht angezeigt wird.
Wahrscheinlich werden die Julianischen Tagesnummern in dieser Zone nicht interpretiert.
Die Lokalzeit.ino ist für die Zeitschaltuhr erforderlich
Der Tab Zeitschaltuhrdual ist für LOW und HIGH aktive Relais, Solid State Relais oder Mosfet geeignet.
Dies muss vor dem Hochladen einmalig im Sketch, im Tab Zeitschaltuhr.ino, eingestellt werden. Es lassen sich
bis zu 8 Ein-/Aus-Programme pro Gerät einstellen.
Die Anzahl der Schaltprogramme muss im Sketch analog der Anzahl im Html Dokument eingestellt sein!
Die optische Schaltzustandsanzeige ist gleichzeitig der Button zum manuellen Ein-/Ausschalten der Ausgänge.
Die Html Datei muss im Filesystem des Esp gespeichert werden.
Das erfolgreiche speichern der Schaltzeiten auf dem Esp8266 Webserver wird im Webinterface angezeigt.
Ansicht Zeiteinstellung Mobil Device Android
............................................
Esp8266 Zeitschaltuhr Singel Tab
Die Anzahl der möglichen Schaltzeiten lässt sich zwischen 1 und 60 einstellen.
Der Lokalzeit Tab ist für die Zeitschaltuhr erforderlich.
Die Schaltzeiten werden im Spiffs des Esp8266 gespeichert. Auf der Webseite werden die aktuell eingestellten
Schaltzeiten angezeigt.
Windgeschwindigkeit- und Richtung mit Fifo Puffer für die Anzeige der maximalen und durchschnittlichen Geschwindigkeit der Stunde, des Tages und der Woche.
Der AHT10 ist ein digitaler Sensor zur Messung der Temperatur und Luftfeuchte. Er wird über den I2C-Bus angesprochen. Der Messbereich liegt zwischen -40°C bis +85°C und 0% bis 100%.
Hallo, ich versuche seit einigen Tagen eine Lösung für das Speichern des Zustandes einer Checkbox zu implementieren. Den Zustand möchte ich in einer Variablen ablegen und per LittleFS() schreiben.
Beim Start wird das Formular geladen und per processor() über Textersetzung (if VAR = "X" - return "Y") der Variablenwert eingelesen - klappt alles super.
Das Problem ist wie ich im Gegenzug beim Speichern des Formulars zuvor den Zustand (checked/unchecked) der Checkbox auslesen und in die Variable schreiben kann. Hierfür gibt es wohl keine direkte "Funktion" (wie isset() oder ähnliches).
Der Komponenten-Parameter (aus der iterierten Abfrage per < AsyncWebParameter* p = request->getParam(i); > liefert hier meines Wissens nach auch keinen direkt auswertbaren Parameter. Für Textfelder verwende ich z.B. < active = p->value().c_str() und schreibe die Variable dann per < writeFile(LittleFS, activePath, active.c_str()) > ins Dateisystem - klappt einwandfrei. Nur die checkboxen versagen hier die Kooperation 😉
Je mehr man hier rumprobiert, umso "blinder" wird man. Hast du hierzu vielleicht einen Tipp, eine Hilfestellung oder idealerweise einen Code-Snipet zur Verfügung? Seit Tagen versuche ich das "Auslesen" des Checkbox-Zustandes zu lösen - bisher ohne Erfolg. Das fuchst einen schon sehr .... 🙁
Vielen Dank vorab,
Peter
Antwort:
Für Checkboxen speichere ich 0 oder 1 per Bitshift in einer Variable. Siehe Zeitschaltuhren mit Wochentagen.
Gruß Fips
harry ❘ 21.02.2024
Hallo,
eine interessante Seite die gerne zu Mehr beitragen könnte, allerdings, als Neueinsteiger hab ich keinen Erfolg.
(Kann meine definierte IP nicht aufrufen...usw.)
Vll. ist die Hardware daran schuld? Ein ESP-01.
Es fehlen mir vll. auch die Grundkenntnisse als Neueinsteiger....
Wie muss ich Core verstehen?
Was heisst:
....der Haupttab (Esp8266 WebServer) und der Ordner (mit allen Tabs) müssen unbedingt den selben Namen haben...
Einfachanwendungen aus anderen Quellen hatte ich bis dato erfolgreich ans laufen gebracht, hier leider nicht erfolgreich, schade!
Grüßle
Harry
Antwort:
Auf der Startseite oben links gibt es eine Erklärung.
Gruß Fips
Michael ❘ 21.02.2024
Hallo Fips,
ich habe gerade eine "harte" Nuss zu knacken und komme nicht weiter. Folgende Problemstellung: Wie speichere ich den Status einer WebForm-Checkbox im LittleFS ?
Projektstand derzeit:
Ich nutze das LittleFS um alle Optionen in einem Formular beim Speichern (Absenden) ins Dateisystem zu speichern. Das klappt wunderbar mit allen Feldern (Eingabefelder etc.), aber mit einer Checkbox habe ich Probleme und komme nicht weiter.
Das "setzen" der Checkbox passiert im processor() wie folgt:
Dabei ist "ch1onoff" die Variable zur Option. Wenn ich die Optionen-Form und die Checkbox ändere und per "HTTP_POST" abspeichere, dann wird der neue "Zustand" nicht erkannt und geschrieben:
server.on("/", HTTP_POST, [](AsyncWebServerRequest *request){
int params = request->params();
.....
if(p->name() == PARAM_INPUT_20){
ch1onoff = p->value().c_str();
Serial.print("On/Off wird gesetzt auf: ");
Serial.println(ch1onoff);
// Feldwert gleich wieder schreiben
writeFile(LittleFS, ch1onoffPath, ch1onoff.c_str());
Wie kann ich den Status der Checkbox beim Speichern des Formulares eindeutig erkennen und dann z.B. als "checked" oder "" im LittleFS als txt-Datei speichern?
Ich hoffe ich konnte mein Problem verständlich darstellen.
Lieben Dank vorab und Grüße,
Michael
Antwort:
Ich würde 1 und 0 vorschlagen.
Gruß Fips
juergen ✪ ✪ ✪ ❘ 07.01.2024
Hallo Fips,
eine tolle Seite die mir schon sehr geholfen hat.
Leider bin ich noch Anfänger was den ESP8266 und HTML betrifft. Die Sollwert läuft soweit. Ich möchte die Seite auf 5 float Variablen erweitern. Ist das möglich? Wo kann ich evtl. nachlesen? Hilfe....
Antwort:
Ja klar, ist das möglich.
Eventuell hilft dir ein Anfrage in einem Html/Javascript Forum für die Webseite.
Gruß Fips
Ismoh ✪ ✪ ✪ ❘ 13.12.2023
Hey Fips,
hast du für deine sehr lehrreichen Projekte ggf. ein GitHub repo?
Ich würde mir gerne den Quellcode anschauen, um das ganze besser nachvollziehen zu können.
VG Ismoh
Antwort:
Nein.
Der Quellcode ist doch "hier" offen dargestellt.
Gruß Fips
DiRi ✪ ✪ ✪ ❘ 12.12.2023
Hallo Fips,
Ich muss dir ein großes Lob aussprechen.....Ich finde deinen Programm Aufbau einfach genial. Ich habe schon einiges von dir verwendet.....super. Neues Projekt mit dem Sonnenaufgang-Steuerung scheitert leider an dem Fehler:
expected primary-expression before '.' token
if (tm.tm_mday != lastday || tm.tm_isdst != lastdst) { // Sonnenlauf für Tage mit Zeitumstellung zweimal Täglich berechnen.
^
^
Kannst du mir bitte dabei helfen.....
Gruß Dirk
Antwort:
Tut mir Leid, ich kann den Fehler nicht reproduzieren.
Gruß Fips
gehol ✪ ✪ ✪ ❘ 13.10.2023
Hallo Fips,
das Problem mit dem Ordner erstellen über den Browser habe ich behoben, es lag an meiner Software.
Grüße gehol
Antwort:
Gut das es jetzt klappt.
Gruß Fips
gehol ✪ ✪ ✪ ❘ 09.10.2023
Hallo Fips,
ich habe eine Frage zu "ESP8266 Filesystem Manager": wenn ich einen neuen Ordner mit dem Manager erstelle findet das System diesen Ordner dann nicht oder nur nach mehreren Versuchen. Mache ich da etwas falsch?
Übrigens sehr gute und informative Seite, danke!
Gruß gehol
Antwort:
Möglicherweise.
Gruß Fips
Bjoern ✪ ✪ ✪ ❘ 03.09.2023
Hallo
Ich finde dein Projekt hier sehr spannend und lehrreich.
Es hilft mir für meine kleine Station im Innenbereich mit smoke,Co,LPG,Temp und Hum Sensoren.
Vielen Dank und ich werde Links zu deiner Seite hier hinterlassen.
Grüsse
Antwort:
Bitte, gerne.
Gruß Fips
K-F. Knoll ❘ 03.08.2023
Hallo und Danke für die tolle Unterstützung beim ESP,
eine kurze Frage,ich würde gerne die ds18b20list.html
auf meine Webseite hochladen und aber wie mache ich das ?
Dank im voraus
K-F.
Antwort:
Im Setup einfügen:
server.enableCORS(true);
In der Webseite den Pfad anpassen:
fetch('IP deines ESP/lots')
Server ausserhalb deines Wlan:
Portfreigabe im Router für den Esp freischalten.
fetch('Adresse deines Netzwerkes:Port/lots')
Beim Start wird das Formular geladen und per processor() über Textersetzung (if VAR = "X" - return "Y") der Variablenwert eingelesen - klappt alles super.
Das Problem ist wie ich im Gegenzug beim Speichern des Formulars zuvor den Zustand (checked/unchecked) der Checkbox auslesen und in die Variable schreiben kann. Hierfür gibt es wohl keine direkte "Funktion" (wie isset() oder ähnliches).
Der Komponenten-Parameter (aus der iterierten Abfrage per < AsyncWebParameter* p = request->getParam(i); > liefert hier meines Wissens nach auch keinen direkt auswertbaren Parameter. Für Textfelder verwende ich z.B. < active = p->value().c_str() und schreibe die Variable dann per < writeFile(LittleFS, activePath, active.c_str()) > ins Dateisystem - klappt einwandfrei. Nur die checkboxen versagen hier die Kooperation 😉
Je mehr man hier rumprobiert, umso "blinder" wird man. Hast du hierzu vielleicht einen Tipp, eine Hilfestellung oder idealerweise einen Code-Snipet zur Verfügung? Seit Tagen versuche ich das "Auslesen" des Checkbox-Zustandes zu lösen - bisher ohne Erfolg. Das fuchst einen schon sehr .... 🙁
Vielen Dank vorab,
Peter
Antwort:
Für Checkboxen speichere ich 0 oder 1 per Bitshift in einer Variable. Siehe Zeitschaltuhren mit Wochentagen.
Gruß Fips
eine interessante Seite die gerne zu Mehr beitragen könnte, allerdings, als Neueinsteiger hab ich keinen Erfolg.
(Kann meine definierte IP nicht aufrufen...usw.)
Vll. ist die Hardware daran schuld? Ein ESP-01.
Es fehlen mir vll. auch die Grundkenntnisse als Neueinsteiger....
Wie muss ich Core verstehen?
Was heisst:
....der Haupttab (Esp8266 WebServer) und der Ordner (mit allen Tabs) müssen unbedingt den selben Namen haben...
Einfachanwendungen aus anderen Quellen hatte ich bis dato erfolgreich ans laufen gebracht, hier leider nicht erfolgreich, schade!
Grüßle
Harry
Antwort:
Auf der Startseite oben links gibt es eine Erklärung.
Gruß Fips
ich habe gerade eine "harte" Nuss zu knacken und komme nicht weiter. Folgende Problemstellung: Wie speichere ich den Status einer WebForm-Checkbox im LittleFS ?
Projektstand derzeit:
Ich nutze das LittleFS um alle Optionen in einem Formular beim Speichern (Absenden) ins Dateisystem zu speichern. Das klappt wunderbar mit allen Feldern (Eingabefelder etc.), aber mit einer Checkbox habe ich Probleme und komme nicht weiter.
Das "setzen" der Checkbox passiert im processor() wie folgt:
if(var == "C1C"){
if(ch1onoff == "on"){
return "checked";
} else {
return "";
Dabei ist "ch1onoff" die Variable zur Option. Wenn ich die Optionen-Form und die Checkbox ändere und per "HTTP_POST" abspeichere, dann wird der neue "Zustand" nicht erkannt und geschrieben:
server.on("/", HTTP_POST, [](AsyncWebServerRequest *request){
int params = request->params();
.....
if(p->name() == PARAM_INPUT_20){
ch1onoff = p->value().c_str();
Serial.print("On/Off wird gesetzt auf: ");
Serial.println(ch1onoff);
// Feldwert gleich wieder schreiben
writeFile(LittleFS, ch1onoffPath, ch1onoff.c_str());
Wie kann ich den Status der Checkbox beim Speichern des Formulares eindeutig erkennen und dann z.B. als "checked" oder "" im LittleFS als txt-Datei speichern?
Ich hoffe ich konnte mein Problem verständlich darstellen.
Lieben Dank vorab und Grüße,
Michael
Antwort:
Ich würde 1 und 0 vorschlagen.
Gruß Fips
eine tolle Seite die mir schon sehr geholfen hat.
Leider bin ich noch Anfänger was den ESP8266 und HTML betrifft. Die Sollwert läuft soweit. Ich möchte die Seite auf 5 float Variablen erweitern. Ist das möglich? Wo kann ich evtl. nachlesen? Hilfe....
Antwort:
Ja klar, ist das möglich.
Eventuell hilft dir ein Anfrage in einem Html/Javascript Forum für die Webseite.
Gruß Fips
hast du für deine sehr lehrreichen Projekte ggf. ein GitHub repo?
Ich würde mir gerne den Quellcode anschauen, um das ganze besser nachvollziehen zu können.
VG Ismoh
Antwort:
Nein.
Der Quellcode ist doch "hier" offen dargestellt.
Gruß Fips
Ich muss dir ein großes Lob aussprechen.....Ich finde deinen Programm Aufbau einfach genial. Ich habe schon einiges von dir verwendet.....super. Neues Projekt mit dem Sonnenaufgang-Steuerung scheitert leider an dem Fehler:
rror: expected primary-expression before '.' token
strcpy(sun.sunset, outputFormat((12.0 + differenceTime - EOT) - longitude / 15.0 + (_timezone* -1) / 3600 + tm.tm_isdst));
^
expected primary-expression before '.' token
if (tm.tm_mday != lastday || tm.tm_isdst != lastdst) { // Sonnenlauf für Tage mit Zeitumstellung zweimal Täglich berechnen.
^
^
Kannst du mir bitte dabei helfen.....
Gruß Dirk
Antwort:
Tut mir Leid, ich kann den Fehler nicht reproduzieren.
Gruß Fips
das Problem mit dem Ordner erstellen über den Browser habe ich behoben, es lag an meiner Software.
Grüße gehol
Antwort:
Gut das es jetzt klappt.
Gruß Fips
ich habe eine Frage zu "ESP8266 Filesystem Manager": wenn ich einen neuen Ordner mit dem Manager erstelle findet das System diesen Ordner dann nicht oder nur nach mehreren Versuchen. Mache ich da etwas falsch?
Übrigens sehr gute und informative Seite, danke!
Gruß gehol
Antwort:
Möglicherweise.
Gruß Fips
Ich finde dein Projekt hier sehr spannend und lehrreich.
Es hilft mir für meine kleine Station im Innenbereich mit smoke,Co,LPG,Temp und Hum Sensoren.
Vielen Dank und ich werde Links zu deiner Seite hier hinterlassen.
Grüsse
Antwort:
Bitte, gerne.
Gruß Fips
eine kurze Frage,ich würde gerne die ds18b20list.html
auf meine Webseite hochladen und aber wie mache ich das ?
Dank im voraus
K-F.
Antwort:
Im Setup einfügen:
server.enableCORS(true);
In der Webseite den Pfad anpassen:
fetch('IP deines ESP/lots')
Server ausserhalb deines Wlan:
Portfreigabe im Router für den Esp freischalten.
fetch('Adresse deines Netzwerkes:Port/lots')
Gruß Fips