RADIOWECKER GitHub

ESP32 · ILI9341 Touchscreen · LVGL 9

Der Internet-Radiowecker, weitergebaut.

Ein Wecker-Radio mit Touchscreen, zwei Weckzeiten, Wetteranzeige und eigener Weboberfläche – aufbauend auf dem AZ-Delivery-Projekt von Gerald Lechner, mit einer komplett neuen LVGL-Oberfläche und zahlreichen Zuverlässigkeits- und Funktionsverbesserungen.

Open Source Firmware-Updates per Browser Kein Cloud-Zwang
Startbildschirm des Radioweckers mit Uhrzeit und Wettervorschau

Die ursprüngliche Idee, Bauanleitung und der Basis-Sketch stammen von Gerald Lechner, veröffentlicht bei AZ-Delivery als „Internet Radiowecker mit Touchscreen“ auf Basis des AZ-Touch-Gehäusesets. Dieses Repository (beabel/radiowecker) baut direkt darauf auf – die Oberfläche wurde komplett neu auf LVGL 9 umgestellt und um Wetter, Favoriten, mehrsprachige Bedienung und browserbasierte Firmware-Updates erweitert. Alle Änderungen im direkten Vergleich:

Original vs. diese Version

Was sich am Code wirklich geändert hat

Durch Vergleich der Original-Sketche mit dieser Version.

Zuverlässigkeit & Fehlerbehebungen

Reconnect ohne Neustart

Im Original führte jeder WLAN-Verbindungsabbruch zwangsläufig zu einem kompletten Geräte-Neustart nach 5 Minuten – einen Weg zurück in den Betrieb ohne Reboot gab es nicht. Diese Version erkennt die Wiederverbindung im laufenden Betrieb und macht ohne Neustart weiter.

Stream-Aussetzer überleben

Ein Sender-Hänger löste im Original sofort einen vollständigen Neustart aus – passend zu den in den Blog-Kommentaren gemeldeten „manche Sender verursachen Neustarts“. Jetzt wird zuerst versucht, dieselbe Station neu zu verbinden, mit Toleranz für kurze Aussetzer.

Richtiger nächster Alarm

Waren beide Weckzeiten für denselben Tag aktiv, wählte das Original immer Wecker 1 als „nächsten Alarm“ – selbst wenn Wecker 2 zeitlich früher lag. Die Auswahl vergleicht jetzt tatsächlich beide Zeiten.

Saubere Lautstärkebegrenzung

Die Original-Formel für die Verstärkung konnte rechnerisch über den von der Audio-Bibliothek erlaubten Maximalwert hinausschießen – ein plausibler Kandidat für die in Nutzerkommentaren gemeldete Übersteuerung. Die Lautstärke wird jetzt korrekt auf den gültigen Bereich begrenzt.

Speicher & Performance auf dem ESP32

~70 KB mehr Speicher beim Start

Der Original-Sketch reservierte die Audio-Puffer fest beim Booten, egal ob gleich ein Sender läuft. Jetzt passiert das erst beim ersten tatsächlichen Senderstart – mehr freier Speicher für WLAN, Weboberfläche und Wetterabfrage während des Starts.

Bluetooth-Speicher freigegeben

Das Projekt nutzt kein Bluetooth – der dafür reservierte RAM-Bereich wird beim Start jetzt explizit freigegeben und steht Audio-Puffer und Oberfläche zur Verfügung.

Keine Heap-Fragmentierung durch Strings

WLAN-Zugangsdaten, NTP-Server und Zeitzone lagen im Original als Arduino-String-Objekte im Heap – über lange Laufzeit ein klassischer Fragmentierungs-Kandidat auf dem ESP32. Jetzt feste char-Arrays ohne Heap-Nutzung.

Weniger Tonaussetzer

Die aufwendigere LVGL-Oberfläche braucht mehr Rechenzeit pro Durchlauf als das ursprüngliche direkte Zeichnen. Der Audio-Decoder wird deshalb jetzt mehrfach pro Hauptschleife gefüttert, um Aussetzer während UI-Wechseln zu vermeiden.

Bedienung & Funktionsumfang

