Skip to content
Snippets Groups Projects
Select Git revision
  • main
1 result

chronoclock

  • Clone with SSH
  • Clone with HTTPS
  • David Huss's avatar
    David Huss authored
    f99997f2
    History

    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
    • 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

    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 -