Der ESP32-Faden

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

andreas6 hat geschrieben: Mo 19. Okt 2020, 20:53 Natürlich bekommt man alles irgendwie hin. Wenn allerdings schon die Dokumentation des Herstellers grober Pfusch ist, fasst man solchen Murks gar nicht erst an. Jedenfalls sehe ich das so. Und lasse dann die Finger davon. Zu jedem Produkt gehört eine gute und lesbare Dokumentation. Fehlt die, will ich das nicht mal geschenkt haben. Ein Fall für die Tonne.

MfG. Andreas
Sehe ich genau so. Dürfte an der Firma Heltec liegen. Der ESP32 ist sonst wohl recht gut, aber sowas nervt. Der ADC2 ist auch nicht an seinem richtigen Ort. Laut meinem Datenblatt ist er ansprechbar, funzt aber einfach nicht.
Ich werde meine 3 Boards für einen lustigen Zweck vertüddeln, und dann für immer begraben. Bis es eine gute Alternative gibt.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der ESP32-Faden

Beitrag von sysconsol »

Aber es war sooo schön billig, gell?

Das Problem mit dem Rauschen des ADC hat man auch in der Forschung gehabt.
Ich habe das noch nicht untersucht, allerdings habe ich die Befürchtung, dass ich das demnächst tun dürfen muss. :roll:
Und es wird nicht alles an der Powerbank (frag mal einer sein Oszi dazu) und den fehlenden Abblockkondensatoren der Peripherie liegen.

Bei so einer Temperatursache kann man aber auch über die Zeit gehen.
Wie genau muss das denn werden?
virtexultra
Beiträge: 132
Registriert: So 9. Dez 2018, 11:30

Re: Der ESP32-Faden

Beitrag von virtexultra »

andreas6 hat geschrieben: Mo 19. Okt 2020, 19:40 Da stehen zu viele Zahlen an Schaltungspunkten ohne Erklärung herum.
Das sind die jeweiligen GPIO Nummern. Da hätte man natürlich GPIO_ davor schreiben können.

Wenn ich das aus dem Schaltplan/Pinout richtig entnehme ist dort DAC1 und DAC2 vertauscht.

Ich verstehe nicht wie der ADC2 nicht an seinem richtigen Ort sein kann. Dieser ist intern gemuxed und mit den GPIO-Nr. 0, 2, 4, 12 - 15 und 25 - 27 verbunden. Achtung - dieser ist nur nutzbar wenn kein Wifi aktiviert ist. Alternativ der ADC1, verbunden mit GPIO-Nr. 32 - 39.

Der ADC ist nicht wirklich berauschend - 10 Bit sollten aber nutzbar sein - Er hat eine ziemlichen Kennlinienknick im oberen Bereich, also diesen besser nicht nutzen. Alternativ kann man noch etwas mit der Dämpfung spielen und somit den Spannungbereich anpassen. Espressif empfiehlt folgende Spannungsbereiche: Dämpfung 0, 100-950mV; 2.5, 100-1250mV; 6, 150-1750mV; 11, 150-2450mV.
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Kuddel hat geschrieben: Mo 19. Okt 2020, 18:58 Der Grund für die fehlerhaften Messwerte ist die Pin-Belegung des Heltec-Boards. Die Pins SDA und SCL sind im Port-Mapping auf 21 und 22 gelegt. Die Adafruit Bibliothek unterstützt dies aber aber nicht.
Das ist beim ESP32 kann man den I2C-Hardware-Bus intern auf fast jedem beliebigen Pin routen, mit Ausnahme der Analog-Pins und der es SPI-Flash.
Die feste Zuordnung ist nur zu berücksichtigen wenn man den RTC-Coprozessor verwendet. Das ist ein völlig eigenständiger CPU der sich einige Peripherie und Speicher mit den beiden Haupt-CPUs teilt.

Bei dem Müll auf den I2C-Bus kann ich mich nur einem Vorredner anschließen das die HW defekt ist.

Grüße Jan
Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

Ich habe ja nun als Termperatursensor einen guten alten NTC genommen und mit einem 10µF Kondensator geglättet, Die Werte sind zwar extrem ungenau, aber damit kann ich leben. Um den Temperaturverlauf auf der erzeugten Webseite anzuzeigen, nutze ich html-Canvas-Objekte bzw. Linien. Soweit alles gut.

Hier der entsprechende Code-Ausschnitt. Die befüllung von Buffer2 habe ich nicht mitgeschrieben, ist hierfür unwichtig.

Code: Alles auswählen

char Buffer1[4200];
char Buffer2[1200];
  
for(i=tempzahler; i<20; i++) {
  snprintf(BufferY, 100,"tx.lineTo(%d,%d);",i+10,(240-tempwert[i]))*2;
  strcat(Buffer1, BufferY);

server.send(200, "text/html", strcat(Buffer1, Buffer2))
Das funktioniert, solange ich nur 20 Temperaturen anzeige ( i<20) . Wenn ich aber 180 Temperaturen anzeigen lassen will, kommt nix mehr an. Wohl, weil da einen Längenbeschränkung des Char-Arrays ist.

Frage: Wie kann ich eine größere Webseite erzeugen?
Benutzeravatar
Tjareson
Beiträge: 362
Registriert: Fr 3. Jul 2015, 05:01

Re: Der ESP32-Faden

Beitrag von Tjareson »

Das Theater mit eigener Implementierung auf ESP habe ich auch 2-3 Jahre gemacht. Hatte mir sogar mal eigene Platinen für die Module machen lassen. Schlussendlich bin ich auf die Tasmota-Firmware umgestiegen, die einfach betriebssicherer ist und relativ viel Peripherie unterstützen.
Letztlich nutze ich die sehr billigen SONOFF-Module (bestelle ich meistens direkt bei itead in China) die dann auch gleich ein 220V Netzteil für $5 oder so im Gehäuse dabei haben. Dafür bekommt es selber nicht zusammengelötet.
Die werden bei mir u.a. als Lichtschalter für Lampen usw. genutzt. Will ich irgendwo Temperaturen auslesen, schließe ich einfach so viele DS18B20 Sensoren an das Modul an wie ich will, und das Teil erkennt jeden Sensor einzeln und zeigt mir die Temperatur an. Abhängige Schaltvorgänge lassen sich bedarfsweise auch gleich mit rules implementieren, falls man das nicht zentral steuern will.
(Daneben geht auch übertragung per mqtt usw. für weitere Integration mit bspw. node red)
Hat u.a.den Nebeneffekt, dass ich hier im Haus eigentlich die Temperatur in jedem Raum kenne. :-)

