ESP32-Webradio mit 2,8"-TFT (ILI9341), Touch (XPT2046), Wecker, Wetter, Web-Konfiguration und grafischer Oberfläche auf Basis von LVGL 9. Die Firmware meldet sich als v5.0.7 (siehe RADIOVERSION in radiowecker.ino).
| 💀 Issues | 💬 Diskussionen | ❔ Wiki |
|---|
Dieses Repository ist die aktuelle Hauptversion des Radioweckers. Sie basiert auf dem AZ-Delivery-Artikel Internet Radiowecker mit Touchscreen von Gerald Lechner und der weiteren Ausarbeitung für AZ-Touch MOD / ESP32.
Was sich gegenüber den älteren Releases (z. B. der 4.x-Linie wie v4.0.3) unterscheidet — Oberfläche, Bibliotheken, Build, Partition — steht im nächsten Abschnitt.
- WLAN in Mesh-/Repeater-Netzen: Beim Verbinden werden alle Kanäle gescannt und der Access Point mit dem stärksten Signal gewählt (statt des ersten gefundenen). BSSID, Kanal und RSSI erscheinen in der seriellen Konsole.
- Wecker: Alarm-Schlummer und Sleep-Timer sind sauber getrennt. Die Hardware-Taste löst den Alarm-Schlummer aus, solange das Alarm-Overlay sichtbar ist, sonst den Sleep-Timer.
- Bedienung: Die 10-s-Rückkehr zur Startseite zählt ab der letzten Berührung, nicht nur ab dem Seitenwechsel (kein vorzeitiges Zurückspringen mehr).
- Senderliste: Zwei neue Standardsender (Idobi Radio, DLF Kultur), jetzt 28 statt 26.
- Web-Oberfläche: neues responsives Design (auch die WLAN-Konfigurationsseite im Access-Point-Modus, komplett ohne externe Dateien, da dort kein Internet vorhanden ist; eine leere SSID überschreibt die gespeicherte nicht mehr) (Handy bis Desktop, automatisch heller/dunkler Modus, größere Bedienelemente), Meldungen als Toast statt Pop-up, Status-Abfrage pausiert bei verstecktem Tab bzw. anderer Seite. jQuery 4.0.0 und jQuery UI 1.14.2 (vorher 3.7.1 / 1.13.2).
- Referenzstände: ESP32-Core 3.3.12, LVGL 9.6.0, Adafruit_ILI9341 1.6.4.
lv_conf.hwieder nachlibraries/lvgl/src/kopieren (nur Kommentare geändert).
Die Vorgängerversionen nutzten überwiegend direktes Zeichnen mit Adafruit GFX auf dem ILI9341 sowie die Bibliothek TouchEvent zur Touch-Auswertung. Ab der 5.x-Linie (aktueller Stand v5.0.7) ersetzt LVGL 9 die Hauptoberfläche (Widgets, Themes, Animationen). Darunter liegt weiterhin derselbe ILI9341-Treiber: LVGL schreibt in einen Puffer, der auf das TFT gezeichnet wird; für wenige Zustände (z. B. WLAN-Verbindungsdialog vor dem Start von LVGL) werden weiterhin Adafruit_ILI9341-Aufrufe genutzt.
- Partition Scheme: Früher reichte oft das Default-Layout mit SPIFFS nicht mehr, sobald Core und Sketch wuchsen. Ab 5.x (Stand 5.0.7) wird „No FS 4MB“ empfohlen: möglichst große App-Partition, kein großes Dateisystem — ausreichend Platz für LVGL, Web- und Audio-Code.
- LVGL-Konfiguration: Zusätzlich zum Sketch ist
lv_conf.hidentisch nachlibraries/lvgl/src/lv_conf.hzu kopieren (siehe Abschnitt unten). Ohne diese Kopie fehlen oft Fonts/Features beim Bau der Library.
- Nicht genutzte Definitionen wurden bereinigt (z. B. Buzzer-Pin
BEEPER, falls du ihn bei Bedarf wieder einfügen möchtest: in00_pin_settings.hergänzen und ansteuern).
Wenn du von einem älteren Stand migrierst: Sketch komplett ersetzen, Bibliotheken an die Tabelle anpassen, Partition umstellen, lv_conf.h doppelt pflegen, dann vollständig flashen (ggf. mit „Erase Flash“).
| Komponente | Hinweis |
|---|---|
| ESP32 | z. B. DevKit wie beim AZ-Touch-Set |
| Display | ILI9341, 2,8" (beim AZ-Touch MOD integriert) |
| Touch | XPT2046 (beim AZ-Touch MOD) |
| Audio | I2S-Verstärker (z. B. MAX98357A) + Lautsprecher |
| Optional | LDR (Helligkeit) laut 00_pin_settings.h |
Pinbelegung für Display, Touch, I2S und LDR: Datei radiowecker/00_pin_settings.h. Abweichende Boards: Pins dort anpassen.
- Arduino IDE 2.3.10 (oder kompatible 2.x-Version)
- Boardverwalter-URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Paket esp32 von Espressif Systems installieren. (Version siehe Tabelle)
- Gehe zu
Werkzeuge>Board>Boardverwalter. - Suche nach ESP32 im Suchfeld.
- Wähle ESP32 by Espressif Systems aus und klicke auf Installieren.
Important
Hinweis: Stelle sicher, dass du je nach radiowecker Version die richtige Version 2.0.17 oder > 3.0 auswählst, da es zu Problemen kommen kann.~~
| Radio Version | Boardverwalter | Partition |
|---|---|---|
| <= 4.0.3 | 2.0.17 | default |
| >= 5.x | 3.3.12 | No FS 4MB |
- Gehe zu
Sketch>Include Library>Library Manager. - Suche nach Bibliothek Name.
- Wähle die Version xxx aus dem Dropdown-Menü und klicke auf Installieren.
Important
Hinweis: Stelle sicher, dass du je nach radiowecker Version die richtige Version auswählst, da es zu Problemen kommen kann.~~
| Bibliothek | Radio Version <= v4.0.3 | Radio Version >= v5.x |
|---|---|---|
| Adafruit_ILI9341 | 1.6.2 | 1.6.4 |
| Adafruit_GFX | 1.12.1 | 1.12.6 |
| XPT2046_Touchscreen | 1.4 | 1.4 |
| ESP8266Audio by Earle F. Philhower | 2.0.0 | 2.4.1 |
| Touchevent by Gerald-Lechner | 1.3.0 | ❌ |
| lvgl | ❌ | 9.6.0 |
Unter Werkzeuge u. a.:
| Einstellung | Empfehlung |
|---|---|
| Board | ESP32 Dev Module (oder passend zu deinem Modul) |
| Flash Size | 4 MB (wenn dein Chip 4 MB hat) |
| Partition Scheme | No FS 4MB |
Warum „No FS 4MB“?
LVGL 9, Webserver, Audio und Einstellungen benötigen eine große App-Partition. Schemata mit großem SPIFFS/LittleFS lassen oft zu wenig Flash für den Sketch übrig und führen zu Link- oder Laufzeitproblemen.
- PSRAM: nur Enabled, wenn dein Board physikalisch PSRAM hat.
- Nach Wechsel des Partitionsschemas ggf. einmal „Erase All Flash Before Sketch Upload“ aktivieren und neu flashen.
Die LVGL-Bibliothek wird mit einer zentralen lv_conf.h gebaut. Dieses Projekt liefert eine passende Datei im Sketch-Ordner. Zusätzlich muss dieselbe Datei in der installierten LVGL-Library liegen:
| Aktion | Pfad |
|---|---|
| Quelle | radiowecker/lv_conf.h |
| Ziel (Kopie, Inhalt identisch) | Arduino/libraries/lvgl/src/lv_conf.h |
Die Uhrzeit-Schrift (lv_font_clock_digits.c) liegt im Sketch-Ordner;
Typische Pfade:
- Windows:
Benutzer\<Name>\Documents\Arduino\libraries\lvgl\src\lv_conf.h - macOS / Linux:
~/Arduino/libraries/lvgl/src/lv_conf.h
Wichtig: Änderst du lv_conf.h im Projekt, die Kopie unter libraries/lvgl/src/ immer wieder mitüberschreiben, sonst kompiliert die Library mit alter Konfiguration (fehlende Fonts/Features).
- ESP32-Boardsupport installiert, Board & No FS 4MB eingestellt.
- Bibliotheken laut Tabelle installiert.
lv_conf.hnachlibraries/lvgl/src/lv_conf.hkopiert.- Sketch-Ordner
radiowecker/vollständig geöffnet. - Kompilieren; bei Fehlern zu Montserrat/LVGL zuerst
lvgl/src/lv_conf.hprüfen.
- Gerät einschalten. Ohne bekanntes WLAN startet der Konfigurations-Access-Point mit der SSID
radioweckerconf. - PC oder Smartphone mit diesem WLAN verbinden.
- Browser öffnen:
http://192.168.4.1 - Heim-WLAN auswählen, Passwort eintragen, speichern. Das Gerät startet neu und verbindet sich mit dem gewählten Netz.
Mesh-/Repeater-Netze: Bei mehreren Access Points mit gleicher SSID scannt das Radio beim Verbinden alle Kanäle und wählt den AP mit dem stärksten Signal. Ein Wechsel im laufenden Betrieb (Roaming) findet nicht statt, erst beim nächsten Verbindungsaufbau.
Fehlerbehebung: Keine Verbindung nach dem Speichern → erneut Konfigurationsmodus (wie in früheren Releases: ggf. Reset/Anleitung im Wiki oder in DOKU/05_Bedienungsanleitung.md).
-
Obere Statuszeile
- Weckerstatus (nächste Weckzeit / deaktiviert)
- IP-Adresse
- Schlummer-Hinweis
- WLAN-RSSI
-
Startseite
- Große Uhrzeit als Ziffern-Kacheln (statische Aktualisierung, ressourcenschonend)
- Datum
- Sender vor/zurück: seitliche Buttons im Datumsbereich (nicht über der Uhr)
- Wetter bzw. Radio-Infos (Sender, Streamtitel) im mittleren Bereich
- Lautstärke: Schieberegler unten
-
Weitere Seiten
- Über den mittleren Bereich (transparenter Bereich) zur Einstellungs-/Radio-Seite wechseln (wie im bisherigen Konzept; Details in
DOKU/05_Bedienungsanleitung.md). - Favoriten, Einstellungen, Wecker über Fußzeilen-Navigation.
- Über den mittleren Bereich (transparenter Bereich) zur Einstellungs-/Radio-Seite wechseln (wie im bisherigen Konzept; Details in
-
Web-Oberfläche
- Im Heimnetz über die im Display angezeigte IP-Adresse erreichbar: Stationen, Wecker, WLAN u. a. konfigurieren.
| Weg | Beschreibung |
|---|---|
| Web-UI (HTTP-OTA) | Tab Info: Vergleich mit dem neuesten GitHub-Release; bei neuerer Version erscheint „Per Web installieren…“. Nach Bestätigung lädt das Gerät die Firmware von GitHub und startet neu. Fortschritt wie bei ArduinoOTA auf dem TFT (LVGL-OTA-Screen). |
| ArduinoOTA | Weiterhin möglich (Hostname/Passwort in 00_settings.h: OTA_HOSTNAME, OTA_PASSWORD) — Upload z. B. aus der Arduino IDE über den Netzwerk-Port. |
Voraussetzungen für HTTP-OTA
- Partition: weiterhin „No FS 4MB“ (zwei OTA-App-Slots à ca. 2 MB).
| Datei / Bereich | Inhalt (kurz) |
|---|---|
radiowecker.ino |
Setup, Loop, Zeit, Alarmlogik |
tft_display.ino |
LVGL-UI, Seiten, Uhr |
lv_font_clock_digits.c |
Minimale Bitmap-Schrift für die Uhrzeit |
audio.ino |
Stream, Decoder, I2S |
wlan.ino |
WiFi, Verbindung |
webserver.ino |
HTTP, API, index.h |
stations.ino |
Senderliste, Preferences |
ota.ino |
ArduinoOTA (Upload aus der IDE / Netzwerk) |
http_update.ino |
HTTP-OTA aus der Web-UI (GitHub-Release-Binary) |
- ESP32 internet clock radio with ILI9341 + XPT2046 (library XPT2046_Touchscreen required for touch input to LVGL), LVGL 9.6, MP3 streams via ESP8266Audio, alarms, weather, and a built-in web UI. The old TouchEvent library is not used.
- Arduino IDE 2.x; install libraries listed above.
- Set Partition Scheme to No FS 4MB (large app partition).
- Copy
radiowecker/lv_conf.htoArduino/libraries/lvgl/src/lv_conf.h(must stay in sync). Keepbuild_opt.handlv_font_latin_supp_14.cin the sketch folder. - First-time WiFi: join
radioweckerconf, openhttp://192.168.4.1, configure home WiFi. - Optional firmware update from the browser: on the Info tab, if GitHub has a newer release, use “Per Web installieren…” (device downloads
radiowecker-firmware.binfrom the matching release tag).
Compared to earlier releases (e.g. 4.x): main UI moved from raw Adafruit GFX + TouchEvent to LVGL 9; XPT2046_Touchscreen remains; ArduinoJson is bundled in the sketch; partition layout must provide a large app region; add lv_conf.h copy under lvgl/src/ and use build_opt.h.
- Gerald Lechner und AZ-Delivery für die ursprüngliche Projektidee und Dokumentation.
- Earle F. Philhower (ESP8266Audio), LVGL, Adafruit, Paul Stoffregen (XPT2046) für die verwendeten Bibliotheken.
Startseite, Radio an
Einstellungen, russische Sprache (Kyrillisch)
Startseite, Radio aus, Wetter
Wecker klingelt (Stopp / Schlummer)
Favoriten
Einstellungen
Wecker
Wecker Seite 2
Die Oberfläche folgt automatisch dem hellen oder dunklen Modus des Geräts (links hell, rechts dunkel).
Startseite (Player)
Wecker
Radiosender
Anzeige (Helligkeit, Farben)
Einstellungen
Info
WLAN-Konfiguration im Access-Point-Modus (http://192.168.4.1)
Radiowecker · Version 5.0.7
























