Search:
Menu Raspi / RasPiRadioV2
Information

RasPiRadioV2 - Die zweite Version des RasPiRadio's

Beschreibung des Projektes Version 2

Es ist es nun schon eine ganze Weile her, seitem ich das RasPiRadio Projekt gestartet habe.
Mittlerweile gibt es ja den Raspi Zerro W, welcher ideal für dieses Projekt geignet ist.
Der geringe Stromverbrauch und das Vorhandensein eines WLAN Moduls ist perfekt.
Außerdem bauen wir weitere Funktionen ein:
1. UPnP/DLNA Support
2. AirPlay Support
3. Bluetooth Support (ist mir leider noch nicht ganz glungen)
4. Integration eines DAC's mit Class-D Audio Verstärkers (Adafruit I2S 3W Stereo Speaker Bonnet)

Aufbau


RasPiRadioV2 Hardware

Installation

Betriebsystem

Als Betriebsystem für den Raspi setzen wir Raspbian-Jessie ein. Link zur Downloadseite
Es hat sich gezeigt, das unter der ganz aktuellen Raspbian-Stretch Version nicht alle benötigten Pakete existieren.
Als erstes ist die Einrichtung des Systems notwendig:

sudo raspi-config


raspi-config

Einzustellen sind:

  • das Passwort für die Administration
  • der Hostname
  • die Localisation
  • Interfacing Options (ssh enable)


Dann benötigt des System die Zugangsdaten des WLAN.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
In dieser Datei wird der Inhalt entschrechend editiert.

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="WLAN-SSID"
        psk="WLAN-PASSWORT"
}


Wenn man möchte kann nun noch eine feste IP-Adresse konfiguriert werden.

sudo nano /etc/dhcpcd.conf
Hier trägt man beispielhaft folgende Zeilen ein:

# Example static IP configuration:
interface wlan0
static ip_address=192.168.1.107/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1


Als letztes bringen wir das Betriebsystem noch auf den aktuellen Softwarestand:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Nachdem die Installation und die Einrichtung des Betriebsystems abgeschlossen ist,
geht es los mit der spezifischen Einrichtung des Systems als Internetradio.

Installation vom Adafruit I2S DAC

Diese Anleitung basiert auf folgenden Link des Herstellers.

Als erstes holen wir uns ein Installationsscript des Herstellers und führen es aus.

curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash

Jetzt muss der Raspi neu gestartet werden.

sudo reboot

Wenn wir uns erneut eingeloggt haben, dann starten wir das Script noch einmal.

curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/i2samp.sh | bash


Nach einem darin enthaltenen Test ist die Soundkarte dann betriebsbereit.

Installation von UPnP und AirPlay

Das Einrichten von UPnP und AirPlay können wir uns erleichtern, wenn wir ein vorhandenes Projekt verwenden. Link

Dieses Prokekt nimmt uns sehr viel Konfigurationsarbeit ab und benötigt zunächst das Paket "git".

sudo apt-get install git

Dannach laden fir das Projekt und führen es aus.
git clone https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install.git
cd Super-Simple-Raspberry-Pi-Audio-Receiver-Install
sudo ./install.sh

Nach dem Ausführen von install.sh werden viele Fragen gestellt die wir folgendermaßen beantworten.

1. Install the Raspberry Pi Audio Receiver Car Installation
2. Install the Raspberry Pi Audio Receiver Home Installation
3. Install the Raspberry Pi Network Without Internet Installation (For t eaching!)
4. Install the Bluetooth Only Installation
5. Install the Snapcast Installation (BETA), choose from Snapcast Server , Client, or Both (Requires Minor Configuration)
6. Install a Custom Raspberry Pi Audio Receiver
Which installation would you like to choose? (1/2/3/4/5/6) : 6
Do you want to install SnapCast? (y/n): n
Do you want AirPlay Enabled? (y/n) : y
Do you want Bluetooth A2DP Enabled? (y/n) : n
Do you want to setup as an Access Point? (Necessary for AirPlay, in location without a Wireless Network) (y/n) : n
Do you want Kodi installed? (y/n) : n
Do you want to use infrared remotes? (y/n) : n
Do you want to use a Sound Card? (y/n) : y
Do you want to setup device as a UPnP Renderer? (y/n) : y
Do you want all the Devices to use the same name? (y/n) : n
AirPlay Device Name: RaspiAirPlay
UPnP Device Name: RaspiUPnP
Do you want to use an AirPlay password? (y/n) : n
0. No Sound Card
1. HifiBerry DAC Light
2. HifiBerry DAC Standard/Pro
3. HifiBerry Digi+
4. Hifiberry Amp+
5. Pi-IQaudIO DAC
6. Pi-IQaudIO DAC+, Pi-IQaudIO DACZero, Pi-IQaudIO DAC PRO
7. Pi-IQaudIO DigiAMP
8. Pi-IQaudIO Digi+
9. USB Sound Card
10. JustBoom DAC and AMP Cards
11. JustBoom Digi Cards
Which Sound Card are you using? (0/1/2/3/4/5/6/7/8/9/10/11) : 1

Es dauert nun ziemlich lange bis alle Pakete nachgeladen sind und das System entsprechend konfiguriert wurde.

Bluetooth habe ich testweise auch schon mit installiert, konnte aber keine befriedigenden Ergebnisse erziehlen.
Die Wiedergabe wurde immer wieder unterbrochen und stotterte stark.
Bitte probiert es doch einfach selber mal aus.
Vielleicht habe ich hier einen Fehler gemacht, oder es liegt an einer von mir verwendeten Komponente.

Wenn alles fehlerfrei abgeschlossen ist rebooten wir das System.

sudo reboot

Installation des MPD

Jetzt installieren wir den MPD wie auch schon im ersten Projekt.

sudo apt-get install mpd mpc alsa-utils netcat
sudo reboot

Anlegen eines Autostart Scrips, damit der Raspi per Remote Zugriff herunter gefahren werden kann.
sudo mkdir /var/scripte
sudo nano /var/scripte/autostart.sh

Der Inhalt von autostart.sh ist dann wie folgt einzugeben.

#!/bin/bash
#
# Autostart
#
# Über den Port 61000 ist ein Shutdown möglich.
#
netcat -l -p 61000 | /var/scripte/remoteshutdown.sh &

Dieses Script startet remoteshutdown.sh wenn es über den TCP Port 61000 angesprochen wird.
Auch remoteshutdown.sh muss angelegt werden.

sudo nano /var/scripte/remoteshutdown.sh

Der Inhalt ist.

#!/bin/bash
while read -r
do
        str0="$REPLY"
        if [[ "$str0" == "shutdown" ]]
        then
                echo "Shutting down..."
                sudo poweroff
        else
                echo "unknown Command: $str0"
        fi
done
# Script Ende

Diese beiden Scripte müssen nun noch auführbar gemacht werden.

sudo chmod 755 /var/scripte/autostart.sh
sudo chmod 755 /var/scripte/remoteshutdown.sh

Die autostart.sh wird jetzt noch in rc.local eingetragen, damit sie bei jedem Start des Systems aufgerufen wird.

sudo nano /etc/rc.local

Wir fügen vor "exit 0" eine neue Zeile ein.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/usr/local/bin/gmediarender -f RaspiUPnP&

/var/scripte/autostart.sh

exit 0

Jetzt erstellen wir eine neue Konfiguration für den MPD und sichern die alte Version.
sudo mv /etc/mpd.conf /etc/mpd.conf.old
sudo nano /etc/mpd.conf

Das ist der Inhalt, der speziell für diese Soundkarte angepasst ist.

music_directory    "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file            "/var/lib/mpd/tag_cache"
log_file           "/var/log/mpd/mpd.log"
pid_file           "/run/mpd/pid"
state_file         "/var/lib/mpd/state"
sticker_file       "/var/lib/mpd/sticker.sql"
user               "mpd"
port               "6600"

input {
    plugin        "curl"
}

audio_output {
    type          "alsa"
    name          "My ALSA Device"
    mixer_type    "software"
    mixer_control "PCM"
#    always_on     "yes"
}

filesystem_charset "UTF-8"
id3v1_encoding     "UTF-8"

Bitte der Datei noch die richtigen Rechte verpassen.

sudo chmod 666 /etc/mpd.conf

Jetzt benötigen wir noch eine Playlist.
sudo nano /var/lib/mpd/playlists/radiosender.m3u

Man kann diese dann mit seinen lieblings Radiostationen befüllen.
Hier ein Beispiel.

