Mittwoch, 13. Februar 2019

iRadio FAQ und Release Notes

FAQ und Release Notes

 
19.02.2019:  - Bluetooth (Audioempfängerfunktion) hinzugefügt

die neue Version des iRadio ist ein Funktionsupdate für den Raspberry Zero W, den Raspberry 3 Mod. A+, 3 Mod. B und 3 Mod. B+. Also die aktuellsten 3er-Modelle, ältere Raspberrys profitieren von diesem iRadio nicht.

Es geht darum, daß die neusten Modelle des Pi einen WLAN-Chip besitzen, der auch eine Bluetooth-Funktionalität bietet.
Genau für diese Bluetooth-Funktionalität habe ich einen Systemdaemonen integriert, der es erlaubt, das Internetradio als Bluetoothlautsprecher zu nutzen.
Als Basis dient der Protokollstack BlueZ. https://de.wikipedia.org/wiki/BlueZ

Das iRadio kann ganz normal installiert und als solches genutzt werden. Will man auf den neuen Raspberrys zusätzlich Bluetooth aktivieren, wechselt man in das Verzeichnis "bt-speaker" welches in iRadio liegt. Mit Rootrechten startet man die Installation des Bluetoothdaemonen durch Aufruf des Skriptes install.sh

Die Installation läuft vollautomatisch ab, ggf. werden fehlende Pakete nachinstalliert, weshalb während der Installation eine Internetverbindung erforderlich ist.
Nachdem der Installer durch ist, erhält man die Meldung das der Systemdaemon installiert wurde.

Das kann ungefähr so aussehen:


Nach einem Neustart verhält sich das iRadio wie gehabt. Der Internetradiodienst wird automatisch gestartet und abgespielt. Zusätzlich wird auf der Bluetooth-Schnittstelle nach eingehenden Verbindungen gewartet.

In Bluetooth-fähigen Endgeräten erscheint das Internetradio mit seinem aktuell eingestellten Hostnamen, in diesem Fall einfach "raspberrypi", was der Defaulthostname von Raspbian ist.


Koppelt man ein Endgerät, so wird der Internetradiodienst ausgeblendet und man kann das iRadio als ganz normalen Funklautsprecher benutzen. Wird die Verbindung "entkoppelt", so wird automatisch wieder auf Internetradioempfang umgeschaltet und die Wiedergabe gestartet.

17.02.2019 

Es wurde ein Dienst hinzugefügt, der beim Update der Senderliste (playlist.m3u) über /boot oder einem USB-Stick, eine zeilensynchrone Liste mit Stationsnamen erzeugt.

Das das Erzeugen dieser Liste (die in /home/pi/.config/vlc/ liegt) einige Zeit in Anspruch nimmt, 6 Sekunden pro URL in der Senderliste, und diese Liste nur von bestimmten Skalensimulationen bzw. Displaydaemonen benutzt werden muss, ist die Funktion standardmäßig deaktiviert.

Um die erweiterte Updatefunktion der Senderliste zu aktivieren geht man wie folgt vor.

Nach der Installation oder dem Update des iRadios öffnet man die Datei /usr/bin/vlcd mit Adminrechten.

Danach kommentiert man die nachfolgend in Zeile 13 und 28 gezeigte Codezeile aus und speichert die Änderung ab.
 





Beim nächsten Neustart wird dann beim Einspielen einer Senderliste über /boot bzw. USB-Stick (FAT32 formatiert) automatisch die Liste mit Stationsnamen erzeugt 

28.8.2020

Raspberry Pi OS und Audioausgabe

Seit Mitte des Jahres 2020 nennt sich Raspbian nun "Raspberry Pi OS" und wegen Anpassungen an den neuen Raspberry 4 hat sich die Audio-Umschaltung geändert. 

So läßt sich jetzt die 3,5mm-Klinkenbuchse nicht mehr ohne weiteres aktivieren wenn ein HDMI-Kabel am Raspberry angeschlossen ist. Um dieses Problem zu umgehen empfehlen wir die Benutzung eines älteren Images von Raspbian. Die älteren Versionen stehen hier zur Verfügung:

https://downloads.raspberrypi.org/raspbian/images/

Auch bei den alten Betriebssystemen kann man die Sicherungsupdates weiter über das Paketsystem einspielen und ebenso Softwarepakete wie vlc updaten wenn man das möchte.

Ein weiteres Problem sind evtl. Lautstärkeanpassungen in der rc.local. Nicht nur dass sie mit Raspberry Pi OS nicht mehr funktionieren, sie können auch das Ausführen der rc.local unterbrechen und vlcd am Start hindern. 

Die amixer Anweisungen sind deshalb in der rc.local zu entfernen / auszukommentieren.

Installation einer USB-Soundkarte

USB-Soundkarten oder USB-Lautsprecher (die NICHT über Klinke laufen) sind eine gute und preiswerte Möglichkeit eine gute Tonqualität zu erreichen. Fast alle Soundkarten werden erkannt. Die Installation erfolgt in 2 Schritten. Zuerst wird mit:

