Montag, 25. November 2013

Verschobener Link CarPi

Hallo ich habe den Artikel über die Shairport Konfiguration des Raspberry Pi überarbeitet, da das Projekt CarPi, also den Raspberry für das Auto zu verwenden erst mal auf Eis liegt.

Die Grundkonfiguration der Raspberry als Airplay-Empfänger findet ihr unter der Folgenden Adresse
komputermaschine.blogspot.de/2013/11/airpi.html

AirPi - Raspberry als WLAN Access Point und Airplay Empfänger

Hallo zusammen,
heute möchte ich meinen AirPi vorstellen - ein Raspberry, der Musik, Podcasts oder sonstigen Audioinhalte von einem iOS Device wie iPhone, iPod oder iPad über die Bordanlage meines Autos wiedergeben.
 
Ich habe in meinem Auto seit einigen Wochen einen AirPi in Betrieb. Ein guter Bekannter und begnadeter Schrauber hat dies gesehen und wollte das auch. Auf Grund der nicht ausgeprägten Kenntnisse mit Linux hat er mich gefragt ob ich eine Anleitung erstellen kann, damit er dies selbst versuchen kann. Ich habe eine Anleitung erstellt und somit den zweiten Raspberry in meinem Bekanntenkreis ins Auto gebracht. Mein Schrauber hat mich ermutigt, die Anleitung zu Veröffentlichen. Deswegen habe ich die Anleitung noch etwas geschliffen und poste diese heute als meinen ersten Blogbeitrag


Grundlegendes und Vorraussetzungen


Der Raspberry wird über einen WLAN Adapter einen Hotspot im Auto errichten, über welchen man sich mit meinem iPhone verbindet. Via Airplay-Emulator wird der Audiostream entgegengenommen und über 3,5mm Klinke an den AUX-Eingang des Autoradios weitergegeben. Die benötigte Hardware bekommt man bei Amazon.

Folgende Hardware habe ich mir direkt über Amazon auf den Basteltisch schicken lassen.

Wie Du siehst kostet die Komponenten ungefähr 60€, du kannst hier auf jeden fall auch andere Komponenten nehmen. Ich werde später im Blog darauf hinweisen, wenn andere Komponenten in der Konfiguration zu berücksichtigen sind.

Zusätzlich benötigst du zumindest für die Grundkonfiguration noch einen Monitor (am besten mit HDMI Kabel, eine Tastatur, zur Stromversorgung ein USB auf micro-USB Kabel Soll der Raspberry anschließend nicht über dein lokales WLAN konfiguriert werden benötigst du noch ein Netzwerkkabel. (Was zu empfehlen ist)

Für meinen Raspberry verwende ich als OS Raspbian, eine Version von Debian Linux. Du kannst Raspian direkt auf Webseite des Raspberry Projektes herunterladen. Danach wird Raspian auf die SD Card aufgespielt. An einem Windows PC benötigst du dafür das Tool Win32 DiskImager (auch für 64 Bit Windows). Installiere den DiskImager (später kann man dieses Tool super verwenden um vollständige Backups von der SD Card zu ziehen.) Ebenfalls benötigt man unter Windows noch einen SSH Client, der bekannteste dürfte wohl Putty sein

Die folgenden Abschnitte beschreiben die vollständige Installation von Raspian, den zusätzlichen Softwarepaketen und deren Konfiguration - Schritt für Schritt:

Erster Schritt: die SD Card bespielen

Bevor die SD Karte mit Raspbian bespielt werden kann muss die Karte im FAT Dateisystem formatiert werden. Starte anschliessend den Win32DiskImager und wähle
das entpackte Image von Raspbian aus (1), stelle dabei sicher, dass der korrekte Wechseldatenträger (2) ausgewählt ist und schreibe abschliessend das Image auf die Karte (3).
Das war es schon. Die Karte aus dem PC entfernen (sicheres Entfernen ;-) ) und im den Raspberry stecken.

Zweiter Schritt: Grundkonfiguration