Besten Gruß
Tjareson
bild.png
Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

Es scheint, mit diesem Trick zu klappen:
https://github.com/esp8266/Arduino/issues/3225

Gruß
Kuddel
Nachtrag: Das war es doch nicht. irgendwo ist da noch was im argen. Bekomme leider keine Fehlermeldung, sondern nur "keine Webseite". Ich mag diesen Kram langsam nicht mehr.
MSG
Beiträge: 2195
Registriert: Fr 9. Nov 2018, 23:24
Wohnort: Nähe Dieburg

Re: Der ESP32-Faden

Beitrag von MSG »

@Kuddel wo aus welcher Bibliothek kommt denn das Server. Send() her?

Ist ja irgendwie doof, die Ausgabe erst in einem Buffer zu sammeln und dann abzuschicken. Eventuell kann man das aufteilen. So dass Kopf, in der Schleife dann die Ausgaben direkt gesendet und dann der Fuß der Seite gesendet wird?
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Kuddel hat geschrieben: Mo 2. Nov 2020, 10:17 Frage: Wie kann ich eine größere Webseite erzeugen?
Hallo,
also ich habe das so gelöst, dass ein statische Website in SPIFFS-Speicher liegt, samt Konfiguration.
Diese wird von AsyncWebServer ausgeliefert und auch die REST-Schnittstelle läuft darin.
Jetzt braucht man nur noch via (nativ) Java-Script oder jQuery die Daten aus der REST runterladen und die Website erwacht zum Leben.

Der Vorteil ist man hat eine fast vollständige Entkoppelung von Model und Business-Logik und der View.
Zu dem kann man einen Großteil der Website statisch vorprogrammieren und hat es auch in der Codeversionierung einfacher.

PS. AsyncWebServer ist wichtig das nicht alle Browser die Daten sequenziell runterladen. Chrome ist da ein Sonderfall. Es will bis zu 8 Dateien parallel runterladen.
Der Normale WebServer kann jedoch nur eine ausliefern und verwirft die anderen 7. Firefox tut dieses auch, jedoch werden alle fehlgeschlagenen Dateien anschließend noch einmal probiert sequenziell herunterzuladen.

Grüße Jan
Fischjoghurt
Beiträge: 271
Registriert: Di 13. Aug 2013, 16:19

Re: Der ESP32-Faden

Beitrag von Fischjoghurt »

Hallo

Welche Entwicklungstools verwendet ihr eingentlich?
Ich verwendet Arduino Sketch. Finde es grotten langsam (OK liegt auch ein bisschen am meinen PC) und habe auch viel Ärger mit den Bibliotheken.
Was ist besser und empfehlenswert?

Gruss
Walter Steinchen
Beiträge: 12
Registriert: Mo 2. Sep 2013, 22:37

Re: Der ESP32-Faden

Beitrag von Walter Steinchen »

Ich nutze hauptsächlich VSMicro, also eine Erweiterung zu VisualStudio.
Habe mittlerweile etwa 1 Dutzend Projekte mit dem ESP32 umgesetzt, und bin soweit eigentlich sehr Zufrieden damit.
Nutze oft Module von TTGO .. vor allem solche die schon mit Farbdisplays kommen.
WLAN, viele IO's und jede Menge sonstiger Optionen .., Schnell! und das alles zu einem Spottpreis ... was will man mehr ?
OverTheAir Update, Debugging über's Netz .. will Ich 'ne neue Software auf ein Device im Keller schieben muss Ich mich nicht mal aus dem Sessel Erheben ;-)


Einen Kritikunkt habe Ich, das ist die Langzeitstabilität .. so etwa nach 14 Tagen bleiben die Module gern mal hängen, waum weiss Ich nicht. Der integrierte Watchdog taugt leider nicht weil der aus der Arduino IDE nicht wirklich gut angesprochen werden kann; das würde nur mit dem Espressif SDK funktionieren. Deshalb wird auf alle meine Module ein ATTiny85 der als externer Watchdog dient mit dazugepappt. Das funktioniert logischerweise immer. Wird er nicht mehr gefüttert resetted er den ESP32.
Das Problem haben übrigens die ESP8266 nicht .. da habe Ich Laufzeiten von 1 jahr...

Klar die ADC's sind keine Ausgeburt an Genauigkeit .. aber wer das braucht muss halt einen Externen nehmen, für die meisten Anwendungen reichts.

WLAN ist ein absolutes Muss für die meisten meiner Anwedungen .. schon allein wegen dem OTA ...

Servus
Wurschtel
Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

Mein Hauptkritikpunkt ist die langsame IDE und schlechte Bibliotheksverwaltung.
Dass er manchmal aussteigt habe ich schon öfters gehört. Für ernste Anwendungen würde ich das Ding niemals einsetzen.

Vielleich probiere ich nochmal Mictopython, ansonsten suche ich eine Alternatuve.
ch_ris
Beiträge: 3041
Registriert: Mo 30. Nov 2015, 10:08

Re: Der ESP32-Faden

Beitrag von ch_ris »

Sloeber ist eine Eclipse distro für Arduino. bzw. avr. aber wohl auch esp.
Hier wird die toolchain fertig eingerichtet, im gegensatz zu eclipse+plugins+basteln.
ich finds ganz gut, kannte eclipse aber auch schon vorher.
musste ausprobieren obs dir behagt.
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der ESP32-Faden

Beitrag von Heaterman »

Kuddel hat geschrieben: Mi 4. Nov 2020, 07:38 Mein Hauptkritikpunkt ist die langsame IDE und schlechte Bibliotheksverwaltung.
Dass er manchmal aussteigt habe ich schon öfters gehört. Für ernste Anwendungen würde ich das Ding niemals einsetzen.

Vielleich probiere ich nochmal Mictopython, ansonsten suche ich eine Alternatuve.
Man darf die IDE nicht mit allem aufblasen, was es gibt. Lieber etwas schlanker nur mit den Boards, die man tatsächlich benutzt, und die Examples kann man auch rauswerfen. Dann auch nur Bibliotheken nutzen, die einigermaßen koscher und nicht aus exotischen Ecken gekramt sind (ich hab da meine Erfahrungen mit LED- und Displaytreibern gemacht). Und Bibliotheken kann man für den konkreten Fall auch selber abspecken und da alles rauswerfen, was man nicht braucht. Gutes Beispiel sind die riesigen Displaytreiber-Libraries, die sämtliche Versionen enthalten, von denen man ja nur eine konkret braucht. Und da sind dann auch noch zig Grafikbeispiele drin, die man auch meist nicht benötigt.

