ESP32 (WiFi, OLED)

Über mein Interesse für Funk-Wetterstationen kam ich zu einem ESP32 Microcontroller mit WiFi-Fähigkeiten auf einem kompakten Entwicklerboard von Heltec (WiFi kit 32). Kaufpreis unter 30 Euro incl. dem OLED-Display (0,9″). Abmessung des Boards insgesamt ca. 50mm x 25mm

Das wichtigste auf dem Board ist natürlich der ESP32 mit ca. 500KB RAM, 4MB Flash-Speicher. Dann kommen verschiedene externe Bauteile dazu, der USB-Anschluss, 2 Taster (Reset, Prog), eine LED und das OLED-Mini-Display. Natürlich auch eine winzige Antenne und eben die GPIOs. Das ist deutlich mehr als mein Arduino hatte.

Als erstes bekam das Board von einem Freund seine Pfosten angelötet, dann kam es auf ein kleines Breadboard (Steckbrett) mit ausreichend Kontakten zum bequemen experimentieren. Dort ist es noch heute.

So sieht meine spartanische Experimentierumgebung heute aus: als Unterbau das Breadboard mit seinen vielen Löchern, darauf steckt des “Wifi-Kit” mit seinem Display, darauf links meine 3 Lämpchen und links oben der BME680. Rechts das dicke schwarze Kabel ist der USB-Anschluss, links ist das orange Antennen-Schwänzchen und unten der blaue Draht ist mein Kontaktsensor. Alles in Breadboard-Technik ohne Löten.

Der “nackte” ESP32 hat wohl nur einen besseren Bootloader, alles andere bekommt er von einer passenden Entwicklungsumgebung. Eine ist angelehnt an den Arduino, die andere nennt sich “MicroPython” und ist so eine Art Mini-Betriebssystem mit einem abgespeckten Python-Interpreter und einem Dateisystem auf dem Flash-Speicher, welches man von einer geeigneten Entwicklungsumgebung auf den ESP32 installiert. Als Entwicklungsystem auf dem PC empfiehlt sich Thonny. Ich habe mich für die MicroPython-Umgebung entschieden.

Erkundet habe ich das System mit einem Youtube-Kurs “Der Hobbyelektroniker / ESP32“, der viele gut gemachte Beiträge zum Thema “MicroPython” und “ESP32” anbietet. Zusätzlich gab es eine Doku mit den Python-Codes. Am Anfang bin ich auch brav dem Kurs gefolgt, später habe ich etwas freier gearbeitet.

Mein erstes Projekt dient dazu, mich mit dem ESP32, dem MicroPython und Thonny anzufreunden. “print” und “input” wurden ausprobiert. Dann programmierte ich ein bischen mit dem Timer, der eingebauten LED und dem eingebauten Taster. Blinken tat es schon mal. Ich konnte auch den Taster durch einen “kapazitiven” Draht ersetzen. Danach kamen das OLED-Display und meine vorhandenen Neopixel-Lämpchen hinzu. Das belegte dann schon einige Pins auf dem Breadboard. Die Anfänge einer sich fortschreibenden log-Datei auf dem Flash-Speicher wurden auch realisiert.

Im zweiten Projekt ging es dann um den Umweltsensor “BME680” (Preis ca. 25 Euro), der Temperatur, Feuchtigkeit, Luftdruck und einen “Gütewert der Luft” misst. Das Programm schreibt diese Daten kontinuierlich in eine Datei und zeigt die Daten auch auf dem Display an. Zusätzlich ist auch das Internet via WLAN aktiviert, um von einem Zeitserver die UTC-Zeit zu beziehen. Hier macht dann auch das Festlegen eines Python-Programms als Auto-Start-Programm Sinn. Dann kann man auch ohne PC messen und aufzeichnen. Die Stromversorgung erfolgt über ein USB-Ladegerät, meine Powerbank funktionierte nicht, die schaltet bei so geringen Strömen einfach ab.

Die Daten konnte ich dann zeitversetzt auf den PC übertragen und mit Jupyter / Pandas bequem visualisieren bzw. auswerten.

Im 3. Projekt wollte ich die Daten des BME680 im Web (im lokalen IP-Bereich hinter der Fritz-Box) anzeigen, also einen kleinen Web-Server auf dem ESP32 laufen lassen. Dank der vorhandenen Libraries war das kein Problem.

Allerdings ist das WLAN anscheinend sehr instabil, mit einem Stückchen Draht als Antennenverstärkung funktionierte es meist besser. Manchmal scheitert schon die Verbindung zum Netzwerk, manchmal liefert der Ping extrem unterschiedliche Ergebnisse. Auch unser Fritz-Mesh-WLAN scheint störend.

Das 4. Projekt war nicht so typisch für den ESP32, sondern eher Python allgemein. Ich wollte per API-Zugang die aktuellen Wetterdaten für Haßloch aus dem Web beziehen und dann via ESP32 anzeigen. Dazu habe ich mir bei “OpenWeatherMap.org” ein (kostenloses) Benutzerkonto angelegt. Dann bekam ich einen API-Key, der mich zum Bezug der Daten berechtigt. Nebenbei lernte ich so auch das Datenformat JSON kennen. Und sehe immer, wie warm es aktuell in Haßloch ist ….

Das 5. Projekt erlaubt die Fernsteuerung von LED-Lämpchen auf dem ESP32 von einem beliebigen Browser aus via WLAN. Auf dem ESP32 läuft ein kleiner Web-Server mit Aus- und Eingabemöglichkeiten. Also eher eine allgemeine Web-Anwendung in Python.

Zur Hardwareausrüstung des ESP32 kam noch ein Fotosensor (LDR), der durch einen Spannungsabfall die Helligkeit anzeigt. Dann noch eine rote externe LED und ein “passiver” Buzzer, dem man per PWM-Funktion die Höhe des zu erzeugenden Tons vorgibt. Der einfache Fotosensor wurde mittlerweile durch ein TEMT6000 ersetzt.

Anfang 2023 habe ich das Heltec-Board “WiFi kit 32” durch ein Heltec “LoRa 32” ersetzt. Das hat eine kleine Wendelantenne für das WiFi und erzeugt damit ein deutlich besseres Signal. Der dort verbaute ESP32 S3 hat allerdings eine etwas andere Pinbelegung und deswegen waren einige Änderungen in meinen Python-Programmen nötig.

Die Beschäftigung mit BlueTooth / BLE hat mir nicht viel gebracht. Ich konnte BLE-Geräte in der Umgebung erkennen und konnte via BLE auch gesehen werden. Ein- und Ausschalten eines Lämpchens hat auch funktioniert. Meine Gegenstation war die “nRF Connect”-App von Nordic auf meinem Smartphone.

Mit dem LoRa-Teil habe ich mich noch nicht beschäftigt. Die speziell für LoRa notwendige Antenne ist aber schon im Kit vorhanden.