Für die Grundkonfiguration wird der Pi mit dem HDMI Kabel an den Monitor und die via USB mit der Tastatur verbunden. Die SD Karte kommt in den Kartenleser. Um den Raspberry mit Strom zu versorgen kannst du das oben erwähnte microUSB Kabel mit deinem PC verbinden. Sobald Strom anliegt leuchten LEDs auf der Platine.
Auf dem Monitor durchläuft der Raspberry eine Bootsequenz, welche in einem beigen Konfigurationsbildschirm mit blauem Hintergrund beendet wird. Hier werden die folgenden Einstellungen gesetzt:
Expand_rootfs: Hiermit wird die recht kleine Initialpartition auf der SD auf ihre maximale Größe (abhängig von der SD) erweitert
Configure_keyboard: lege hier dein Wunschlayout für die Tastatur fest. Eigentlich ist das nicht wirklich relevant, da der PI nur zum konfigurieren an einer Tastatur hängt. Wenn man mit einer QWERTZ Tastatur arbeitet ist es auch naheliegend ein deutsches Keyboardlayout zu verwenden.
Change _pass: hier legst du das Passwort für den Standartnutzer fest
Change_locale: wer wünscht kann einen deutschen Zeichensatz auswählen (ist aber nicht notwendig)
Change_timezone: Europe àBerlin Berlin!!! Stuttgart gibt es ja nicht
Memory_split: die Standarteinstellung sollte auf 16MB Graphikspeicher stehen. Das reicht du verwendest den PI nicht wirklich Grafikintensive Anwendungen.
Ssh: muss enabled sein!
Boot_behaviour: no!!! Du benötigst normalerweise keinen Desktop.
Anschließend navigierst du mit der Tab Taste zu Finish und lässt den Pi neu booten.
Nach dem Reboot meldest du dich mit dem Nutzer pi und dem von dir gewählten Passwort an dem Raspberry an. Zu erst konfiguriere die Netzwerkeinstellungen, da du für die weiteren Schritte Internet benötigst
Dafür gibt es folgende Optionen:
  1. Der Raspberry wird über Netzwerkkabel in das Lokale Netzwerk gebracht, die IP wird automatisch über DHCP zugewiesen.
  2. Der Raspberry wird über Netzwerkkabel mit fest konfigurierter IP ans LAN angeschlossen
  3. Der Pi soll über ein WLAN Online gehen um weitere Pakete und Updates zu erhalten. Diese Variante beschreibe ich in einem separaten Blogpost da bei der Konfiguration des Hotspot die Einstellungen für den Zugriff auf das LAN / WLAN überschrieben werden.

1.) Netzwerkkonfiguration mit LAN und DHCP

Der Raspberry geht über ein Netzwerkkabel in einem LAN mit DHCP online.
Cool. Hier hast du die wenigste Arbeit! Zum Öffnen der Konfigurationsdatei verwende den Befehl:

sudo nano /etc/network/interfaces

Der Inhalt der Datei sollte dann wie folgt aussehen

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

Um deine Eingaben zu speichern drücke STRG + x, dann y und abschließend ENTER.

2.) Netzwerkkonfiguration mit LAN und fester IP Adresse

Soll der Raspberry eine statische IP Adresse benutzen um im lokalen Netzwerk zu kommunizieren, musst du zumindest die IP Adresse des Routers und eine nicht benutzte IP Adresse im Netzwerk kennen. Angenommen die Routeradresse lautet 10.1.1.1 und eine freie Adresse im Netz lautet 10.1.1.10 sieht die Konfiguration wie folgt aus:
Öffne die Konfigurationsdatei mit dem Befehl:

sudo nano /etc/network/interfaces


auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.1.1.10
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
gateway 10.1.1.1

Um deine Eingaben zu speichern drücke Strg + x, dann y und abschließend ENTER.

Für beide Konfigurationen

Wenn du das Netzwerkkabel angeschlossen hast, kannst du mit den folgenden Befehl die Konfiguration aktivieren: sudo ifdown eth0 && sudo ifup eth0
Ob die Einstellung erfolgreich war und eine IP Adresse vergeben wurde kann man erkennen wenn nach der Befehl ifconfig eth0 | grep inet eine inet addr: 192 oder inet addr 10 zurückgibt.
Bitte prüfe ob in /etc/resolv.conf der router als nameserver eingetragen ist.

sudo nano /etc/resolv.conf

sollte

nameserver 10.1.1.1

enthalten. Geht’s jetzt? Internet sollte anliegen also Kabel in den Pi und in den Router! Auf der Platine sollte eine LED anfangen zu blinken. Mit dem Befehl

ping –c 3 10.1.1.1 && ping –c 3 google.de

testest du ob der Router erreichbar ist und ob du mit dem Raspberry ins Internet kommst.

Dritter Schritt: Aktualisierung und Installation der Pakete für den Access Point

