chronoclock
Eine Uhr die alle 15 Minuten einen Sound abspielt und sich vorher mit dem WLAN synchronisiert
Hardware
- ESP32-Devkit V4 als Mikrocontroller
- hier läuft der Code drauf
- macht die Verbindung zum WLAN (SSID/Passwort sind hardgecoded)
- programmierbar via Arduino-IDE (siehe Anleitung)
- schickt serielle Steuerbefehle zum Soundmodul (via UART) und empfängt serielle Antworten von diesem
- Optional: Berührungssensitivität über Capacitive Touch
- DY-SV5W Audio Modul als Audioplayer und Verstärker
- empfängt serielle Steuerbefehle vom ESP32 und schickt serielle antworten zurück
- spielt MP3-Dateien von einer microSD-Karte ab¹
- hat einen 5W-Verstärker eingebaut der einen Lautsprecher antreiben kann
- Optional: DS3231 RTC (Real Time Clock) – eine kleine Uhr mit Batterie, die die Zeit synchron hält auch wenn das Gerät nicht ins Netz kommt
¹: Muss FAT32-formatiert sein, files müssen nach dem Schema 00001.mp3
, 00002.mp3
usw. benannt sein, d.h. fünfstelliger Dateiname mit führenden Nullen. Die Zuordnung zwischen Zahlen und files lässt sich in der Headerdatei sounds.h
einsehen
Software
- Code programmiert in C++ (Arduino-flavour) – das Projekt muss sich in einem Ordner mit dem Namen "chronoclock" befinden
- Einstiegspunkt des Codes ist
chronoclock.ino
dort findet auch der Hauptablauf des Programmes statt- Alles bis zum Ende des Blockes
void setup()
wird einmal ausgeführt wenn der ESP32 Strom hat - Alles im Loop und in den Timern wird regelmäßig und für immer ausgeführt
- Im Funktionsblock
void handleTime()
wird einmal die Zuordnung der Minuten zu den Chime-Sounds vorgenommen, von hier aus werden die chime-Funktionen ausgeführt die die Sounds abspielen-
void chimeFullHour(int hour)
ist die Funktion die zur vollen Stunde ausgeführt wird -
void chimeQuarterHour()
ist die Funktion die zur Viertelstunde ausgeführt wird -
void chimeHalfHour()
ist die Funktion die zur halben Stunde ausgeführt wird -
void chimeThreeQuarterHour()
ist die Funktion die zur Dreiviertelstunde ausgeführt wird
-
- Alles bis zum Ende des Blockes
- Soundnamen sind in
sounds.h
aufgelistet und sind für die Zuordnung zwischen Audiodateien und Namen zuständig. Beispiel:00032.mp3
ist dort alsEineWLANVerbindungWirdAufgebaut = 32,
angeführt. Wenn also im CodeaudioController.enqueueSound(Sounds::EineWLANVerbindungWirdAufgebaut);
vorkommt, wird vom Code Soundfile 32 in die Playlist eingereiht. Alternativ könnte frau auch direktaudioController.enqueueSound(32);
schreiben, das ist aber weniger sprechend - Die Bibliothek für den audioController befindet sich in
dysv5.h
und dort lassen sich alle möglichen Methoden einsehen die aufgerufen werden können:- audioController.enqueueSound()
- audioController.setVolume()
- audioController.setEqMode()
- audioController.playTrack()
- audioController.selectTrack()
- audioController.pause()
- usw...
Ordner
-
audio
: Enthält die von David eingesetzten mp3s -
images
: Bilder -
manuals
: Anleitungen zum DY-SV5W
Topologie
So sieht die Verbindung am Ende dann aus
graph LR;
USB-Netzteil --> ESP32
ESP32 -->|UART| DY-SV5W
ESP32 -->|5V| DY-SV5W
DY-SV5W --> Lautsprecher
DIP-Schalter auf dem DY-SV5W-Board muss für den UART- Modus wie folgt geschalten sein:
▄ ▄ ▀ :
Verbindungen
ESP32 | DY-SV5W | Note |
---|---|---|
GPIO17 (TXD2) aka "17" | IO1/RX | |
GPIO16 (RXD2) aka "16" | IO0/TX | |
5V | 5V + | |
GND | 5V - |