Donnerstag, 23. Dezember 2021

iRadio mit Pimoroni Pirate Audio HAT

 


Ich habe mir ein Pimoroni Pirate Audio HAT zugelegt und beschreibe wie ich damit ein Internetradio baue.

Voraussetzung ist ein aktuelles, sauber installiertes Raspberry Pi OS.

Mit "sudo raspi-config" ändern wir folgende Einstellungen:

- I2C und SPI aktivieren
- in die Text-Konsole booten
- legacy Bildschirmtreiber auswählen

in der /boot/config.txt aktivieren wir den Eintrag "hdmi_force_hotplug=1"

zur Optimierung kommen später noch diese Einträge hinzu:

hdmi_group=2
hdmi_mode=87
hdmi_cvt=240 240 60 1 0 0 0


dadurch wird der HDMI-Monitor abgeschaltet und es spielt sich alles nur noch auf dem 1,3" Display ab. Die Auflösung wird auf 240 x 240 fest eingestellt und es muss nichts mehr gerendert werden. Während der Installationsphase ist der Monitor aber noch nützlich, deshalb optimieren wir erst später

fbcp-ili9341

entsprechend dieser Anleitung wird der fbsp-ili9341-display-Treiber installiert.

der von mir verwendete build-string:

cmake -DPIRATE_AUDIO_ST7789_HAT=ON -DSPI_BUS_CLOCK_DIVISOR=6 -DSTATISTICS=0 -DUSE_DMA_TRANSFERS=OFF ..

die rc.local wird um den Aufruf des Treibers ergänzt:

sudo /home/pi/fbcp-ili9341/build/fbcp-ili9341 &

der Inhalt des HDMI-Monitors sollte sich jetzt auf dem display spiegeln.

iRadio und Bau der Steuerung

iRadio wird wie gehabt auf den raspberry geclont

git clone https://github.com/BM45/iRadio.git

Bevor die Installation gestartet wird ändern wir in der gpiod.c die Tastenbelegungen. Das Pirate HAT benutzt für seine Tasten gpio 5, 6, 16 und 24.
Wir schauen in der Tabelle welchen BCM2835-Bezeichnungen diesen gpios entsprechen. Daraus ergibt sich:

Code:
// Tasteranschluesse gpio 5,6,16,24
#define PIN_PRG_HOCH RPI_V2_GPIO_P1_29
#define PIN_PRG_RUNTER RPI_V2_GPIO_P1_31
#define PIN_PRG_HALT RPI_V2_GPIO_P1_36
#define PIN_PRG_WEITER RPI_V2_GPIO_P1_18

auch die Aktionen der Tasten ändern wir auf Senderumschaltung und Lautstärkeeinstellung

Code:
if (val_prg_hoch == 0)
                system("echo \"next\" | nc 127.0.0.1 9294 -N");

        if (val_prg_runter == 0)
                system("echo \"prev\" | nc 127.0.0.1 9294 -N");

        if (val_prg_halt == 0)
                system("echo \"volup 2\" | nc 127.0.0.1 9294 -N");

        if (val_prg_weiter == 0)
                system("echo \"voldown 2\" | nc 127.0.0.1 9294 -N");

jetzt können wir iRadio mit sudo ./install.sh bauen.
Nach einem reboot sehen wir im webinterface dass iRadio läuft. Wir hören aber noch nichts weil der Audiotreiber noch fehlt.
iRadio hat allerdings den Aufruf von fbcp-ili9341 aus der rc.local entfernt, diesen müssen wir wieder eintragen.

Installation des Audio-DAC

Pimoroni hat dazu ein script erstellt.

curl https://get.pimoroni.com/phatdac | bash

Nach dem reboot ist nun auch ein Sender zu hören.

Bau einer Skalensimulation

für eine x11 Skalensimulation benötigen wir zuerst mal die sdl2 library

sudo apt-get install libsdl2-*

ich entscheide mich hier für eine Rundskala "skale2".

Per ftp kopieren wir ein Skalenbild mit 240 x 240 pixel in den Ordner iRadio/display/x11/skale2, ändern dort in der sdlskale.cxx die Auflösung, tragen die absoluten Bildpfade ein und positionieren den Skalenzeiger.

Code:
...
#define SKALE_HOEHE 240
#define SKALE_BREITE 240
...
textur_skale = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale2/skale_r.png");
textur_zeiger = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale2/zeiger_r.png");
...
// Position und Dimension des Skalenzeigers
SDL_Rect ZeigerRect;
ZeigerRect.x = 60; ZeigerRect.y = 58;
ZeigerRect.w = 120;  ZeigerRect.h = 120;
int rotationswinkel=ZEIGERANSCHLAG_LINKS;
...


die Simulation kann nun mit sudo ./build.sh gebaut werden und der Aufruf in der rc.local hinterlegt werden. Eine eigene playlist muss noch von /boot oder von stick durchlaufen, sonst startet die Animation nicht.

startx /home/pi/iRadio/display/x11/skale2/sdlskale

hier sind die Statistiken noch eingeschaltet:

und hier durch einen Parameter im build-string abgeschaltet:


 

das verwendete Skalenbild:

von config.txt und rc.local sollten in den jeweiligen Pfaden Sicherheitskopien erstellt werden (config.txt.sav und rd.local.sav).

Probleme sind mit der Rechenleistung des Raspberry zero zu erwarten. Und zwar in der Art dass die Simulation nicht immer auf die Beine kommt und es ab und an Knattergeräusche gibt. Auf einem 3B läuft die Installation deutlich stabiler und auch schneller. 

so sieht es aus wenn man auf dem Audio HAT einen Western schaut:


 


Keine Kommentare:

Kommentar veröffentlichen