Im dritten Teil wird zu erst die Software des Raspberry aktualisiert und dann die zusätzlichen als Pakete bezeichnete Software nachinstalliert. Spätestens jetzt sollte auch der WLAN Adapter in einen der USB Ports gesteckt werden. Also zuerst wird der Raspberry aktualisiert, was ein Stückchen dauern kann. Fertig ist das Update, wenn wieder die Eingabezeile

pi@10.1.1.10 ~$

erscheint. Bei dem Update kann es passieren das einzelne Schritte mit Y oder YES bestätigt werden müssen.

sudo apt-get update && sudo apt-get upgrade

Im Anschluss an die Aktualisierung wird die die Firmware des Raspberry ebenfalls aufgefrischt.

sudo rpi-update

Danach sollte der Raspberry einmal neu gestartet werden. Dies geschieht mit dem Befehl

reboot

Nach ca einer oder spätestens zwei Minuten sollte der Raspberry über Putty wieder erreichbar sein und du kannst dich wieder anmelden. Dann werden die zusätzlichen Pakete installiert.
Zuerst installiere hostapd und udhcpd um im Auto das WLAN aufspannen zu können.

sudo apt-get install hostapd udhcpd

Hast du den WLAN Adapter, den ich oben auf der Hardwareliste beschrieben habe, dann muss dafür der Treiber aktualisiert werden. Prüfe zuerst ob wirklich die Version des WLAN Adapters verwendet wird. Dies geschieht mit dem Befehl:

lsusb | grep Edimax

Dies sollte eine Zeile zurückgeben die mit Realtek RTL8188CUS endet. Realtek macht es dir es nicht einfach an den Treiber zu kommen. Der Raspberry muss dazu am Monitor angeschlossen sein und sowohl Tastatur und ausnahmsweise eine Maus angeschlossen haben. In der Befehlszeile gibt man startx ein und eine graphische Oberfläche startet. Nach dem diese gestartet ist, klickst du auf der linken Seite auf das grüne Symbol Midori. In dem Browser gibt man dann www.realtek.com.tw ein und geht auf Downloads. Auf dieser Seite navigierst du zu Communications Network ICs --> Wireless LAN ICs --> WLAN NICàIEEE802.11 b/g/n Single Chip --> Software. Von diesem Link wird eine Liste mit verschiedenen Modellen geladen. Du wählst das Modell RTL8188CUS aus und klickst auf GO.

Auf der nächsten Seite suchst du nach Linux Kernel und wählst in der Tabelle UK1 oder US1 zum Download des Treibers. Es öffnet sich ein neues Tab oder ein neues Browserfenster und ein Downloadfenster öffnet sich und du kannst die Datei speichern.

Im Normalfall geschieht dies in den Ordner Pi. Ist der Download beendet, verlasse diese Oberfläche wieder indem auf das Symbol im linken Unteren Rand geklickt wird und dann logout. Darauf kommt ein Fenster in welchen du nochmal Logout klickst.

Okay, ab jetzt besteht kein Grund mehr, warum du dirket auf dem Raspberry arbeiten must. Du kannst auch mit dem Programm Putty in Windows auf den Raspberry zugreifen. Dazu schaue mit dem folgenden Befehl nach welches die IP Adresse deines Rechners ist:

ifconfig eth0 | grep inet

Also. Du schaltest den Monitor um (und ggf die Tastatur wieder an den PC anstecken) In Windows wird Putty gestartet. Gib die IP Adresse des Raspberry bei Hostname und einen Namen unter dem du die Einstellungen speichern möchtest. Dann Save klicken und du kannst dich später mit dem Raspberry verbinden, ohne jedes Mal die IP Adresse einzugeben.

Mit Open wird die Verbindung zum Pi aufgebaut. Dabei wird beim ersten Mal ein sogenannten Fingerprint abgefragt, der mit JA oder YES gespeichert werden soll. Nach Eingabe des Benutzernamen pi und dem Passwort, welches in der Grundkonfiguration vergeben wurde, meldet man sich am Raspberry an.

Gut, der Treiber ist heruntergeladen und muss diese jetzt noch entpackt und installiert. Also gehe in Putty in das Verzeichnis in welchen der Download liegt, dazu gib den Befehl

cd /home/pi

ein. Der Befehl

ls

sollte in der Antwort den Download RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip enthalten. Diese Datei kopiest du in das Verzeichnis /opt. Der Befehl lautet

cp /home/pi/ RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip /opt