aplay -l

 festgestellt ob die USB-Soundkarte eingebunden ist und welche Kartennummer ihr zugeordnet wird.

Die Ausgabe könnte z.B. so aussehen:


aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: ALSA [bcm2835 ALSA], Gerät 0: bcm2835 ALSA [bcm2835 ALSA]
 Sub-Geräte: 7/7
 Sub-Gerät #0: subdevice #0
 Sub-Gerät #1: subdevice #1
 Sub-Gerät #2: subdevice #2
 Sub-Gerät #3: subdevice #3
 Sub-Gerät #4: subdevice #4
 Sub-Gerät #5: subdevice #5
 Sub-Gerät #6: subdevice #6
Karte 0: ALSA [bcm2835 ALSA], Gerät 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
 Sub-Geräte: 1/1
 Sub-Gerät #0: subdevice #0
Karte 0: ALSA [bcm2835 ALSA], Gerät 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
 Sub-Geräte: 1/1
 Sub-Gerät #0: subdevice #0
Karte 1: Device [USB Audio Device], Gerät 0: USB Audio [USB Audio]
 Sub-Geräte: 0/1
 Sub-Gerät #0: subdevice #0

 jetzt wird mit: 

sudo nano /etc/asound.conf

die Datei asound.conf editiert bzw. neu angelegt, falls sie noch nicht existiert. 

Für den Fall oben USB Audio = Karte 1 muss der Inhalt der Datei dann so aussehen:

pcm.!default {
  type hw
  card 1
}

ctl.!default {
  type hw
  card 1

 beim nächsten Neustart erfolgt die Ton-Ausgabe dann über den USB-Port. Ein Test kann z.B. mit:

speaker-test -c2

erfolgen.

Die Lautstärkeeinstellung erfolgt wie gehabt über über ein gpiod , oder über das webinterface. In engeren Grenzen auch über den alsamixer. 

Lautstärkeeinstellung über Drehencoder 

die Drehencoder benötigen für iRadio pull-up Widerstände, normalerweise 10K gegen plus 5V. Encoder-Module mit bereits eingebauten Widerständen erleichtern den Aufbau.

Der code für eine Lautstärkeeinstellung ist fast identisch mit dem für Sendereinstellung. Es werden nur andere GPIO's benutzt und andere Befehle mit netcat abgesetzt (volup und voldown).

Da wir die wiringPi Bezeichnungen benötigen ist eine solche Tabelle dienlich:

 

 
Im Detail: wir kopieren im iRadio-Ordner die Datei rotary.c nach rotary_volume.c und die Datei install_Drehencoder.sh nach  install_volume.sh.
 
pi@rg261:~/iRadio $ sudo cp rotary.c rotary_volume.c
pi@rg261:~/iRadio $ sudo cp install_Drehencoder.sh install_volume.sh

 
In der rotary_volume.c passen wir die GPIOS's an. Z.B.:
 
#define  RoAPin    28  // GPIO-Pin 20, Pinnummer 38
#define  RoBPin    29  // GPIO-Pin 21, Pinnummer 40
 
und ändern die netcat-Anweisungen: 
 
if(flag == 1){
        flag = 0;
        if((Last_RoB_Status == 0)&&(Current_RoB_Status == 1)){
            system("echo \"volup 2\" | nc 127.0.0.1 9294 -N");
        }
        if((Last_RoB_Status == 1)&&(Current_RoB_Status == 0)){
            system("echo \"voldown 2\" | nc 127.0.0.1 9294 -N");
        }
 
die Zahl hinter volup und voldown bestimmt die Schrittweite der Lautstärkeänderung pro Impuls des Encoders. 
 
in der install_volume.sh werden alle gpiod - Einträge auf gpiod_volume geändert und die rotary.c Einträge auf rotary_volume.c:
 
#!/usr/bin/env bash

# ueberpruefe auf sudo-Rechte
if [ "$(id -u)" != 0 ]; then
  echo "Zur Ausfuehrung dieses Scripts sind Administratorrechte noetig"
  exit 1
fi

gcc /home/pi/iRadio/rotary_volume.c -o /home/pi/iRadio/gpiod_volume -lwiringPi

killall gpiod_volume
sleep 10

echo "Kopiere neuen Daemonen..."

cp /home/pi/iRadio/gpiod_volume /usr/bin/

echo "Aenderungen sind nach dem Neustart aktiv!"
 
 
evtl. muss mit chmod +x install_volume.sh das sh-script ausführbar gemacht werden.

Der mit:
 
sudo ./install_volume.sh
 
erzeugte daemon gpiod_volume muss händisch in die /etc/rc.local eingetragen werden, analog zu den anderen daemonen:
 
/usr/bin/vlcd
/usr/bin/displayd &
/usr/bin/gpiod &
/usr/bin/gpiod_volume &

 
 
 


 

Keine Kommentare:

Kommentar veröffentlichen