Wenn man eine größere Anzahl von ESP8266 basierten Sensoren gebaut hat, ist es unter Umständen etwas nervig, individuelle Parameter im Arduino IDE einzutragen und dann jedes Mal die einzelnen Sensoren mit maßgeschneiderter Individual-Software zu bespielen.
Das gilt um so mehr, wenn man zusätzlich MQTT Parameter eintragen muss oder die Dinger in anderen – ggf. im Voraus nicht bekannten – WiFi Netzen einsetzen will. Hat man ein schönes Gehäuse gebastelt oder den Controller sonstwie verbaut, ist es doppelt nervig.
Ich habe mir verschiedene Lösungen angeschaut, den ESP8266 ohne Neu-Programmieren ins Netz zu bringen – von easy bis komplex :
Update Mai 2024: Durch verschiedene andere Projekte habe ich das IDE auf die Version 2 umgestellt und dabei notgedrungenermaßen einige neue Libraries installiert. Das hatte dann zur Folge, dass meine unten stehenden Sketches nicht mehr funktionierten – das heißt nach dem Einstellen der Credentials ist der Sketch genau einmal durchgelaufen und dann nicht mehr. Nach vielem Rumprobieren habe ich das Problem gelöst, indem ich den Connect explizit mit einem WiFi.begin(); gestartet habe. Die Stelle ist in den Sketches farblich hervorgehoben und kommentiert. Jetzt funktioniert auch die neueste Version des WiFiManagers (2.0.17).
Inhalt [Ausblenden]
1 – WiFi Setup mit WPS
Der schon verschiedentlich erwähnte Distributor AZ-Deliveries in Deggendorf gibt sich einige Mühe, die Nutzer seiner Produkte mit Anleitungen und Tipps zu versorgen – herzlichen Dank dafür!
Willst Du nur deine WiFi Anmeldedaten wie PSK und SSID flexibel erfassen, ohne den Sketch neu zu kompilieren, dann hilft dir diese gut gemachte Anleitung weiter.
Über einen angeschlossenen Button wird die WPS Routine gestartet, drückt man dann noch die WPS Taste am Router, werden die Daten automatisch übertragen und in einem besonderen Speicherbereich des Controllers abgelegt.
Leider kann ich damit nur die WiFi Einstellungen vornehmen. Andere Daten müssen nach wie vor programmiert werden. Hat man keinen physischen oder administrativen Zugriff auf den Router, hilft die Anleitung leider nichts!
2 – Konfiguration mit der WiFi Manager Library
Einen großen Schritt weiter geht die geniale WiFi Manager Library, die wir in unser IDE einspielen können.