Anschließend wird das Treiberpaket entpackt und der für dein WLAN Adapter korrekte Treiber ausgewählt, dieser muss noch einmal entpackt werden. Anschließend wird der Treiber kompiliert und installiert. Die letzten beiden Schritte können einige Minuten dauern. Die Befehle (jede Zeile einzeln eingeben) für die Installation:

cd /opt
unzip -q RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/
tar xzf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz -C /opt/
cd /opt/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd/
make
sudo make install

Super! Und schon hast du auf dem Raspberry einen Treiber kompiliert und installiert. Jetzt kommt die Konfiguration der heruntergeladenen Pakete.
Zuerst wird die Konfiguration der Netzwerkkarte angepasst. Die Datei /etc/network/interfaces wird wieder geöffnet

sudo nano /etc/network/interfaces

und folgende Zeilen an das Ende angefügt:

auto wlan0
iface wlan0 inet static
address 10.10.10.1
netmask 255.255.255.0

Gespeichert wird die Datei mit Strg +x, dann Y und Enter. Anschließend editierst du die Datei /etc/udhcpd.conf:

sudo nano /etc/udhcpd.conf

In der Datei sollten dann folgende Zeilen stehen:

start 10.10.10.2
end 10.10.10.20
interface wlan0
remaining yes
opt dns 10.10.10.1
option subnet 255.255.255.0
opt router 10.10.10.1
option lease 864000

Gespeichert wird wieder mit Strg+x, dann Y und Enter. Der uDHCP soll auch bei jeden Start aktiviert werden deswegen wird in die Datei /etc/default/udhcpd die Zeile DHCPD_ENABLED="no" auskommentiert, indem eine Raute # an den Anfang der Zeile geschrieben wird.

sudo nano /etc/default/udhcpd

Enthält dann den folgenden Eintrag:

#DHCPD_ENABLED="no"

Datei speichern und schliessen. Genau das war mit Strg +x, dann Y und Enter.
Es muss noch eine Datei erstellt werden, in welcher die Informationen zu den Vergebenen IP Adressen gespeichert werden. Die erfolgt über

sudo touch /var/lib/misc/udhcpd.leases

So du hast jetzt eine IP Adresse für die WLAN Karte, den DHCP Server, welcher dem iPhone eine IP Adresse gibt und jetzt konfigurierst du den WLAN Access Point an sich.
Dazu muss die Datei /etc/hostapd.hostapd.conf angepasst werden. Dabei kannst du die Einträge bei AirPi durch den Namen ersetzen, den dein WLAN haben soll. Ebenfalls das Passwort kannst du nach Wunsch anpassen. Da das Passwort hier im Klartext steht, nimm auf keinen Fall ein Passwort was du sonst irgendwo verwendest!

sudo nano /etc/hostapd/hostapd.conf

Die Datei sollte dann folgende Informationen enthalten:

interface=wlan0
driver=rtl871xdrv
ssid=AirPi
channel=1
wmm_enabled=0
wpa=1
wpa_passphrase=MeinPasswort
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0

So wie gehabt speichern und du hast es fast geschafft mit dem Raspberry dein mobiles WLAN zu erstellen. Du musst den Raspberry jetzt neu starten, damit auch alle Einstellungen übernommen werden.

sudo reboot

Wenn der Raspberry wieder erreichbar ist, testest du ob das WLAN jetzt funktioniert.
Schaue zuerst im Putty, ob dein WLAN-Adapter eine IP Adresse hat:

ifconfig wlan0

Prüfe ob der DHCP Server läuft:

ps –ax | grep udhcpd

hier sollten mindestens zwei Zeilen zurückkommen, von der eine „/etc/udhcpd.conf“ enthält.
Danach starte den hostapd.

sudo hostapd -dd /etc/hostapd/hostapd.conf

Im iPhone sollte unter den WLANs jetzt DEIN NEUES WLAN gelistet werden und du kannst dich verbinden! Genial. Klappt.
Zum Schluss werden die Einstellungen noch angepasst, das diese bei jedem Boot greifen. Dazu wird in die Datei /etc/default/hostapd der Eintrag DAEMON_CONF = “ “ angepasst:

sudo nano /etc/default/hostapd


DAEMON_CONF="/etc/hostapd/hostapd.conf"

Die Datei speichern und zum Schluss diese beiden Kommandos eingeben

sudo update-rc.d hostapd enable


sudo update-rc.d udhcpd enable

Jetzt wird das WLAN auch nach jedem Neustart wieder aufgebaut.

