Hallo zusammen, meist schreibe ich zuviel, deshalb hier zunächst in Kurzform: ESP32-C3 als Accesspoint konfiguriert. Alles mit Arduino IDE gebastelt. Die Sketches sind noch sehr einfach und eindimensional, alles mit Hilfe der Anleitungen auf randomnerdtutorial.com gelernt. Android-Handy mit AP verbunden, simple Website mit ein paar Texten und Buttons. Steigt immer wieder aus. Noch weiß ich nicht, ob der ganze ESP ins Stocken gerät oder ob es nur die Verbindung ist. Was gibt es für Konzepte, den AP neu zu starten? Was gibt es für Konzepte, die Verbindung mit dem Handy schneller herzustellen? Mehr Salamischeiben in den nächsten Posts... Viele Grüße Tom.
Ich hatte mich bereits in einem anderen Thread für die grundsätzlichen Techniken interessiert: Beitrag "Peak-Ignitor - Mini 120W Powerbank" Diesen will ich aber nicht weiter kapern. Dort schrieb Vanye, das Verfahren wäre ein "pain in the ass", und ich beginne zu ahnen... Allerdings hat es zunächst ziemlich schön funktioniert. Ja, es ist toll und erschreckend zugleich, wie einfach man sich heutzutage so etwas zusammenschrauben kann, wo man gerade noch keine Ahnunge davon hatte. Es ist ein bißchen so, daß erst beim Dazuschalten eines bestimmeten Verbrauchers (Danfoss 12V-Kühlschrankkompressor mit eigener BLDC-Elektronik) die Sache aussteigt. Kann also auch sein, daß es einfach handfeste Störungen sind, die den kompletten ESP32 zum Absturz bringen. Werde jetzt mal mit der Onboard-LED ein "heartbeat" signal dazufügen, damit ich sehe, ob das Programm weiterläuft. Allerding kann ich mich auch im dem Fall, daß die Sache ins Stocken gerät, immer wieder ins vom ESP32 als AP aufgespannte WLAN einbuchen, nur das Aufrufen der Website geht nicht mehr.
Und ebenfalls in dem bereits genannten Thread Beitrag "Peak-Ignitor - Mini 120W Powerbank" war von "Captive Portal" die Rede, also daß beim Verbinden mit dem AP sofort eine bestimmte Website aufgeht. Das würde mich schwer interessieren. Ist das programmtechnisch aufwendig?
Ich poste jetzt mal den Sketch, ist leider schon etwas vollgeladen. Wenn nötig, kürze ich ihn etwas, so daß nur 1 Kanal bedient wird. Vieles darin wird ja viermal wiederholt. Ich kann nicht sagen, daß ich ihn vollends verstehe. Komisch kommt mir vor, daß nach meinem Verständnis in der loop immer die Verbindung zum Client hergestellt wird, dann wird an einer Stelle der loop gewartet, bis der http-Request vom Client vollständig ist, dann wird verarbeitet und die Verbindung wieder geschlossen. Wie gesagt bin ich blutiger Anfänger, aber mir kommt das komisch vor... Lustigerweise kann man den Code hier nicht reinschreiben, auch wenn man ihn mit code und /code kapselt. Also nur als Datei.
Tom H. schrieb: > Ich kann nicht sagen, daß ich ihn vollends verstehe. Woher stammt der Code wenn nicht von Dir? Vanye R. schrieb: > Damit kommen verschiedene Apps auf dem Handy nicht so recht klar die > gerne im Internet sind und Android wechselt dann gerne zwischendurch mal > wieder zurueck. Ist mir noch nicht so aufgefallen. Ich hatte anfangs das Problem. Mit der Einrichtung des Captive Portals war es (zumindest auf Android) okay. Tom H. schrieb: > Das würde mich schwer interessieren. Ist das programmtechnisch > aufwendig? randomnerdtutorials.com ist immer eine gute Anlaufstelle. Ich empfehle Dir folgende Vorgehensweise. Du richtest Dir erstmal ein Beispielprojekt ein für den Webserver. Ich empfehle ESPAsyncWebserver. Statt HTML aus dem Sketch (PROGMEM) zu senden, kannst Du auch gleich auf das LittleFS Dateisystem zurückgreifen und deine index.html direkt als Datei ablegen. Wenn das soweit läuft kannst Du das Captive Portal da mit einbauen. Ich hab das 1:1 so übernommen. https://en.wikipedia.org/wiki/Captive_portal#Detection Zum Schluss bastelst Du Dein eigentliches Projekt in den Sketch mit rein. Wenn Du es sauber machen willst dann trenne es gleich auf mehrere Dateien auf (idealerweise sogar C/C++ konform mit echten .h Header und .cpp Source Dateien und den korrekten Includes, aber einfache .ino reicht auch für den Anfang) Die Werte stellst Du dann auf dem Webserver als JSON bereit, dann kannst Du das clientseitig mit der HTML in JS auslesen. Dafür empfehle ich ArduinoJson von bblanchon. Das ganze häppchenweise umsetzen, so dass Du auch den Code verstehst den Du schreibst. Bzgl. deines Heartbeats - Du könntest einen Watchdog einrichten der den ESP32-C3 neustartet.
:
Bearbeitet durch User
Ja, mach statische HTML Dateien. Wo ist fast egal. Ich würde sie auch in ein Filesystem legen. Alles ist besser als dieses String gebastel. Und dann über JS fetch die aktuellen Daten (Zustände der Lüfter, Temperaturen usw) abholen. Dann muss nur einmal die Seite ausgeliefert werden und ab dem Zeitpunkt nur noch kleine Datenmengen, nämlich die Prozessdaten.
Der ESP8266 hat im Vergleich nur ca. 5kB Stack. Die sind mit String-Operationen schnell gesprengt. Vielleicht ist das beim ESP32 ähnlich. Ich habe da was von 8kB gelesen. Ansonsten würde ich mal die Stromversorgung mit einem Oszilloskop prüfen. Oft sind Kabel zu dünn, Kontakte zu hochohmig und Spannungsregler zu knapp bemessen. Dann hilft ein Elko mit 220 uF zwischen 3,3V und GND.
:
Bearbeitet durch User
Nemopuk schrieb: > Der ESP8266 hat im Vergleich nur ca. 5kB Stack. Die sind mit > String-Operationen schnell gesprengt. Vielleicht ist das beim ESP32 > ähnlich. Ich habe da was von 8kB gelesen. Wie kommst Du auf diese interessanten Zahlen?
Nemopuk schrieb: > Der ESP8266 hat im Vergleich nur ca. 5kB Stack. Ups, da fehlt was: Er hat im Vergleich zum größeren Heap nur ca. 5kB Stack. Harald K. schrieb: > Wie kommst Du auf diese interessanten Zahlen? Die 5kB habe ich bei einem akuten Problem durch Ausprobieren herausgefunden. Die 8kB nennt Copilot für den ESP32.
:
Bearbeitet durch User
Beitrag #8019433 wurde vom Autor gelöscht.
Das Arduino setup und loop läuft beim ESP32 in einer FreeRTOS Task. Dieser werden 5k Stack zu geordnet. Nemopuk schrieb: > Die sind mit > String-Operationen schnell gesprengt. String Instanzen belegen nur wenig Stack. Die (inneren) Strings landen auf dem Heap.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.