Forum: Mikrocontroller und Digitale Elektronik ESP32-C3 als Accesspoint - wie fehlersicher machen?


von Tom H. (toemchen)


Lesenswert?

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.

von Tom H. (toemchen)


Lesenswert?

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.

von Tom H. (toemchen)


Lesenswert?

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?

von Tom H. (toemchen)


Angehängte Dateien:

Lesenswert?

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.

von Alexander (alecxs)


Lesenswert?

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
von N. M. (mani)


Lesenswert?

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.

von Nemopuk (nemopuk)


Lesenswert?

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
von Harald K. (kirnbichler)


Lesenswert?

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?

von Nemopuk (nemopuk)


Lesenswert?

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.
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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
Noch kein Account? Hier anmelden.