Vierter Schritt: Installation und Konfiguration von Airplay

Fein, du hast schon den Großteil des Tutorial durch und musst jetzt noch dafür sorgen, dass der Raspberry auch die Musik annimmt. Und wieder an das Audiosystem des Autos weitergibt.
Dies wird über ein Programm gemacht, das Shairport heißt. Also los! Installiere Shairport:
Zuerst benötigst du einige Pakete um Shairport lauffähig zu bekommen diese werden mit folgender Eingabe in Putty installiert:

sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl

Auch hier kann es passieren, dass einige Eingaben mit YES oder Y bestätigt werden müssen. Direkt danach installierst du noch das Perlmodul  perl-net-sdp:

git clone https://github.com/njh/perl-net-sdp.git perl-net-sdp
cd perl-net-sdp
perl Build.PL
./Build
./Build test
./Build install
cd

Lautet, muss der Schritt noch einmal wiederholt werden. Anschließend wird das Shairport Paket geladen, Shairport kompiliert und anschliessend noch die Startdateien in die entsprechenden Verzeichnisse kopiert.

cd /opt
git clone https://github.com/abrasive/shairport.git shairport
cd shairport
make install

Mit dem Befehl

./shairport.pl -a AirPi

kannst du testen ob Airplay funktioniert. Abbrechen mit Strg+C. Anschliessend wird mit den folgenden Befehlen der Shairport komiliert und so konfiguriert, dass er beim Booten startet.

cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
chmod a+x shairport
update-rc.d shairport defaults

Jetz erfolgen noch einige Anpassungen in dem Shairportscript. Die Zeile DAEMON = "" muss den Eintrag zu dem Script erhalten. In die Zeile DAEMON_ARGS wird der Name der in Airplay stehen soll eigetragen. Der Bereich sieht dann wie folgt aus:

sudo nano /etc/init.d/shairport

Enthält:

NAME=AirPi
DAEMON=" /opt/shairport/usr/local/bin/shairport.pl"
PIDFILE=/var/run/$NAME.pid
DAEMON_ARGS="-w $PIDFILE -a $NAME"

Fertig! Der Raspberry stellt dir jetzt ein WLAN zur Verfügung, über welches du die Musik von deinem IPhone, iPod oder iPad direct auf den Klinkenausgang des Raspberrys gibt. Dieser kann dann direkt an den AUX Eingang im Auto angeschlossen werden.

In einigen Fällen ist die Audioqualität vom Normalen Ausgang des Raspberry nicht so toll, in diesem Fall kann mit einer USB Soundkarte genutzt werden um die Musik auszugeben. Bei mir gehen beide Möglichkeiten. Soll der Sound über eine USB Soundkarte gehen benötigt der Raspberry folgenden Befehl:

amixer cset numid=3 0

Auch hier kann es in einigen Fällen zu Problemen kommen, dann kann es weiterhelfen, wenn die Datei /etc/modprobe.d/alsa-base.conf angepasst werden. Mit

sudo nano /etc/modprobe.d/alsa-base.conf

wird die folgende Zeile angepasst:

options snd-usb-audio nrpacks=1

Der Raspberry kann jetzt an einen Lautsprecher angeschlossen werden.
Bei Amazon gibt es eine große Anzahl an Gehäusen für den Raspberry, damit dieser gut geschützt ist.
Ich habe beispielsweise diesesfür mich bestellt.
Ebenfalls empfehlenswert ist ein SD Kartenadapter und eine Micro SD Karte zu verwenden, da hier die Karte nicht aus den Gehäusen raus schaut. Ich habe diesen Adapter von T-Flash Micro SD. Dazu benötigst du dann jedoch auch eine MicroSD Karte, wie diese von Kingston mit 8GB Class 4.

Ich hoffe der Blogpost hat euch geholfen. Für Verbesserungen und Hinweise bin ich Dankbar.


Abschliessend möchte ich noch auf einige andere Blogs und das Raspberry Forum verweisen, welche die hier beschriebenenen Themen behandeln:
 In einem der nächsten Blogs werde ich das Thema Stromversogrung genauer beschreiben. Wie man den Raspberry dazu bekommt, im Auto den Raspberry sauber zu Starten und auch beim Abschalten der Zündung noch genügend Zeit zu geben sich herunterzufahren.



-------------------------------
Änderungen
- 2014-07-20: Rechtschreibkorrektur und Anpassungen der Behfehle
- 2014-09-12: CSS der Code Sniplets überarbeitet