Micropython ist tatsächlich eine Alternative. Ich hab da mal mit dem BBC micro:bit angefangen und auch schon versuchshalber einen 8266 an einem BME280 nach Vorlage aus Random Nerd Tutorials bespaßt. Geht, ist stabil und wurde sogar in unserem Journal für eine Veröffentlichung für gut befunden.
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Walter Steinchen hat geschrieben: Di 3. Nov 2020, 23:42 Einen Kritikunkt habe Ich, das ist die Langzeitstabilität .. so etwa nach 14 Tagen bleiben die Module gern mal hängen, waum weiss Ich nicht.
Das ist ein Fehler im Code der Wifi-Lib.
Der ist seit Jahren bekannt. Keine Ahnung warum die Chinesen den nicht schon gefixt haben. Den Patch kann ich am WE posten.

Grüße Jan
Benutzeravatar
AlexVR6
Beiträge: 539
Registriert: Sa 6. Dez 2014, 14:35
Wohnort: Angelroda

Re: Der ESP32-Faden

Beitrag von AlexVR6 »

Gut zu wissen, jetzt weiß ich auch warum mein ESP32 alle 2 Wochen den Dienst verweigert...
Jannyboy hat geschrieben: Mi 4. Nov 2020, 12:24 Den Patch kann ich am WE posten.
Ich bitte darum...

mfg Alex
Zuletzt geändert von AlexVR6 am Mi 4. Nov 2020, 13:38, insgesamt 2-mal geändert.
Walter Steinchen
Beiträge: 12
Registriert: Mo 2. Sep 2013, 22:37

Re: Der ESP32-Faden

Beitrag von Walter Steinchen »

Jo, bitte!
Walter Steinchen
Beiträge: 12
Registriert: Mo 2. Sep 2013, 22:37

Re: Der ESP32-Faden

Beitrag von Walter Steinchen »

Kuddel hat geschrieben: Mi 4. Nov 2020, 07:38 Mein Hauptkritikpunkt ist die langsame IDE und schlechte Bibliotheksverwaltung.
Dass er manchmal aussteigt habe ich schon öfters gehört. Für ernste Anwendungen würde ich das Ding niemals einsetzen.

Vielleich probiere ich nochmal Mictopython, ansonsten suche ich eine Alternatuve.
Also VSMicro (als Erweiterung für VisualStudio) ist alles andere als langsam .. der Editor ist der von VisualStudio... und der hat schon sehr viele wirklich coole Eigenschaften

>> Dass er manchmal aussteigt habe ich schon öfters gehört. Für ernste Anwendungen würde ich das Ding niemals einsetzen.

Ich mach mittlerweile alles mit dem Teil .. habe euren PodCast bzgl. der MC's die Ihr verbaut gelauscht und gedacht Ich bin 10 Jahre zurück ;-)

Alles was Ich baue hat ein IP Interface ..es muss sich ja meist in irgendein grösseres Konzept einbinden lassen und da sind REST Schnittstellen einfach Unschlagbar.. Und an einen Arduino oder dergleichen erstmal Anfangen einen WLAN oder Ethernet Chip dranzutüteln ?

Das war einmal .. ;-)

Servus
Wurschtel
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

AlexVR6 hat geschrieben: Mi 4. Nov 2020, 13:36 Gut zu wissen, jetzt weiß ich auch warum mein ESP32 alle 2 Wochen den Dienst verweigert...
Jannyboy hat geschrieben: Mi 4. Nov 2020, 12:24 Den Patch kann ich am WE posten.
Ich bitte darum...

mfg Alex
Hallo,

hier ist wie versprochen der Patch.
Der muss unter /home/$USER/Arduino/hardware/eps32 eingespielt werden.
Unter Windows muss der Path entsprechend angepasst werden, nach dem ob die ESP32-Extention automatisch oder manuell installiert wurde.

Code: Alles auswählen

diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp
index 05458a26..06ea8517 100644
--- a/libraries/WiFi/src/WiFiGeneric.cpp
+++ b/libraries/WiFi/src/WiFiGeneric.cpp
@@ -574,7 +574,7 @@ bool WiFiGenericClass::mode(wifi_mode_t m)
  */
 wifi_mode_t WiFiGenericClass::getMode()
 {
-    if(!lowLevelInitDone){
+    if(!lowLevelInitDone || !_esp_wifi_started){
         return WIFI_MODE_NULL;
     }
     wifi_mode_t mode;
Bei einem Abbruch/Störung der Wifi-Verbindung gibt es einen undefinierten Zustand der einen Reconnect bzw. das weitere Ausführen des Programms unmöglich macht.
Meine Commit-Hash ist kein offizieller, da nur bei mir lokal der Patch ist.

Edit:
https://github.com/espressif/arduino-es ... 4e35c9ebb1
Ich sehe gerade espressif hat den Patch am 30.09.2020 in das aktuelle master-repo 1.0.5-rc1 mit aufgenommen, geprüft habe ich das noch nicht.
Vielleicht kann das einer mal bestätigen. Ich verwende leider noch eine ältere Codebasis, da ich noch viel mehr am Code angepasst habe.

Grüße Jan
Dateianhänge
0001-Wifi_Status_bug.patch.txt
(451 Bytes) 40-mal heruntergeladen
Benutzeravatar
Lukas_P
Beiträge: 1709
Registriert: Mo 12. Aug 2013, 21:21

Re: Der ESP32-Faden

Beitrag von Lukas_P »

Mal ne Fraage:

Wenn ich meinen ESP8266 als Webserver verwende - gibt es dann eine Möglichkeit dem eine "url" zu geben ? Also übers lokale Netzwerk aufrufen über die IP ist klar, aber kann ich das auch irgendie "elegant" machen (ala localhost für 10.0.0.1 oder fritz.box für die fritzboxbesitzer) ... bzw. was ist das zauberwort dafür ? dns ? :oops:
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Lukas_P hat geschrieben: Mi 11. Nov 2020, 18:44 Mal ne Fraage:

Wenn ich meinen ESP8266 als Webserver verwende - gibt es dann eine Möglichkeit dem eine "url" zu geben ? Also übers lokale Netzwerk aufrufen über die IP ist klar, aber kann ich das auch irgendie "elegant" machen (ala localhost für 10.0.0.1 oder fritz.box für die fritzboxbesitzer) ... bzw. was ist das zauberwort dafür ? dns ? :oops:
DNS heißt das Zauberwort.
Guck Dir mal das Example vom WLAN Captive Portal an. Da müsstest du nur das Sternchen gegen deinen DNS-Name ersetzen.

Grüße Jan
traeu
Beiträge: 27
Registriert: Mi 24. Jun 2020, 01:03

Re: Der ESP32-Faden

Beitrag von traeu »

Lukas_P hat geschrieben: Mi 11. Nov 2020, 18:44 Mal ne Fraage:

Wenn ich meinen ESP8266 als Webserver verwende - gibt es dann eine Möglichkeit dem eine "url" zu geben ? Also übers lokale Netzwerk aufrufen über die IP ist klar, aber kann ich das auch irgendie "elegant" machen (ala localhost für 10.0.0.1 oder fritz.box für die fritzboxbesitzer) ... bzw. was ist das zauberwort dafür ? dns ? :oops:
localhost funktioniert auf jedem Rechner, weil das lokal in der Hosts-Datei hinterlegt ist. Wenn du den Pfad der Host-Datei für dein Betriebssystem ergoogelst und einen Blick reinwirfst, ist die Logik sofort klar. Auf diese Weise könntest du auch einen beliebigen Eintrag für den ESP8266 anlegen, funktioniert dann halt nur auf dem Gerät, auf dem die Host-Datei geändert wurde. Und kann manchmal für große Verwirrung sorgen, wenn man das mal nicht mehr auf dem Schirm hat...

Die Variante, die das WLAN Captive Portal-Beispielprojekt nutzt, dürfte MDNS sein. Dabei darf sich ein Gerät einen eigenen Namen, auf ".local" endend, aussuchen. Dein Computer schickt DNS-Anfragen, die auf .local enden, an alle Gerät im Heimnetz und der ESP sollte antworten. MDNS wird eigentlich von jedem Gerät unterstützt, bei mir hat es aber leider aus unerfindlichen Gründen nicht geklappt, als ich es das letzte Mal getestet habe.

Am saubersten wäre es, DNS im eigentlichen Sinne zu nutzen. Also dort einen Eintrag für den ESP zu hinterlegen, wo eh schon die DNS-Anfragen aller Geräte im Heimnetz landen, das wird zu 99% dein Router sein. Bei Fritzboxen geht es relativ leicht, es reicht, das Gerät bei der Heimnetz-Übersicht umzubenennen, zB in ESP. Dann ist das Teil auch unter "esp" oder unter "esp.fritz.box" erreichbar. Ob andere Router vergleichbare Funktionen haben, weiß ich leider nicht, sollte sich aber herausfinden lassen!
Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

Hallo zusammen,

ich spiele gerade mit meinem inzwischen vierten ESP32 rum, diesmal mit einem der auch die I2C Schnittstelle in Funktion hat und auch auf Anhieb funktioniert.
Allerdings ist mir bei allen ESP32 aufgefallen, dass ich die Webseite auf dem Rechner wunderbar schnell aufrufen kann, auf meinem Android-Handy jedoch nur sehr schwer, oft bekomme ich die Fehlermeldung, dass der ESP nicht erreichbar sein. Mir scheint ja auch, dass immer nur ein Gerät Zugriff drauf haben kann, was ich mir auch nicht so recht erklären kann.

Hat jemand eine Erklärung dafür? Oder ist das einfach Zufall?

Danke und Gruß
Kuddel
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Habe ich hier schon mal geschrieben.
Jannyboy hat geschrieben: Mo 2. Nov 2020, 12:35 PS. AsyncWebServer ist wichtig das nicht alle Browser die Daten sequenziell runterladen. Chrome ist da ein Sonderfall. Es will bis zu 8 Dateien parallel runterladen.
Der Normale WebServer kann jedoch nur eine ausliefern und verwirft die anderen 7. Firefox tut dieses auch, jedoch werden alle fehlgeschlagenen Dateien anschließend noch einmal probiert sequenziell herunterzuladen.
Jo Das Problem ist bekannt, dass Problem ist Chrome bzw. der (Very) Simple Webserver des ESPs je nach dem wie man es nimmt.
Der kann nur eine Socket-Verbindung gleichzeitig, jedoch versucht Chrome die Web-Site mit 4-8 Sockets parallel runterzuladen.
Firefox tut dieses auch, jedoch versucht es nach einem Fehler beim Laden der Seite diese noch einmal sequenziell über ein Socket zu laden.
Das funktioniert dann meistens auch.

Baue dein Programm auf asyncWebserver um und es wird wie gewünscht funktionieren.
https://github.com/me-no-dev/ESPAsyncWebServer
Die Lib benötigt noch weitere Libs unter anderem asyncTcp, etc.

Grüße Jan
Benutzeravatar
Kuddel
Beiträge: 5103
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Der ESP32-Faden

Beitrag von Kuddel »

Danke für die Info. Warum es passiert, habe ich jetzt verstanden.
Was ich dagegen machen kann, klingt aber sehr kompliziert, also, zumindest für mich. Das muss ich mir mal in Ruhe angucken.
Meine Idee wäre auch noch, die ganze Webseite regelmäßig auf einen kleinen Server kopieren und mit einer zusätzlich Webseite versehen. So kann man ohne das leidige IP-Adressengetippe am Handy alle ESPs in der Stube einfach anklicken.
Gruß
Kuddel
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der ESP32-Faden

Beitrag von Profipruckel »

Ich habe mal den Fehler begangen, mir von Heise das ESP32-Sonderheft zu kaufen.
Ganz nett, aber zuerst einmal fehlt eine Beschreibung, wie man das Ding dazu bringt, aus der Arduino-IDE einen Softwareupload zu akzeptieren. Das im Heft beschriebene BASIC ist nicht erreichbar, weil die Steine bereits geflasht sind.

Es passierte genau das. was ich mir ersparen wollte: Eine Internetrecherche.
Letztendlich habe ich mich mit dem Vertrieb gestritten und eine gehörige Rückerstattung bekommen. alles gut.

Hätte ich mit einem ESP vom Ali günstiger haben können, da habe ich baugleiche Boards um 4 Euro nachgekauft :-(

Falls jemand lesen mag, schadet zumindest nicht, ich habe es bei https://de.downmagaz.net/digital_magazi ... -2019.html gefunden.

Mal geholt und kopiert, da geht der Download etwas fixer und ohne CaptchaDreck:
https://1fichier.com/?cu5sai2xyhut4x2y1qpd
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

In dem Zusammenhang bin ich auf das hier gestoßen: https://github.com/me-no-dev/ESPAsyncWebServer
Unter den Beispielen ist eines, das sich asyncFSBrowser nennt, welches (scheinbar) irgendeine Webseite ausliefern soll. Dabei sind einige Dateien mit HTML, CSS und JS-Kruscht. Mir ist nur überhaupt nicht klar, wie das gehen soll. Ich habs für nen NodeMCU compiliert, aber der hat ja (nativ) kein Dateisystem. Ich finde aber auch nichts, was GENAU dieses Beispiel da macht. Kann mir da mal jemand auf die Sprünge helfen?
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Guckst du hier:
https://randomnerdtutorials.com/install ... duino-ide/

Im Prinzip erstellst einen Ordner data in deinem Sketch und das Plugin generiert daraus das Filesystem und läd es anschließend hoch. Dein Programm braucht nur noch das Dateisystem öffnen und dann kann man auf alle Dateien zugreifen.

Grüße Jan

Edit meint:
Es gibt 2 Dateisysteme und 2 Plugins einmal SPIFFS und LittleFS. Beim Esp32 ist letzteres Standard.
Viele Beispiele funktionieren auch mit dem jeweiligen anderen... wenn man die Header und die Klassenobjekte tauscht.
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

OK, soweit klar. Ich solte dazu sagen, das ich gerade mit nem NodeMCU unterwegs bin. LittleFS zickt aber tierisch rum, oder eher das Upload-Tool für die Arduino-Ide. Das glänzt hartnäckig durch die Meldung "mklittefs not found". Soweit ich da durchsteige fehlt irgendein Executable, aber wo zum ***FCK*** kriege ich das her? Gibt wohl noch mehr Leute mit dem Problem, aber ganz ehrlich: kann mir da mal jemand auf die Sprünge helfen?

Zum Beispiel hier: https://www.arduinoforum.de/arduino-Thr ... -exe-nicht. Der Mann muss das ja irgendwo hergezaubert haben... Alles sehr intransparent...
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Also das Problem. Ja dass ist Arduino IDE Version 1.8.x spezifisch.
Bei der IDE wurden die Target-Ordner umgestellt, das wurde wohl immer noch nicht in dem Plugin mitgezogen seit 2017.
Die Exe fehlt nicht, die liegt für diese Version nur am falschen Ort.
Wo die genau hin muss kann ich dir nicht mehr sagen,
dass Wissen wurde vor 2 Monaten begraben,
als ich meinen letzten PC auf Linux umgestellt habe.
Du kannst dir via sysinternals mit den ProcessMonitor angucken auf welchen Pfad die IDE versucht aufzurufen und die Exe in das Verzeichnis kopieren.
So hatte ich das damals gelöst. Dann solle das ohne Probleme laufen.

Alternativ kann man auch die Sourcen von dem Plug-in ziehen und den Pfad dort modifizierten.

Edit: Noch was
Bevor du das FS hochladen kannst musst du den SerialMonitor schließen. :mrgreen:

Grüße Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Das ist ja das bekloppte....es gibt hier keine Datei namens mklittlefs.exe oder sonstwas. Auf der lokalen Platte ist diese Datei nicht vorhanden. Woher soll die kommen?
LIegt der Kram in der Boardverwaltung? Gerade mal ein Update gemacht, auch die IDE ist auf letztem Stand *kratzamkopf*
Edit: Boardverwaltung, nach dem Update lag das Scheisserchen da drin...
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Noch eine Verständnisfrage... Dateien hochladen und dann Sketch kompilieren und hinterherschieben? Beiben die Dateien erhalten?
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Finger hat geschrieben: So 31. Jan 2021, 22:33 Noch eine Verständnisfrage... Dateien hochladen und dann Sketch kompilieren und hinterherschieben? Beiben die Dateien erhalten?
Jo solange du keinen Mass-erase anstößt oder du das Partitions-Schema nicht änders, bleiben Programm und Filesystem erhalten.
Die können dann unabhängig von einander programmiert und ausgetauscht werden.


Grüße
Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Ich hab mal auf der Basis o.g. Zeitschrift und eigenem Gefummel mal auf nem NodeMCU was zusammengestoppelt. Liefert jetzt eine Webseite mit dem Zeug für canvas-Gauges aus (siehe o.g. Heft, da drin ist ein Beispiel, Kapitel WLAN), konkret also ein Zeigerinstrument, welches einen Wert anzeigt. Wie zum Geier krieg ich das denn jetzt hin, das das laufend aktualisiert wird, der Zeiger sich also bewegt ohne das ich die Seite neu laden muss?
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Radial Gauge und Ajax bzw. jquery sind deine Freunde.

In Prinzip eine Gauge erstellen und via jquery die Werte nachladen. Der Webserver muss dazu eine REST-API bereitstellen. Und die Fähigkeit besitzen Dateien auszuliefern. Klingt alles komplizierter als es ist. Beides kann asyncWebserver gleichzeitig.

Sieht dann so aus:
https://fingers-welt.de/phpBB/viewtopic ... ot#p334388

Hier noch ein paar links.

https://canvas-gauges.com/docs/2.0.0/cl ... Gauge.html

https://jquery.com/

Grüße Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

OK, ich hab ein wenig quer gelesen zum Thema Ajax und jquery, aber ich bin noch ein gutes Stück weg davon, selber funktionierenden Code in der Hinsicht zu schreiben. Ich machs mal konkret. Das hier ist die Index.html, ausgeliefert zusammen mit dem Javascript-Schnipsel vom ESP8266:

Code: Alles auswählen

<!doctype html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Gewächshaus</title>
    <script src="gauge.min.js"></script>
</head>
<body style="background: #222">


<hr>
<canvas data-type="radial-gauge"
    data-width="500"
    data-height="500"
    data-units="°C"
    data-title="Gewächshaus"
    data-min-value="-50"
    data-max-value="50"
    data-major-ticks="[-50,-40,-30,-20,-10,0,10,20,30,40,50]"
    data-minor-ticks="2"
    data-stroke-ticks="true"
    data-highlights='[ {"from": -50, "to": 0, "color": "rgba(0,0, 255, .3)"},
        {"from": 0, "to": 50, "color": "rgba(255, 0, 0, .3)"} ]'
    data-ticks-angle="225"
    data-start-angle="67.5"
    data-color-major-ticks="#ddd"
    data-color-minor-ticks="#ddd"
    data-color-title="#eee"
    data-color-units="#ccc"
    data-color-numbers="#eee"
    data-color-plate="#222"
    data-border-shadow-width="0"
    data-borders="true"
    data-needle-type="arrow"
    data-needle-width="2"
    data-needle-circle-size="7"
    data-needle-circle-outer="true"
    data-needle-circle-inner="false"
    data-animation-duration="1500"
    data-animation-rule="linear"
    data-color-border-outer="#333"
    data-color-border-outer-end="#111"
    data-color-border-middle="#222"
    data-color-border-middle-end="#111"
    data-color-border-inner="#111"
    data-color-border-inner-end="#333"
    data-color-needle-shadow-down="#333"
    data-color-needle-circle-outer="#333"
    data-color-needle-circle-outer-end="#111"
    data-color-needle-circle-inner="#111"
    data-color-needle-circle-inner-end="#222"
    data-value-box-border-radius="0"
    data-color-value-box-rect="#222"
    data-color-value-box-rect-end="#333"
	data-value='%TEMPERATURE%'
></canvas>

</body>
</html>
Die Zeile data-value='%TEMPERATURE%' macht mit die Schnittstelle zu meinem Sketch, im wesentlichen ein Beispiel aus dem ESPAsyncWebServer

Code: Alles auswählen

#include <ArduinoOTA.h>
#ifdef ESP32
#include <FS.h>
#include <SPIFFS.h>
#include <ESPmDNS.h>
#include <WiFi.h>
#include <AsyncTCP.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESP8266mDNS.h>
#endif
#include <ESPAsyncWebServer.h>
#include <SPIFFSEditor.h>

float Temp = 0;
unsigned long Zeit = 0;

// SKETCH BEGIN
AsyncWebServer server(80);
AsyncWebSocket ws("/ws");
AsyncEventSource events("/events");

void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
  if(type == WS_EVT_CONNECT){
    Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
    client->printf("Hello Client %u :)", client->id());
    client->ping();
  } else if(type == WS_EVT_DISCONNECT){
    Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id());
  } else if(type == WS_EVT_ERROR){
    Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data);
  } else if(type == WS_EVT_PONG){
    Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:"");
  } else if(type == WS_EVT_DATA){
    AwsFrameInfo * info = (AwsFrameInfo*)arg;
    String msg = "";
    if(info->final && info->index == 0 && info->len == len){
      //the whole message is in a single frame and we got all of it's data
      Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len);

      if(info->opcode == WS_TEXT){
        for(size_t i=0; i < info->len; i++) {
          msg += (char) data[i];
        }
      } else {
        char buff[3];
        for(size_t i=0; i < info->len; i++) {
          sprintf(buff, "%02x ", (uint8_t) data[i]);
          msg += buff ;
        }
      }
      Serial.printf("%s\n",msg.c_str());

      if(info->opcode == WS_TEXT)
        client->text("I got your text message");
      else
        client->binary("I got your binary message");
    } else {
      //message is comprised of multiple frames or the frame is split into multiple packets
      if(info->index == 0){
        if(info->num == 0)
          Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
        Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len);
      }

      Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len);

      if(info->opcode == WS_TEXT){
        for(size_t i=0; i < len; i++) {
          msg += (char) data[i];
        }
      } else {
        char buff[3];
        for(size_t i=0; i < len; i++) {
          sprintf(buff, "%02x ", (uint8_t) data[i]);
          msg += buff ;
        }
      }
      Serial.printf("%s\n",msg.c_str());

      if((info->index + len) == info->len){
        Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len);
        if(info->final){
          Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
          if(info->message_opcode == WS_TEXT)
            client->text("I got your text message");
          else
            client->binary("I got your binary message");
        }
      }
    }
  }
}