http://ndr-ndr1niedersachsen-hannover.cast.addradio.de/ndr/ndr1niedersachsen/hannover/mp3/128/stream.mp3
http://ndr-ndr2-niedersachsen.cast.addradio.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3
http://ndr-ndr903-hamburg.cast.addradio.de/ndr/ndr903/hamburg/mp3/128/stream.mp3
http://ndr-ndrkultur-live.cast.addradio.de/ndr/ndrkultur/live/mp3/128/stream.mp3
http://ndr-ndrinfo-niedersachsen.cast.addradio.de/ndr/ndrinfo/niedersachsen/mp3/128/stream.mp3
http://ndr-ndrinfospezial-live.cast.addradio.de/ndr/ndrinfospezial/live/mp3/128/stream.mp3
http://ndr-njoy-live.cast.addradio.de/ndr/njoy/live/mp3/128/stream.mp3
http://ndr-ndrblue-live.cast.addradio.de/ndr/ndrblue/live/mp3/128/stream.mp3
http://ndr-ndrplus-live.cast.addradio.de/ndr/ndrplus/live/mp3/128/stream.mp3
http://wdr-wdr2-ruhrgebiet.icecast.wdr.de/wdr/wdr2/ruhrgebiet/mp3/128/stream.mp3
http://wdr-wdr3-live.icecast.wdr.de/wdr/wdr3/live/mp3/128/stream.mp3
http://wdr-wdr4-live.icecast.wdr.de/wdr/wdr4/live/mp3/128/stream.mp3
http://wdr-wdr5-live.icecast.wdr.de/wdr/wdr5/live/mp3/128/stream.mp3
http://wdr-cosmo-live.icecast.wdr.de/wdr/cosmo/live/mp3/128/stream.mp3
http://wdr-cosmo-coslive.icecast.wdr.de/wdr/cosmo/coslive/mp3/128/stream.mp3
http://wdr-cosmo-selektor.icecast.wdr.de/wdr/cosmo/selektor/mp3/128/stream.mp3
http://wdr-kiraka-live.icecast.wdr.de/wdr/kiraka/live/mp3/128/stream.mp3
http://wdr-wdr-event.icecast.wdr.de/wdr/wdr/event/mp3/128/stream.mp3
http://wdr-vera-live.icecast.wdr.de/wdr/vera/live/mp3/128/stream.mp3
http://wdr-1live-live.icecast.wdr.de/wdr/1live/live/mp3/128/stream.mp3
http://wdr-1live-diggi.icecast.wdr.de/wdr/1live/diggi/mp3/128/stream.mp3
http://wdr-1live-planb.icecast.wdr.de/wdr/1live/planb/mp3/128/stream.mp3
http://wdr-1live-djsession.icecast.wdr.de/wdr/1live/djsession/mp3/128/stream.mp3
http://wdr-1live-neufuerdensektor.icecast.wdr.de/wdr/1live/neufuerdensektor/mp3/128/stream.mp3
http://wdr-1live-hiphop.icecast.wdr.de/wdr/1live/hiphop/mp3/128/stream.mp3
http://player.ffn.de/ffn.mp3
http://mp3.ffh.de/ffhchannels/80er.mp3
http://mp3.ffh.de/ffhchannels/hqeurodance.mp3
http://mp3.ffh.de/ffhchannels/hqsoundtrack.mp3
http://antenne-nds.hoerradar.de/mp3-128_antenne-nds?sABC=54rnrr3r%230%23op1o04oo3n29751r435ssq9466565184%23yvfgrayvir&amsparams=playerid:listenlive;skey:1424682558
http://antenne-nds.hoerradar.de/mp3-128_antenne-nds-charts?sABC=54rns043%230%23op1o04oo3n29751r435ssq9466565184%23yvfgrayvir&amsparams=playerid:listenlive;skey:1424683075
http://ice.rosebud-media.de:8000/88vier-ogg1.ogg
http://188.94.97.91/radio21.mp3
http://leinehertz01.htp.net:8000
http://mp3.planetradio.de/planetradio/hqlivestream.mp3
http://mp3.planetradio.de/plrchannels/hqitunes.mp3
http://mp3.planetradio.de/plrchannels/hqtheclub.mp3
http://tuner.gayfm.de
http://st01.dlf.de/dlf/01/128/mp3/stream.mp3
http://stream.104.6rtl.com/rtl-live/mp3-128
http://94.249.254.122:9800/listen1
http://rb-bremenzwei-live.cast.addradio.de/rb/bremenzwei/live/mp3/128/stream.mp3
http://rb-bremenvier-live.cast.addradio.de/rb/bremenvier/live/mp3/128/stream.mp3

Nach der vollständigen Einrichtung des MPD starten wir diesen neu oder alternativ auch das ganze System.
sudo /etc/init.d/mpd restart
sudo reboot