Neue Oberfläche mit LVGL

Statt manuell gepixelter Rechtecke und Schieberegler: echte Widgets, Themes und Übergänge auf Basis von LVGL 9.

Wecker-Schlummer nach dem Klingeln

Das Original kannte nur einen Einschlaf-Timer vor dem Wecken. Eine echte Schlummerfunktion nach dem Alarm gab es nicht – jetzt schon.

Eigene Wecklautstärke

Die Lautstärke beim Wecken lässt sich getrennt von der normalen Hörlautstärke einstellen.

Pieper als Weckton-Alternative

Falls kein Sender erreichbar ist (oder einfach gewünscht): ein klassischer Pieper-Weckton statt Radio.

Physische Taster

Stop und Schlummer lassen sich zusätzlich zum Touchscreen über echte Taster bedienen.

Wetteranzeige

Aktuelle Temperatur und Kurzvorhersage (Open-Meteo) direkt auf der Startseite – im Original nicht vorhanden.

Favoriten-Bildschirm

Eigene Seite für die Senderliste, statt Sender nur über zwei kleine Pfeile in der Kopfzeile zu wechseln.

Mehrsprachig & Zeichensätze

Statt nur deutscher Texte mit selbstgebauter Umlaut-Behandlung: eine echte Sprachumschaltung inkl. verbesserter Zeichensatz-Erkennung für Stream-Titel (UTF-8/Latin-1), auch bei kyrillischen Sendern.

Update direkt aus GitHub

Firmware-Updates lassen sich über die Weboberfläche direkt von einem GitHub-Release laden – ganz ohne Arduino IDE. Die klassische Netzwerk-OTA aus der IDE bleibt zusätzlich möglich.

Bauteile

Hardware

Dieselbe Basis-Hardware wie im Original-Projekt von AZ-Delivery:

AnzahlBauteil
AZ-Touch Gehäuseset (2,4" oder 2,8" ILI9341 + XPT2046 Touch)
ESP32 Dev-Kit C V4
MAX98357A I2S-Verstärker
Lautsprecherset 2×3 W, 8 Ω
470 kΩ Widerstand
DC-Einbaubuchse
LDR-Modul (optional, für automatische Helligkeit)

Genaue Pinbelegung für Display, Touch, I2S und LDR: Datei radiowecker/00_pin_settings.h im Repository.

Fritzing-Schaltplan der Verkabelung

In Betrieb

Galerie

Startseite mit laufendem Radio und Sendername
Wecker-Einstellungsseite mit zwei Weckzeiten
Aktiver Wecker mit Schlummer-Option
Favoriten- und Senderliste
Startseite mit angepasstem Farbschema
Streamtitel eines kyrillischen Radiosenders
Weboberfläche: Startseite mit Uhrzeit und Bedienelementen
Weboberfläche: Lautstärke-, Helligkeits- und Farbregler

Loslegen

Installation

Kurzfassung – die vollständige Anleitung inkl. Bibliotheks-Versionstabelle steht im README des Repositories.

1. Arduino-Umgebung

  • Arduino IDE 2.3.8 (oder kompatible 2.x)
  • ESP32-Boardpaket von Espressif, Version 3.3.7
  • Partition Scheme: „No FS 4MB“ – wichtig, da LVGL 9 eine große App-Partition braucht

2. LVGL-Konfiguration kopieren

Nach der Bibliotheks-Installation radiowecker/lv_conf.h 1:1 nach

Arduino/libraries/lvgl/src/lv_conf.h

kopieren – sonst fehlen beim Bau Fonts/Features.

3. Erste WLAN-Einrichtung

Ohne bekanntes WLAN startet der Access-Point radioweckerconf. Verbinden, Browser öffnen unter 192.168.4.1, Heim-WLAN eintragen.

4. Updates ohne Arduino IDE

Sobald verbunden: Tab Info in der Weboberfläche prüft automatisch auf ein neueres GitHub-Release und installiert es per Klick – „Per Web installieren…“.

Kontakt

Fragen oder Feedback?

Bug gefunden, Idee für eine Funktion oder eine Frage zum Nachbau – kurze Nachricht reicht.