Sie stellt einen temporären Konfigurations Accesspoint (Captive Portal) mit Webserver, Konfigurationsdialog und WiFi Parameter Handling zur Verfügung. Und nicht nur das. Es lassen sich auch weitere Daten interaktiv eintragen, die im Controller EEPROM hinterlegt werden und sich später programmgesteuert verwenden lassen. Bei mir sind das der MQTT Server, der dazugehörige Username, das MQTT Passwort und die MQTT Topics (Pfade), die ich für die Ablage meiner Messwerte brauche.
Abbildung 1: WiFi Manager Startseite
Abbildung 2: Konfigurationsseite mit Erweiterung für MQTT Parameter.
Zum Starten der Konfiguration gibt es wiederum mehrere Möglichkeiten:
2a – Konfiguration nur, wenn keine Verbindung zum WLAN
Hat man den Controller in eine "fremde Umgebung" gebracht und schaltet den Sensor (oder whatever) ein, kann er sich notgedrungen nicht mit dem bekannten WLAN connecten und startet deshalb den Accesspoint zur Konfiguration. Mit einem Smartfone, Tablet oder PC kann man das temporär aufgespannte Netz suchen – bei mir heißt es "RustiSensor" sonst eigentlich "OnDemandAP". Nach dem Verbinden wird (zumindest bei Apple Endgeräten) automatisch die Konfigurationsseite aufgerufen. Falls nicht, mit dem Browser einfach zu 192.168.4.1 navigieren.
Die Basics findet ihr auf der Github Seite des WiFi Manager Autors: https://github.com/tzapu/WiFiManager. Dort findet sich auch eine Reihe von sehr schönen Anwendungsbeispielen.
Überhaupt auf die Idee gebracht wurde ich von Rui Santos aus Portugal, der eine hervorragende, englischsprachige Site namens randomnerdtutorials.com betreibt und auch viele kostenpflichtigen Tutorials zum Arduino, ESP8266 und ESP32 anbietet. Der eigentliche – kostenlose – Beitrag befindet sich hinter diesem Link.
Von ihm habe ich auch die Code Snippets für die Verwendung von JSON zur Verarbeitung der abgelegten Parameter. Sein Beitrag ist schon etwas älter und verwendet die JSON Bibliothek der Version 5.x.x. Neuer wäre die Version 6.x.x., aber die ist von der Syntax her nicht kompatibel. Ich habe deshalb im Library Manager die höchstverfügbare 5er Version 5.13.5 ausgewählt.
Abbildung 3: Auswahl älterer Library Version
Alternativ könnte man auch den Code auf Bibliotheksversion 6.x.x umschreiben oder ein ganz eigenes Stringhandling im Code einbauen – z.B. durch Zusammenfassen und Wegspeichern der Extradaten in einem langen String bzw. umgekehrt.
Nebenbei bemerkt: das String bzw. Char Array Handling des Arduino C Dialekts ist richtig grottig. Sowas von unkomfortabel. Python ist da wesentlich einfacher.
Ferner habe ich das neuere LittleFS anstatt SPIFFS zum Speichern der Daten im EEPROM verwendet. Die Compilerwarnungen "…deprecated…" haben zu sehr genervt.
Der Sketch
Für diejenigen, die es interessiert, hier noch der von mir – mit Leihgaben – produzierte Code für einen DHT22 Sensor und MQTT auf Basis eines D1 Mini Controllers. Alle Routinen stecken im Setup {} Bereich, da der Sketch nur einmal durchläuft, anschließend den Controller schlafen legt, um nach dem Aufwachen wieder von vorne anzufangen.
Für viele Fälle reicht das. Nachteil ist natürlich, dass man nicht so ohne Weiteres an die MQTT Parameter herankommt, wenn man sie einmal gespeichert hat. Entweder geht man mit dem Microcontroller und dessen Stromversorgung nach draußen, wo es keinen Empfang gibt oder man schaltet das WLAN kurz ab – in beiden Fällen würde dann das so genannte "Captive Portal" aufgerufen. Vorteil dieser Lösung ist, dass man keine zusätzliche Hardware verlöten muss.
2b – Konfiguration mit Button starten
Elegant wäre es, wenn man die Konfiguration per Knopfdruck starten könnte – ganz ähnlich wie bei den professionellen Sensoren à la Shelly. Hierzu liefert der Autor des WiFi Managers ein schönes Beispiel, das ich entsprechend modifiziert habe. Im Original ist die Routine im Loop{} Bereich untergebracht und kann jederzeit mittels Knopfdruck gestartet werden.
Da mein Sensor ja die Loop{} Schleife nicht nutzt und immer nur ein paar Sekunden aktiv ist, habe ich die entsprechenden Kommandos in den Setup{} Bereich gepackt und mit der Buttonabfrage versehen.
Der Button wird an einem freien GPIO Pin des Controllers angeschlossen und zieht beim Drücken den Pin auf Low – also gegen Masse. Ein Fritzing Diagramm dafür findet ihr weiter unten.
Ich habe aus bautechnischen Gründen den Pin D4 bzw GPIO 2 verwendet. Die Platine aus dem letzten D1 Mini Beitrag habe ich entspreched angepasst und einen Drucktaster auf der Rückseite der Trägerplatine zwischen D4 und GND eingelötet.
Abbildung 4: Rückseite mit eingelötetem Button
Die Stromversorgung erfolgt mittels vier AA Akkus, die nominell 4,8 V liefern und somit an den 5V Anschlusspin gelötet werden. Dieser verträgt Spannungen von 3 bis 7V
Der Sketch
Funktioniert schon ganz gut. Ein Nachteil ist allerdings, dass die geänderten Daten nur dann gespeichert werden, wenn man auch die SSID und das WLAN Passwort (PSK) wieder einträgt.
Abbildung 5: Versuchsaufbau auf Breadboard
Abbidung 6: Fritzing Diagramm (Reset Verbindung zwischen D0 und RST – grün – Jumper)
Wenn ihr tiefer einsteigen wollt, kann ich euch das Kapitel über den D1 Mini in Wolles Elektronikkiste nur wärmstens empfehlen!
Wie immer: Fragen oder Kritik sind erwünscht – Kommentarfunktion.
Hi,
wen es interessiert, beim WifiManager liegt ein noch nicht umgesetzter Pull-Request für die ArduinoJSON V 6 rum:
https://github.com/tzapu/WiFiManager/pull/1060/commits/b22ba24283ad3f22f8c8dfb2a52ed0583c0222d7
Da dieses HowTo auf dem Example basiert kann man es recht schnell abändern…
Schönen Gruß
Vielen Dank für die Info. Hoffen wir mal, dass sich jemand erbarmt und das umsetzt.
VG Chris
Hallo
genau das hab ich schon lange gesucht ! Bin 71 Jahre jung und versuche meine grauen Zellen in Schuss zu halten, lerne begierig Alles zum Thema IOT.
Betreibe auch ca 12 ESP8266 Mini D1 und andere boards mit meinem Netzwerk /Mosquitto und Node red .
Ich habe den ersten Scetch, meine Arduino IDE compilieren lassen
und nach Änderung auf die V5.x .Json-version wird bei mir der Code auch fehlerfrei bis auf folgenden
Eintrag übersetzt :
exit status 1
'MQTTClient' does not name a type
Was kann, sollte ich andern ?
Vielen Dank im Vorraus
Martin
Hallo,
ja Programmieren hält die grauen Zellen frisch.
Zu deinem Problem: Könnte es sein, dass du die MQTT Library noch nicht installiert hast? https://github.com/256dpi/arduino-mqtt
Oder über Werkzeuge–>Bibliotheken verwalten–> in Suchfeld rechts oben MQTT eingeben und nachher die Library MQTT by Joel Gaehwiler auswählen.
Viel Glück und weiter viele gelungene Projekte.
Chris