Leider hat sich gezeigt, das im aktuellen Raspbian Jessie Repository ein Bug im MPD enthalten ist, der dazu führt, das sehr viele Radiostationen nicht abgespielt werden können.
Wir sollten also prüfen ob diese fehlerhafte Version vorhanden ist.
Bitte hierzu die installierte Version abfragen.
mpd -V

Ist das Ergebnis eine Version "Music Player Daemon 0.19.1", so habe wir diesen Bug.
Eine "Music Player Daemon 0.19.9" ist hingegen fehlerfrei.

Ein Update auf Die Version 0.19.9 erfolgt folgendermaßen.

wget http://repo.volumio.org/Packages/Mpd/mpd_0.19.9-2_armhf.deb
sudo /etc/init.d/mpd stop
sudo dpkg -i mpd_0.19.9-2_armhf.deb
sudo apt-get -f install
mpd -V

Danach den Raspi oder den MPD wie oben neu starten.

Störgeräusche oder Knacken beim Wechsel von Audioquellen beseitigen

In diesem Zustand funktioniert unser Radio zwar schon, es gibt aber unangenehme Störgeräusche beim Wechsel von Radiostationen oder Audioquellen.

Das liegt an der Tatsache, das die Soundkarte kein kontinuierlichen Audio Stream mit konstanter Bitrate bekommt.
Die Lösung des Problems ist ein Dazwischenschalten eines Software-Audiomixers.

Zunächst editieren wir folgende Datei.

sudo nano /boot/config.txt

Am Ende sollten diese beiden Zeilen stehen.

dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap

Jetzt ändern wir diese Datei.
sudo nano /etc/asound.conf

Mit diesem Inhalt.

pcm.speakerbonnet {
   type hw card 0
}

pcm.!default {
   type plug
   slave.pcm "dmixer"
}

pcm.dmixer {
   type dmix
   ipc_key 1024
   ipc_perm 0666
   slave {
     pcm "speakerbonnet"
     period_time 0
     period_size 1024
     buffer_size 8192
     rate 44100
     channels 2
   }
}

ctl.dmixer {
  type hw card 0
}

Der User "pi" bnötigt dann noch eine .asoundrc Datei.
nano ~/.asoundrc

Der Inhalt ist.

pcm.speakerbonnet {
   type hw card 0
}

pcm.dmixer {
   type dmix
   ipc_key 1024
   ipc_perm 0666
   slave {
     pcm "speakerbonnet"
     period_time 0
     period_size 1024
     buffer_size 8192
     rate 44100
     channels 2
   }
}

ctl.dmixer {
    type hw card 0
}

pcm.softvol {
    type softvol
    slave.pcm "dmixer"
    control.name "PCM"
    control.card 0
}

ctl.softvol {
    type hw card 0
}

pcm.!default {
    type             plug
    slave.pcm       "softvol"
}

Ein Reboot des Systems ist wieder mal notwendig, damit die Äanderungen wirken.
sudo reboot

Test

Jetzt können wir das ganze lokal testen.
Hierzu verwenden wir den Music Player Client (mpc):

mpc load radiosender
mpc play 1
mpc stop

Screenshot der Android-APP RaspiPiRadio


RasPiRadio Screenshot

Die Android-APP RasPiRadio zum Download

RasPiRadio im Google Play Store

Beim ersten Aufruf der APP wird standartmäßig die 'radiosender.m3u' Playlist geladen und alle Einträge in der Liste angezeigt.
In dieser Liste sind die Sendernamen noch nicht richtig eingetragen, sondern nur die Link Adressen.
Beim Anklicken der Listeneinträge wird auf diesen Sender umgeschaltet und aus den Meta-Daten der richtige Sendername ermittelt.
Die APP merkt sich die Sendernamen in seiner eigenen Konfiguration (Datenbank).
Beim nächsten Aufruf der RasPiRadio-APP sind die Sendernamen sofort vorhanden.
Dieses Verhalten kann z.Z. keine andere MPD-Client-APP zur Verfügung stellen, so das es nur mit RasPiRadio kein Blindflug wird.

Im Gegensatz zum ersten Projekt muss nun in den Einstellungen der "Volume Exp." auf 1 gestellt werden, da die Lautstärke im Raspi Mixer jetzt nicht mehr exponential reagiert.
Bei der Verwendung von UPnP/DLNA oder AirPlay muss die Wiedergabe über den MPD mit dem Button in der APP gestoppt werden.

Du kannst dieses Projekt mit einer Spende unterstützen.

Maintainer: Reimar