const char* ssid = "xyz";
const char* password = "Jaja";
const char * hostName = "esp-async";
const char* http_username = "admin";
const char* http_password = "admin";

void setup(){
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(hostName);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.printf("STA: Failed!\n");
    WiFi.disconnect(false);
    delay(1000);
    WiFi.begin(ssid, password);
  }

  //Send OTA events to the browser
  ArduinoOTA.onStart([]() { events.send("Update Start", "ota"); });
  ArduinoOTA.onEnd([]() { events.send("Update End", "ota"); });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    char p[32];
    sprintf(p, "Progress: %u%%\n", (progress/(total/100)));
    events.send(p, "ota");
  });
  ArduinoOTA.onError([](ota_error_t error) {
    if(error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota");
    else if(error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota");
    else if(error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota");
    else if(error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota");
    else if(error == OTA_END_ERROR) events.send("End Failed", "ota");
  });
  ArduinoOTA.setHostname(hostName);
  ArduinoOTA.begin();

  MDNS.addService("http","tcp",80);

  SPIFFS.begin();

  ws.onEvent(onWsEvent);
  server.addHandler(&ws);

  events.onConnect([](AsyncEventSourceClient *client){
    client->send("hello!",NULL,millis(),1000);
  });
  server.addHandler(&events);

#ifdef ESP32
  server.addHandler(new SPIFFSEditor(SPIFFS, http_username,http_password));
#elif defined(ESP8266)
  server.addHandler(new SPIFFSEditor(http_username,http_password));
#endif
  /*
  server.on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/plain", String(ESP.getFreeHeap()));
  });
*/
/*
  server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");

  server.onNotFound([](AsyncWebServerRequest *request){
    Serial.printf("NOT_FOUND: ");
    if(request->method() == HTTP_GET)
      Serial.printf("GET");
    else if(request->method() == HTTP_POST)
      Serial.printf("POST");
    else if(request->method() == HTTP_DELETE)
      Serial.printf("DELETE");
    else if(request->method() == HTTP_PUT)
      Serial.printf("PUT");
    else if(request->method() == HTTP_PATCH)
      Serial.printf("PATCH");
    else if(request->method() == HTTP_HEAD)
      Serial.printf("HEAD");
    else if(request->method() == HTTP_OPTIONS)
      Serial.printf("OPTIONS");
    else
      Serial.printf("UNKNOWN");
    Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());

    if(request->contentLength()){
      Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
      Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
    }

    int headers = request->headers();
    int i;
    for(i=0;i<headers;i++){
      AsyncWebHeader* h = request->getHeader(i);
      Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
    }

    int params = request->params();
    for(i=0;i<params;i++){
      AsyncWebParameter* p = request->getParam(i);
      if(p->isFile()){
        Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
      } else if(p->isPost()){
        Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
      } else {
        Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
      }
    }

    request->send(404);
  });
  server.onFileUpload([](AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final){
    if(!index)
      Serial.printf("UploadStart: %s\n", filename.c_str());
    Serial.printf("%s", (const char*)data);
    if(final)
      Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index+len);
  });
  server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
    if(!index)
      Serial.printf("BodyStart: %u\n", total);
    Serial.printf("%s", (const char*)data);
    if(index + len == total)
      Serial.printf("BodyEnd: %u\n", total);
  });
*/
 server.on("/gauge.min.js", HTTP_GET, [](AsyncWebServerRequest* request) {
    request->send(SPIFFS, "/gauge.min.js");
  });
 
  server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) {
    request->send(SPIFFS, "/index.html", String(), false, replaceVariable);
  });
  
  server.begin();

  Zeit = millis ();

}

void loop(){
  ArduinoOTA.handle();
  ws.cleanupClients();

 #define TIMEOUT  200
 
 if ((Zeit + TIMEOUT) < millis ())
  {
    Zeit = millis ();
    Temp += 1;
    if (Temp > 50) Temp = -50;
  }
 
}


String replaceVariable(const String& var) {
    if (var == "TEMPERATURE") return String(Temp, 2);
  return String(); }
Die letzten drei Zeilen übermitteln also einen Wert, der in die HTML-Datei eingebaut wird. Wenn ich das richtig verstanden habe, ist es mit Ajax möglch, nur diese Werte zur Laufzeit auszutauschen. Soweit so gut, aber mir fehlt da ein sinnvolles Beispiel, so das ich nicht bei Null anfangen muss, insbesondere bei JS, da kenn ich nix von....
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Okay ich stelle hier mein Proof-of-Concept meiner Produktiv-Firmware zur Verfügung.
Die ist nicht super schön und für den ESP8266 funktioniert aber und enthält alles was man wissen muss.
Bitte noch die Libs auf asyncWebServer tauschen.

Da kannst du dir das Dashboard an gucken, dass musste genau das tun, was du als Beispiel erwartest.
Mit jQuery ist Ajax wirklich nur noch eine Fleißaufgabe es umzusetzen. In der ersten Version vor x Jahren hatte ich das noch in nativ JS geschrieben.

Grüße Jan
Dateianhänge
TestWebServer.zip
(204.7 KiB) 38-mal heruntergeladen
Benutzeravatar
Finger
Administrator
Beiträge: 7465
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Dank dir, ich werde mir das mal reindrehen!
IPv6
Beiträge: 2210
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Gestern ist mir die ESP8266Audio Bibliothek (https://github.com/earlephilhower/ESP8266Audio) über den Weg gelaufen. Dort gibt es das Beispiel "WebRadio" (https://github.com/earlephilhower/ESP82 ... s/WebRadio), was sehr einfach MP3 Streams abspielen kann ohne einen externen Decoder zu benutzen. Stream-URL ist bequem per Webinterface einstellbar.
Das wäre eine tolle Sachen mit einem winzigen Class-D Verstärker und einem kleinen Solarpanel. Wenn Sonne auf dem Balkon, dann kostenlose Musik!

Also gut, ESP8266 liegt noch rum, ebenso ein passender I2S DAC (PCM5102). Schnell zusammengelötet, Programm drauf und läuft mal grundsätzlich. Hängt sich aber ständig auf und spielt nicht unterbrechungsfrei. Ist der ESP8266 wohl etwas überfordert.
Das nackte Beispiel ohne Webservergedöns namens "StreamMP3FromHTTP" (https://github.com/earlephilhower/ESP82 ... P3FromHTTP) läuft schon flüssiger, aber immernoch nicht brauchbar.

Da die Bibliothek auch mit dem ESP32 funktionieren soll habe ich mir heute mal in der Verwandschaft so ein Teil besorgt. Hat ja deutlich mehr Dampf als der ESP8266, wäre ein Versuch wert ob der das besser auf die Reihe bekommt.
Nur gibt es hier das Problem, dass der Webserver nichts zu machen scheint. Firefox bringt nur die Meldung, dass der Server die Verbindung abgebrochen hat. Der ESP32 gibt ein paar Statusmeldungen über die serielle Schnittstelle aus, da sieht man dann, dass bei jedem Versuch die IP Adresse im Browser anzusurfen ein paar Daten übertragen werden, sich das mehrfach wiederholt und dann Ruhe ist. Sobald Ruhe ist zeigt der Browser eben an, dass die Verbdinung abgebrochen wurde.

Mich verwundert nun, dass zumindest mal die Webservergeschichte auf dem ESP8266 problemlos lief, auf dem ESP32 aber überhaupt nicht.
Sind da jemand Stolperfallen bekannt, die dazu führen, dass der selbe Code auf einem ESP8266 läuft aber auf dem ESP32 nicht? Vermutlich unterscheiden sich da schon so einige Details im Arduinoframework der beiden Controllertypen.
Jemand eine Idee, was das Problem sein könnte? Es gibt im Netz einige Berichte über Probleme mit der Webserverimplementierung auf dem ESP32, die aber angeblich in neuer Versionen des Frameworks behoben sein sollen. Bei mir geht weder Version 2.0 noch 1.0.5.
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

AsyncWebserver ist die Lösung.
Problem Ursache siehe weiter oben.

Der Hauptunterschied ist das der ESP8266 ist Single-Core und der ESP32 ist Dualcore. Da funktioniert vieles anders.

VG Jan
IPv6
Beiträge: 2210
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Hallo Jan!

Vielen Dank, das Problem ist nunhalbwegs klar.
Aber die Lösung noch nicht ganz, bzw. viel eher die Umsetzung der Lösung.
Kannst du mir auf die Sprünge helfen was ich genau anpassen muss, damit es funktionieren könnte?
Oder muss dafür der ganze Webseitenteil neu geschrieben werden? Das wäre dann vermutlich doch etwas über meinen Fähigkeiten.
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Ich würde die Webserver Lib einfach mal stumpf austauschen und gucken welche Fehler der Compiler rauswirft. Viele waren das bei meinen Anwendungsfall nicht.

Grüße Jan
IPv6
Beiträge: 2210
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Da hört leider mein Verständnis schon auf. Ich sehe nicht, wo eine Webserver Lib eingebunden ist, die sich mit der asynchronen Variante austauschen lassen würde.
Sind das möglicherweise Funktionen, die in der ESP32 Bibliothek schon enthalten sind?
Vielleicht kannst du mal einen Blick in den von mir verlinkten Code werfen und noch einen Hinweis geben, in welchen Zeilen sind das genau abspielt?
Grundsätzlich ist das Programm ja nicht allzu riesig, aber wenn man gar nicht erst weiß wo man genauer hinschauen muss ist das doch ein recht aussichtsloses Unterfangen...:D

Edit:
Moment mal, da wurde sich doch extra ein eigener Webserver geschrieben und mit eingebunden, der gemäß Kommentar extra wenig RAM braucht.
Ich nehme an, dass es in dem Fall nicht so einfach ist das durch etwas Asynchrones auszutauschen?
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Ich habe mir mal deine SWLib angesehen.
Da wirkte wohl selbst Hand anlegen müssen oder alternativ hast du auch den Browser kastrieren... Parallel Conntections auf 1 stellen... geht zumindest bei FF.

Grüße Jan
Benutzeravatar
Toni
Beiträge: 2525
Registriert: Di 13. Aug 2013, 18:24

Re: Der ESP32-Faden

Beitrag von Toni »

ich habe eine ESP32-Cam Modul mit Tasmota drauf.

Wenn die Kamera aktiv ist, kackt das Ding nach ein paar Sekunden ab: dann vergisst Tasmota alle Einstellungen und meldet sich wieder jungfräulich mit Tasmota-Wlan. Wenn die Cam aus ist, läuft es stabil.

Ich habe bisher:
- C's 220uF mit 100nF parallel zwischen +5V-Gnd und +3,3V-Gnd gehängt
- alles nachgelötet
- Spannung auf 6V erhöht

keine Änderung. Habe auch keine Module zum quertauschen.

Kennt jemand das Problem?
Bildschirmfoto zu 2021-12-29 22-55-25.jpg
Benutzeravatar
Arndt
Beiträge: 2589
Registriert: Fr 28. Jun 2013, 13:42
Wohnort: einen Schritt über den Abgrund hinaus

Re: Der ESP32-Faden

Beitrag von Arndt »

Ach guck an, noch ein Leidensgenosse!
Das scheint ein generelles Problem bei dem Ding zu sein, ich habe mich zufällig heute den gnzen Tag auch damit herumgeuält...
Bei mir läuft AI-on-the-edge auf dem Ding (Wasseruhr ablesen)
Bild
Quelle: https://github.com/jomjol/AI-on-the-edge-device/wiki
Anleitung https://www.youtube.com/watch?v=mDIJEyElkAU

Aber das Webinterface ist dermaßen unzuverlässig, das ist gruselig...
Zeitweise hatte ich das Mopet dann auch am Labornetzgerät, einen brownout schließe ich daher eigentlich aus.
Ich den Foren ließt man auch immer wieder, dass sich da viele schwer tun und in den käuflich zu erwerbenden Doppelpacks scheint kategorisch auch nur eine zu funktionieren.

@Kuddel, hattest Du nicht auch schon Deine Freude damit?
Benutzeravatar
Hightech
Beiträge: 11466
Registriert: So 11. Aug 2013, 18:37

Re: Der ESP32-Faden

Beitrag von Hightech »

Hängt da mal Strom an den Eingang, das Cameramodul zieht ordentlich.
virtexultra
Beiträge: 132
Registriert: So 9. Dez 2018, 11:30

Re: Der ESP32-Faden

Beitrag von virtexultra »

Um das mit dem Brown Out auszuschließen bzw. um eine bessere Fehlermeldung zu erhalten könnte man die Ausgabe am UART0 des ESPs mithören (U0T). 8N1 115200 ist der Default Wert in dem SDK. Es kann aber sein das die Ausgabe deaktiviert oder eingeschränkt wurde, Widerstand an GPIO15 oder EFuse sind da möglich.
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der ESP32-Faden

Beitrag von Heaterman »

Hightech hat geschrieben: Fr 31. Dez 2021, 01:01 Hängt da mal Strom an den Eingang, das Cameramodul zieht ordentlich.
Das ist auch meine Erfahrung. Man sollte dem ein Netzteil spendieren, das mindestens 200 mA absolut stabil liefert. Und 5 V benutzen statt 3,3 V. Bei 3,3 V hat das Ding das Brown-Out-Problem. Ich hab ein paar dieser Dinger durch. Bei mir laufen die mit dem Standard-Webserver aus der Lib.
Ich hab so ein Ding auch in eine Modellbahn-Lok eingebaut. Ging nur über eine eigene Akkuschaltung, die wirklich stabil liefert und dann über die Fahrspannung gepuffert wird. Alle anderen Tricks mit Elko usw. haben nichts gebracht.

Einziges Problem bisher: Schaltet man den korrespondieren WLAN-AP oder das WLAN generell ab, braucht der ESP einen Neustart, wenn man das WLAN wieder zuschaltet.
Ich hab einen ESPCAM bei einem Bekannten installiert, der überwacht damit temporär sein Garagentor. WLAN des ESP reicht nicht von der Garage bis in die Wohnung, auch nicht mt externer Stabantenne. Er hat aber einen WLAN-AP 20 m daneben in der Laube (hauptsächlich für Computer und Handy im Garten), der nachts abgeschaltet wird. Beim EInschalten des AP zuckt sich der ESP erst mal nicht.
Da er sowieso einen Homematic-2-Kanal-Aktor zum Schalten des AP benutzt, haben wir den zweiten Kanal für das ESP-Netzteil genommen. Er schaltet das ESP-Netzteil ein paar Sekunden nach dem AP ein, dann handeln die Beiden aus und der ESP läuft. Alternative wäre das Schalten des ESP-Reset-Tasters per Fernsteuerung, geht auch, braucht aber einen externen, potentialfreien Relaiskontakt.


Die ESPCAMs im Doppelpack für 15 Euro sind Müll, manchmal auch die, wo der USB-Programmieradapter mitgeliefert wird. Beste Wahl bisher: das Modul von Ai-Thinker.
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Fritzler »

5V statt 3,3V oder gar 6V?
Könnts sein, dass da ein LDO bzw DCDC drauf ist, der da abschmiert?
Son Kamerasensor zieht beim scannen gut Strom und WLAN auch ordentlich pulsweise beim Senden.
Kommen beide Pulse zusammen -> BÄM!

Ich hab sowas hier nicht liegen, daher müsstet ihr mal genauer erklären wie denn die Versorgung aufgebaut ist.
Dabei meine ich nicht nur euer Netzteil zu den Platinen hin, sondern wie auch die Spannungsversorgung auf den Platinen realisiert ist.
Wo bekommt das Cam Modul seinen Säft her?
Antworten