Skip to content
Snippets Groups Projects
Commit f99997f2 authored by David Huss's avatar David Huss :speech_balloon:
Browse files

Initial commit

parents
Branches
No related tags found
No related merge requests found
# 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](https://www.elektronik-kaufen.ch/pages/esp32-programmieren))
- 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 <u>müssen</u> 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 <u>einmal</u> 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
- Soundnamen sind in `sounds.h` aufgelistet und sind für die Zuordnung zwischen Audiodateien und Namen zuständig. Beispiel: `00032.mp3` ist dort als `EineWLANVerbindungWirdAufgebaut = 32,` angeführt. Wenn also im Code `audioController.enqueueSound(Sounds::EineWLANVerbindungWirdAufgebaut);` vorkommt, wird vom Code Soundfile 32 in die Playlist eingereiht. Alternativ könnte frau auch direkt `audioController.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
```mermaid
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:
▄ ▄ ▀ :
![](images/dip.jpg)
## Verbindungen
| ESP32 | DY-SV5W | Note |
| ---------------------- | ------- | ---- |
| GPIO17 (TXD2) aka "17" | IO1/RX | |
| GPIO16 (RXD2) aka "16" | IO0/TX | |
| 5V | 5V + | |
| GND | 5V - | |
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment