Software

Raspberry Pi (Python)

Die Software, die auf dem Raspberry Pi läuft, besteht aus mehreren in Python geschriebenen Teilprogrammen. Nach der Fertigstellung des Webradios wird das Hauptprogramm automatisch beim Booten des Betriebssystems gestartet. Im Moment geschieht das über den folgeenden Eintrag in der Datei /etc/rc.local direkt vor der letzten Zeile "exit 0":

/bin/sleep 5 && cd /home/pi/NAS1TB/Python/webradio/ && sudo -u pi python3 autostart.py &

Diese Zeile sorgt dafür, dass das Pythonskript autostart.py 5 Sekunden nach dem kompletten Hochfahren gestartet wird. Dieses Pythonskript startet einerseits das Webradio (webradio.py) und überwacht andererseits GPIO 3. Dieser GPIO-Pin kann benutzt werden, um den Raspberry Pi herunterzufahren und wieder einzuschalten. Das Herunterfahren besorgt das Pythonskript, das Einschalten ist im Raspberry Pi fest "verdrahtet". Gesteuert wird das Pin vom Arduino.

Die Webradio-Software initialisiert erst einmal die Hardware (Display), startet ein weiteres Pythonskript namens updateDB.py, initialisiert den zuletzt gehörten Radiosender (obwohl dieser auch von mpd, dem Mediaplayer Deamon, gestartet wird, solange er vor dem letzten Shutdown geöffnet war) und gelangt dann in die Hauptschleife des Webradio-Pythonskripts.

Da genannte Pythonskript namens updateDB.py wird in einem Parallel-Thread gestartet, so dass das Webradio erst einmal nicht dadurch gestört wird. Das Update-Skript schaut nach, ob seit dem letzte Update weniger als 30 Tage vergangen sind. Wenn das der Fall ist, wird das Update sofort wieder beendet. In der Hauptschleife des Webradios wird der Updatezyklus ständig überwacht. Hier wird bereits nach 24 Stunden ein neues Update angestoßen. Das Update holt aktuelle Senderdaten aus dem Internet und liest diese in eine Datenbank ein. Als Datenbankserver wird mysql benutzt.

In der Hauptschleife wird überwacht:

- Button-Klicks vom Display
- Ereignisse vom Arduino, wie Fernbedienung, Lautstärkeregelung und Switch
- Update-Zyklus
- aktueller Titel (wird auf Display ausgegeben und mit der Blacklist verglichen)
- Uhrzeit (wird auf Display ausgegeben)

Die einzelnen Python-Module und Dateien:

Python-Modul / Datei Zweck
autostart.py Wird vom Betriebssystem im Autostart aufgerufen, ruft seinerseits das Webradio auf und überwacht den GPIO Pin 3, um ggf. das Betriebssystem herunterzufahren.
Comm3Wire.py Klasse Comm3Wire für die Kommunikation zwischen zwei Mikrocontrollern. Die Klasse gibt es für den Raspberry Pi in Python und für den Arduino.
latest.sql Wird von mysql benutzt, um die Sender-Datenbank neu aufzubauen.
latest.sql.gz Wird bei jedem Datenbank-Update aktuell aus dem Internet herunter geladen und enthält die Datei latest.sql.
updateDB.py Eigenständiges Programm für das Datenbank-Update
updateDB.PrepareDB.sql Wird von mysql benutzt, die Datenbank neu aufzubauen
webradio.ini Speichert die Konfiguration des Webradios einschließlich der Favoriten.
webradio.py Hauptprogramm:
Initialisierung der Hard- und Software und Hauptschleife
webradioBlacklist.py Verwaltung der BlackList:
Anzeigen des Dialogs zum Hinzufügen, Editieren und Löschen von Blacklist-Einträgen
webradioCfg.py Lesen und Schreiben der Datei webradio.ini
webradioComm3Wire.py Kommunikation zwischen Raspberry Pi und Arduino über 3 GPIO-Leitungen (siehe Klasse Comm3Wire)
webradioDatabase.py Alle Routinen zur Verwaltung der benutzten Datenbanken
benutzt werden die folgenden Datenbanken:
- webradioStations (Tables Station, Countries und Tags)
- webradioExtraLists (Tables BlackList, RecentList und TimerList)
webradioFavoriten.py Verwaltung der Favoriten
Die Favoriten werden in der Datei webradio.ini gespeichert. Da hier von einer konstanten Zahl Datensätze auszugehen ist, ist das Speichern in einer Datenbank unnötig.
webradioInitStation.py Starten, Lautstärkeregeln und Stummschalten des Mediaplayers.
webradioNextion.py Klasse NextionDisplay zum Ansteuern und Abfragen des Nextion-Displays
webradioNextionListbox.py Klasse NextionListbox zur Darstellung von Listboxen im Nextion-Display
webradioSelectStation.py Auswahlliste für die Radiosender
webradioTimer.py Verwaltung der Timer
webradioUpdateDB.py Steuerung des Datenbank-Updates
webradioUtils.py Allgemeine Funktionen

 

Arduino

Der Coprozessor vom Typ Arduino Uno, später Arduino Nano Pro, hat folgende Aufgaben:

- Abfrage der Fernbedienung
- Abfrage des Lautstärkereglers und Power-Switch
- Ansteuerung des RGB-LED-Streifen
- Ansteuerung des elektronischen Lautstärkereglers FM62429
- Hardwareseitiges Ein- und Ausschalten des Raspberry Pi über den Schalteingang des Step-Down-Schaltreglers
- Kommunikation mit dem Raspberry Pi über 3 GPIO-Leitungen (siehe Comm3Wire-Klasse)