#13 – PiFM mit TinyCore

PiFM? Ist das eine skandinavische Süßspeise oder eine fernöstliche Kampfsportart? Und TinyCore – hat das was mit Microsoft zu tun? Weder noch, aber dazu gleich mehr… 😉

Anmerkung: Gleich als Vorwarnung – heute wird es etwas technischer, aber ich versuche nicht zu sehr abzudriften… Nächstes Mal gibt’s wieder etwas verdaulichere Kost – ich versprech‘s euch! 🙂

Zuerst wollen wir schauen, was ich beim Ausmisten gefunden habe:

a

Meinen guten alten Raspberry Pi! 🙂 Es ist die zweite Revision des Modells 1B von 2012 und somit das letzte Modell, welches noch eine SD-Karte (anstatt dem mittlerweile gängigeren MicroSD-Format) unterstützt.

Doch was macht man nun damit? Heutzutage gibt es wesentlich effizientere Kleinstcomputer, dagegen wirkt unser siebenjähriger Freund ja schon fast wie ein Monitor am Berliner Flughafen

Nun, ich habe mich für ein Projekt entschieden, welches in eine ähnliche Kerbe wie Artikel #7 schlägt. Unser betagter Freund soll ein Rentner-Leben als FM-Transmitter bekommen. So können – sofern das UKW-Signal tatsächlich mal irgendwann abgeschaltet werden sollte – auch meine alten UKW-Radios (wie mein Poppy) noch davon profitieren! 🙂

Gut, legen wir los. Was brauchen wir dafür? Zunächst mal eine SD-Karte. Passend, dass in der „muss ich noch ausmisten“-Box noch eine alte 2GB-SD-Karte gelegen war. Nicht gerade viel, aber zum Basteln sollte es reichen…

b

Realisieren möchte ich das Ganze mit einem möglichst ressourcensparenden Betriebssystem (u.a. auf Grund der geringen Größe der SD-Karte). Ein Glück, dass ein paar fleißige Bienchen „TinyCore Linux“ (im Folgenden „TC“ genannt) erdacht und für den Raspberry Pi portiert haben. Diese minimalistische Linux-Distribution benötigt nur schlappe 31 MB Speicherplatz und läuft nach einmaligem Ladevorgang vollständig aus dem Hauptspeicher heraus!

Einziges Manko: Das Handling ist etwas gewöhnungsbedürftig, da ein proprietärer Paketmanager zum Einsatz kommt. Als Optimist oder IT-Typ (die müssen auch häufig optimistisch sein) könnte man das auch als „technische Herausforderung“ sehen. 😉

Der Download von TC geht schnell. Nach dem Entpacken muss das Image auf die SD-Karte geschrieben werden, hierfür nehme ich immer gerne die Freeware Win32 Disk Imager.

c

Anschließend kann der Raspberry mit eingesteckter SD-Karte zum ersten Mal gestartet werden. Da TC bereits einen vorkonfigurierten SSH-Server mitbringt, hängen wir den kleinen Kerl auch gleich noch ans Netzwerk, so ersparen wir uns den Anschluss von Tastatur und Bildschirm! 🙂

d

Und siehe da, der erste Bootvorgang funktioniert reibungslos. Gut, dass die Entwickler eine README mit passenden Informationen (User, Passwort, Installationsanweisungen) mitliefern.

e

Nach dem ersten Bootvorgang muss nun noch etwas an der Partitionstabelle der SD-Karte geschraubt werden, denn TinyCore Linux benötigt neben einer primären FAT-Partition eine weitere Partition (z.B. ext4) um ggf. heruntergeladene Erweiterungen sowie Konfigurationsänderungen persistent zu speichern. Hierzu müssen wir „fdisk“ ausführen (keine Angst, auf die ganzen Parameter möchte ich jetzt nicht im Detail eingehen… 🙂 ):

sudo fdisk –u /dev/mmcblk0

f

Fun Fact: Um mir das Handling später leichter zu gestalten (Stichwort: Windows-Zugriff) habe ich gleich noch eine dritte FAT32-Partition angelegt über welche ich später die Musikdateien einfach auf die SD-Karte kopieren kann. Dafür muss diese nach der Partitionierung noch mit dem Befehl „mkfs.vfat – F 32 /dev/mmcblk0p3“ formatiert werden.

Theoretisch könnte man das auch mit einem USB-Stick bewerkstelligen, aber da die Stromversorgung des kleinen PCs nicht ausreicht bräuchte man entweder ein stärkeres Netzteil oder alternativ einen Hub mit externer Stromversorgung (auf die ich sehr gerne verzichten würde, denn das würde wohl das ganze wieder etwas bulliger machen).

Da leider kein Zugriff auf die /etc/fstab (Mounttable) besteht (diese wird ja bei jedem Reboot wieder mit dem Default überschrieben), müssen wir das Bootskript mit einem Mount-Befehl für die neu erstellte Partition versehen. Doch was ist das? Leider liefert TC nicht mal einen Editor mit (oder ich habe ihn einfach nicht gefunden 🙂 ).

Kein Problem, dann installieren wir halt schnell einen. Ich persönlich komme mit „Nano“ gut klar, das ist aber Geschmackssache. Verwendet man ein offizielles TC-Repository, so kann man über einen eigenen Befehl die entsprechende Anwendung installieren und auch gleich definieren, ob und wie diese mit in den Speicher geladen werden soll (der Parameter „wi“ besagt z.B., dass Nano beim Start des Systems geladen werden soll).

tce-load -wi nano.tcz

g

Nun können wir endlich unser Startskript bearbeiten und einen Mount-Befehl (sudo mount -t vfat /dev/mmcblk0p3 /mnt/mmcblk0p3) für unsere Fat32-Partition eintragen:

sudo nano bootlocal.sh

h

Damit die Änderung auch persistent nach einem Neustart vorhanden bleibt, wird mit folgendem Befehl die geänderte Datei auf der „Extensions-Partition“ (das ist die zweite) gesichert. Welche Dateien und Verzeichnisse durch das Skript auf die persistente Partition gesichert werden, wird in der Datei „/opt/.filetool.lst“ konfiguriert.

filetool.sh -b

i

Nun kommen wir zum eigentlichen Hauptdarsteller: „PiFM“. Diese kleine Softwarekomponente ermöglicht es, Audiodateien auf Pin 7 der GPIO-Leiste (programmierbare Input/Output-Pins) des Raspberry Pi durch Frequenzmodulation auszugeben – so die Theorie! 😉

Nach dem Download muss das Softwarepaket noch entpackt werden. Da es sich hierbei um keine offizielle TC-Installationsquelle handelt, habe ich die Dateien gleich von Windows aus zur Übertragung auf die zuvor erstellte „Musik-Partition“ auf der SD-Karte kopiert.

i2

Für einen ersten Test liefern die Entwickler auch gleich ein passend konvertiertes Sound-File mit. Dieses müssen wir jetzt nur noch auf einer bestimmten Frequenz ausgeben:

sudo ./pifm sound.wav 98.3

j

Fun Fact: Hierbei kann man auf dem Fehler „can’t open /dev/mem“ stoßen – blödes Rechtemanagement, dann nehmen wir halt doch den Superuser… 😉

Nun bräuchten wir nur noch ein Gerät, welches das gesendete UKW-Signal empfangen kann. Ich habe mich diesmal für einen alten SONY-Walkman entschieden (hört jemand noch Kassetten? 😉 ):

k

Und tatsächlich, wählt man die entsprechende Frequenz ertönt tatsächlich die mitgelieferte Beispielmelodie – Wahnsinn! 🙂

l

Fun Fact: Dieses Signal könnte man mit einer Antenne (ein ca. 20cm langes Stück Draht reicht) welche man an Pin 7 anlötet auf angeblich bis zu 100 Meter verstärken, aber davon lasse ich lieber die Finger… Wer Artikel #7 gelesen hat, weiß ja bereits, dass man mit Funk-Technologie immer vorsichtig sein sollte, solche FM-Transmitter genießen nur auf kurzen Distanzen ein legales Dasein.

Ein Problem bleibt jedoch noch: Leider ist PiFM in der Handhabung recht spröde und arbeitet lediglich mit WAVE-Dateien (*.wav) im Format „16 bit mono“ mit 22050Hz – puh, das ist nicht gerade „benutzerfreundlich“. 😉

Um eine MP3-Datei wiederzugeben, wird ein entsprechender Codec benötig. Dieser wird grundsätzlich von TC natürlich nicht mitgeliefert und muss installiert werden. Eigentlich kein Problem, denn auch hierfür gibt es ein vorgefertigtes Paket „ffmpeg.tcz“ – was für ein Glück – dachte ich…

Doch plötzlich wurde mir klar, dass „ffmpeg“ einige Librarys benötigen würde und so langsam kam ich ins Grübeln, ob die 50 für die „Extensions-Partition“ vorgesehenen MB tatsächlich ausreichen würden. Ein erlösendes Gefühl durchströmte mich, als die Installation (tce-load -wi ffmpeg.tcz) nach einigen Sekunden fehlerfrei durchlief und tatsächlich noch ganze 2,1MB („df“-Command) auf der Partition vorhanden waren – durchatmen 🙂

Leider hatte ich nicht mit der Hinterlistigkeit des blöden mp3-Codecs gerechnet, denn auf die reibungslose Installation folgten drei (!) äußerst unangenehme Stunden der Fehleranalyse, da einzelne Librarys nicht zu der eigensetzten „ffmpeg“-Version gepasst haben (*seufz* – ich und Linux werden wohl nie Freunde werden 😉 ).

Was soll das Gejammer – ist doch egal, denn schlussendlich wird jetzt tatsächlich eine MP3-Datei abgespielt, sofern man folgenden mega einfachen ( 😉 ) Befehl eingibt:

ffmpeg -i “/mnt/mmcblk0p3/music/o-zone – dragostea din tei.mp3” -f s16 le -ar 22.05k -ac 1 – | sudo /mnt/mmcblk0p2/pifm/pifm – 98.3

m

Fun Fact: Ja, als erstes Lied habe ich mich für „Dragostea Din Tei“ entschieden, hast du ein Problem damit? 😛

Doch jetzt geht die eigentliche Arbeit erst richtig los, denn jetzt muss der Aufruf ja noch automatisiert werden! Hierzu habe ich ein kleines Skript (playsong.sh) geschrieben (die vielen Fehlversuche und „Aha-Effekte“ erspare ich euch jetzt einfach mal):

n

Fun Fact: Vermutlich wird sich jetzt jeder „Shell-Skripter“ oder „Linux-Guru“ die Hände vor dem Gesicht zusammenschlagen… 😉 Ich weiß, es ist nichts Besonderes aber es funktioniert und ich bin stolz darauf 🙂

Der Aufruf via „sh playsong.sh“ muss jetzt noch in der Datei „opt/bootlocal.sh“ angegeben werden. Anschließend wird die Datei wieder über „filetool.sh -b“ auf die Extensions-Partition gesichert.

o

Damit wäre eigentlich alle Arbeit getan. Zu guter Letzt mache ich immer gerne eine Sicherung der SD-Karte, da diese – nicht zuletzt, weil man das Gerät immer im laufenden Betrieb einfach ausschaltet – schon mal den Geist aufgeben kann.

Fun Fact: Hierfür verwende ich nicht den Win32 Disk Imager, der tut sich leider mit der Sicherung eines ganzen Datenträgers (also mehrere Partitionen) immer noch etwas schwer. Stattdessen kommt „Roadkil’s DiskImage“ zum Einsatz, der ist da nicht so zickig und extrem leicht zu bedienen. 🙂

Jetzt bleibt eigentlich nur noch der Funktionstest! Wie „angedroht“ soll den mein Poppy Klappzahlenuhrradio übernehmen. 🙂

Erst mal den Strom anschalten:

p

Und dann ist es so weit – ganze 26 Sekunden später (wie gesagt, der Pi ist nicht der schnellste und die SD-Karte (es ist tatsächlich noch keine SDHC) trägt jetzt auch nicht gerade zur Performance bei) ist das gute Stück hochgefahren und beginnt tatsächlich von selbst Musik zu spielen!

Auch der Shuffle-Modus (ein großes Dankeschön an dieser Stelle an die Firma mit dem Stück Obst im Logo, die für diesen Begriff verantwortlich ist) funktioniert und es werden zufällig Lieder ausgewählt – Erfolg! 🙂

q

Ich bin dann mal weg, die 90er rufen: Ma-ia-hii, Ma-ia-huu, Ma-ia-hoo, Ma-ia-haa… 😉

Write a comment