|
Einleitung
Eine Wetterstation, welche MP3s abspielen kann .... ok, braucht man so etwas?
Wohl nicht so unbedingt, aber
ein derartiges doch leicht "nerdiges" Gerät hat hier bei mir das Licht
der Welt
erblickt.
Das Konstrukt basiert auf einer Art Starterset der Firma
Tinkerforge
. Diese recht neue Firma bietet ein elektronisches Baukastensystem an. Dieses besteht aus
"Bricks", "Bricklets" und noch einigen anderen Sachen. Bricks sind stapelbare kleine Platinen
mit Mikroprozessoren, welche das Herz einer daraus zusammengesteckten Einheit bilden. Es gibt
"Master Bricks", welche als Koordinator (und Anschlussmöglichkeit für
Bricklets) dienen. An einen Servobrick können Servomotoren angeschlossen werden,
an einen Stepper Brick Schrittmotoren (und auch Bricklets, aber weniger als bei
den Master Bricks). Bricklets können an Bricks angestöpselt
werden und beinhalten Sensoren oder Elemente zur Ein- und Ausgabe, z.B. digitale IO-Ports
oder Stromsensoren. Bricks werden über USB an einen PC angeschlossen, man kann sie aber
auch über "Extensions" z.B. über WLAN ansprechen.
Auf dieses Baukastensystem, welches im Laufe der Zeit auch noch erweitert wird, bin ich
durch einen Artikel in der Zeitschrift
ct
gestossen und war aus nicht näher bekannten Gründen irgendwie davon fasziniert.
Ich habe mir dann ein Starterset zugelegt und etwas damit herumgespielt.
Gut, da hatte ich dann so einen Master Brick, an dem ein Temperatur-Sensor-Bricklet, ein
Bricklet zur Feuchtigkeitsmessung, ein Druckmesser und ein LCD-Display hingen. Angeschlossen an
einen PC, kann man mit dem mitgelieferten "Brick Viewer" die Sensoren betrachten. Mit einem
Java-Programm (eine API für etliche Programmiersprachen wird zur Verfügung
gestellt) habe ich das dann "zusammengefasst" und die Werte auf dem LCD-Display ausgegeben.
Das ist bislang reine Spielerei, und Tinkerforge bietet so etwas auch als
"Wetterstation" in einem Bausatz mit schickem Plexiglassgehäuse an. Aber irgendwie
bin ich dann auf die Idee gekommen, dieses Konstrukt könnte doch dann eigentlich
auch Musik spielen. Eine Wetterstation ist zwar jetzt nicht typischer Weise etwas, was man
mit einem MP3-Spieler kreuzen würde, aber ... man kann ja nicht immer nur
sinnvolle Sachen machen ;-). Zumal würde sich das LCD-Displayx durchaus anbieten, dann
dort neben Temperatur, Druck und Feuchtigkeit auch z.B. das Musikstück anzuzeigen. Und
die vier Druckknöpfe des Displays könnten zur Steuerung dienen.
Aber einen PC an diesem Konstrukt dranhängen haben zu müssen ist natürlich
unschön. Und so dachte ich, man könnte doch als Steuergerät einen
Raspberry Pi
, einen recht preisgünstigen Minicomputer auf ARM-Basis als Steuercomputer nehmen
und mit in das schicke Gehäuse der Wetterstation stopfen, zumal Tinkerforge den für
die Kommunikation per USB nötigen "brickd" auch für den Raspberry Pi anbietet. Und
eine hardwareoptimierte Java-Version für den natürlich mit nicht überragend viel
Rechenpower ausgestatteten Raspberry gibt es von Oracle (wer das nicht mag: Es gibt auch
freie Implementationen).
Aufbau der MP3-Station
Somit habe ich mich also hingesetzt, die Wetterstation mit leichten Ergänzungen
zusammengebastelt, einen Raspberry Pi hineingestopft und dem Ganzen noch über einen
WLAN-USB-Stick einen drahtlosen Netzwerkzugriff spendiert. Das ganze Konstrukt besteht also nun
aus folgenden Komponenten:
- Raspberry Pi: Auf diesem (vormals Modell B, jetzt Modell 2, s.u.)
läuft das Java-Programm, welches die Tinkerforge-Komponenten
steuert, die MP3s verwaltet und spielt und zudem über einen Mikro-Webserver auch
neben dem LCD eine
Web-Steueroberfläche für das Gerät bietet.
- Auf dem Raspberry gibt es aus Kostengründen keine RTC, also keine Echtzeituhr, welche
die Zeit auch bei abgeschaltetem Raspberry behält. Das ist für eine MP3-Station auch
nicht unbedingt nötig, aber dennoch hatte ich zwischenzeitlich dem Raspberry eine aufsteckbare
RTC
von ABelectronics spendiert. Die Anbindung geschieht über den I2C-Bus.
Inzwischen verwende ich diese allerdings nicht mehr, die MP3-Station
holt sich über das Netz die aktuelle Zeit.
- Step Down Power Supply: Eine Grundplatine für Bricks, um diese mit Strom zu versorgen.
Das geht zwar auch über den USB-Anschluss, aber ich verwende dies, um das ganze System
mit Strom zu versorgen: Ein Netzteil speist das Power Supply und dieses automatisch die
aufgesteckten Bricks (und damit auch die Bricklets). Ausserdem hat das Power Supply einen
5V-Ausgang, welcher sowohl den Raspberry Pi mit Strom versorgt als auch einen kleinen
Lautsprecher (schliesslich will man die Musik ja auch hören).
- Master Bricks (2 Stück): Über diese sind die ganzen Bricklets angeschlossen, und
der untere der beiden ist an den Raspberry angeschlossen. Über diese Verbindung kann
das Java-Programm die Tinkerforge-Elemente steuern.
- Temperatur-Bricklet: Misst die Temperatur
- Helligkeits-Bricklet: Misst die Helligkeit (irgendwie nur bedingt aussagekräftig, aber
egal ;-))
- Feuchtigkeits-Bricklet: Misst die Luftfeuchtigkeit
- Druck-Bricklet: Misst den Luftdruck
- LCD-Bricklet: das beleuchtete 4x20-stellige Display dient zur Ausgabe von Messwerten und
Angabe von Lied und Künstler. Je nachdem, ob das Gerät spielt oder nicht, werden
verschiedene Daten angezeigt. Da die untere Zeile immer als "Beschriftung" für die
4 Knöpfe des Displays dienen, bleiben nur drei Zeilen übrig, und die Informationen
werden teilweise wechselnd dargestellt.
- IR-Entfernungs-Bricklet: Öhm .... klar, misst die Entfernung, aber wozu? Nun ja,
im Laufe der Entwicklung habe ich dem Gerät beigebracht, optional die LCD-Beleuchtung
z.B. dann abzuschalten, wenn die Musik spielt, aber niemand vor dem Gerät steht. Erst, wenn
man sich davor stellt, geht das Licht wieder an - oder wenn die Musik wechselt.
- Quad-Relay-Bricklet: Ein Bricklet mit 4 elektronischen Relais. Und wozu das bei einem
MP3-Spieler? Nun, es hat sich gezeigt, das der angeschlossene Aktivlautsprecher, der über
einen USB-Stecker mit Strom versorgt wird und natürlich auch einen Akku besitzt, im
abgeschalteten Zustand Strom zurück in das System schickt. Das hatte zwar wohl
(erstmal) keine
schlimmen Auswirkungen, aber z.B. leuchtete die Power-LED des Raspberry immer matt. Kam mir
also irgendwie nicht richtig vor, also habe ich die Stromversorgungsleitungen für den
"Brüllwürfel" über diese Relais gesteuert: Nur wenn wirklich Musik gespielt
wird, wird der Lautsprecher mit Strom versorgt. Und da es sich um Solid State Relays handelt,
ist deren Stromverbrauch beim Schalten deutlich geringer als bei normalen
elektromechanischen Relais.
- 2-Knopf-Bricklet: Die mit blauen LEDs beleuchtbaren kleinen Knöpfe
erweitern die Möglichkeit zur Bedienung der MP3-Station.
Dieses Bricklet stammt
aus einem Schwung
neuer Bricklets
. Ich habe durch diese Tastenerweiterung die ansonsten in einem Untermenü versteckte
Lautstärkesteuerung schnell zugreifbar gemacht. Ausserdem kann man mit dem LEDs auch
noch ein wenig Schabernack treiben ;-)
Inzwischen ist diese Funktion deaktiviert, weil .... siehe
nächster Punkt:
- 12-Tasten-Feld: Durch das "Multi-Touch-Bricklet" kann man
Tastendrücke über kapazitive Sensoren registrieren. Durch ein
12-Tasten-Feld (3x4) kann ich nun diverse Funktionen bequem aktivieren
und brauche nicht mehr die doch etwas versteckt liegenden Taster des
LCD-Displays drücken. Um die Tasten vernünftig zuordnen
zu können, habe ich auf das Tastenfeld einen Zettel mit entsprechenden
Beschriftungen befestigt.
Da ich durch die zwei Master-Bricks "nur" 8 Bricklets ansprechen kann,
musste ich für das Sensorfeld das 2-Knopf-Bricklet deaktivieren,
aber durch die grosse Menge von Feldern spielt das keine Rolle. Nur um
das blaue Licht ist es schade ;-)
- Edimax EW-7811Un WLAN USB Stick: Zusammen mit dem "HostAP"-Programm sorgt dieser kleine
Stick dafür, das man sich mit dem Gerät verbinden kann. Der Raspberry stellt dabei
einen Access Point dar, d.h. das System ist autark und man kann sich einfach daran anmelden.
Über diese Verbindung kann man dann auch den Webserver des Java-Kontrollprogrammes erreichen
und den MP3-Spieler steuern. Und natürlich hat man auch normalen Netzwerkzugang zum
Raspberry und kann beispielsweise weitere MP3-Dateien auf die SD-Karte kopieren oder das
Java-Steuerprogramm updaten.
Inzwischen ist das HostAP-Programm aber deaktiviert und das Gerät
registriert sich ganz normal beim lokalen WLAN-Router. Es ist dann zwar
nicht mehr so "mobil", aber so richtig für den Transport ist das
Gerät eh nicht gedacht.
- Aktivlautsprecher: Damit man die Musik auch hören kann ;-). Der Lautsprecher wird per
USB mit Strom versorgt (da damit dann alle Geräte 5V verwenden, ist die Stromversorgung
einfacher). Die Tonsignale kommen über einen einfachen Klinkenstecker vom Raspberry.
Funktionen
Nach dem Booten wird, so die Bricks wirklich angeschlossen sind, automatisch
das Java-Steuerprogramm
gestartet. Dieses initialisiert die Tinkerforge-Hardware, liest die auf der SD-Karte
befindlichen MP3-Dateien ein, startet den Webserver und beginnt dann mit seiner Arbeit:
- Speichern der Meldungen der Sensor-Bricklets (die API bietet dazu "Listener" an, d.h.
man kann sich über Änderungen der Daten informieren lassen. Die Umsetzung, d.h.
die Benachrichtigungsfunktion selbst, wird durch die Bricks abgehandelt)
- Steuern des LCD-Displays: Abhängig vom Modus (Musik spielen ja oder nein) werden
abwechselnde Sensordaten und ggf. Musikdaten angezeigt.
- Abspielen des MP3-Stückes (für das eigentliche Abspielen wird
JLayer
verwendet, beim Ermitteln der MP3-Tags hilft die
Java ID3 Tag Library
). Ist das laufende Stück zu Ende, wird automatisch ein beliebiges anderes gestartet, bis
das Abspielen angehalten wird.
- Reagieren auf Betätigung der Knöpfe des LCD-Displays, um z.B. das Musikstück zu
wechseln, die Lautstärke zu ändern, das Abspielen zu stoppen
oder das Gerät auszuschalten (dann wird
der Raspberry automatisch heruntergefahren)
- Ein- und Auschalten der LCD-Beleuchtung in Abhängigkeit, ob Musik gespielt wird oder
nicht, und ob jemand vor dem Gerät steht.
- Betreiben des Webservers (das Grundkonstrukt ist hier der
NanoHttpd
, ein sehr kleiner HTTP-Server, natürlich auf Java-Basis). Ruft man über einen
Browser (z.B. den eines Smartphones oder Tablets) diese Seite auf, kann man darüber die
MP3-Wetterstation steuern:
- Allgemeine Anzeige der aktuellen Sensordaten und des laufenden Liedes
- Informationen über die Tinkerforge-Komponenten, Programmversion und Java-Daten
- Lautstärkeregelung
- LCD-Lichtsteuerung
- Anzeige der MP3-Liste, so das man auch ein bestimmtes Lied starten kann und nicht nur
ein zufälliges.
- Messverlauf der Sensoren über eine gewisse Zeit (die MP3-Station ist als Basis ja immer
noch eine Wetterstation ;-))
- Rudimentäre Playlistenverwaltung (anlegen, ändern, löschen). Playlisten
können dann sowohl über die Weboberfläche als auch über das LCD-Display
gestartet werden.
- Steuern der Solid State Relays, um den angeschlossenen Lautsprecher mit Strom zu
versorgen, wenn notwendig.
- Die MP3-Station kann auch Livestreams (also "Internet Radio")
abspielen. Die Liste muss zwar von Hand gepflegt werden, aber so
viele verschiedene Radiosender hört man ja nun auch nicht. Ist noch frisch
und sicher mit Fehlern behaftet, funktioniert aber schon ganz gut.
Wenn
in dem Stream Metainformationen (meist der Titel des gerade gespielten
Stücks) enthalten sind, werden diese aus dem Stream extrahiert und
auf der Weboberfläche oder dem LCD-Display angezeigt. Mit einem Plugin
der
LED-Tafel
kann diese Metainformation auch von dort abgerufen und "in gross"
dargestellt werden.
Über die Menge der für die Station notwendig gewesenen Euros will ich lieber den
Mantel des Schweigens breiten. Natürlich wäre es preiswerter gewesen, sich im Laden
ein MP3-Spiel-Dings zu kaufen, aber .... na ja, die Station hat doch schon was. Bischen
"nerdig" vielleicht, aber individuell und weitgehend mit der eigenen kleinen Hände Arbeit
erstellt.
Und Spielen tut sie halt auch ;-)
Umbau
Irgendwann hatte sich bei der MP3-Station allerdings der ärgerliche
Effekt eingestellt, das zwar selten, aber dennoch ab und an beim Start
eines Liedes das gesamte System eingefroren ist. Das war natürlich
wirklich nervend, daher habe ich mich entschlossen, das System etwas
umzubauen. Das fing damit an, das ich die Komponenten aufgrund der
kompakten Verbauung erstmal auseinander genommen habe und auf eine
Experimentierplatte geschraubt habe, damit ich diese zur Fehlersuche
austauschen konnte. Da ich davon ausgegangen bin, das es
ein Problem mit der Hardware ist (beim Einfrieren konnte ich mich
nicht einmal mehr am Raspberry anmelden), habe ich dann den Raspberry Modell B
gegen das neuere Modell 2 ausgetauscht. Das hat dann auch den Vorteil, das
das ganze System wegen des schnelleren Prozessors auch etwas geschmeidiger
läuft (auch wenn das eigentlich nicht wirklich ein Problem war, aber
beim Start, insbesondere beim Laden der MP3-Infos, ist das inzwischen
deutlich schneller).
Weil die Komponenten eh schon gelöst waren, habe ich dann die
Firmware der Tinkerforge-Bausteine auf den neuesten Stand gebracht.
Nach der Installation des Raspbian-OS, Konfiguration und dem Einspielen
der Daten der MP3-Station lief dann tatsächlich wieder alles wie
vorher .... zumindest im Prinzip: Es kam zwar Musik aus dem Lautsprecher,
aber die Qualität war schlechter als beim alten Modell.
Jetzt ist die Klinkensteckerbuchse bzw. das auf dem Raspberry verbaute
"Soundsystem" qualitativ eher minderwertig, aber in dieser Konstellation
war das Rauschen deutlich hörbarer als beim Vorgänger, auch wenn
der Sound angeblich etwas besser hätte sein sollen.
Da dies aber nun nicht so war, habe ich eine relativ preisgüstige
USB-Soundkarte (natürlich nach vorheriger Suche in
Kompatibilitätslisten) an den Raspberry gesteckt. Es gab dann noch
etwas Ärger, weil das Java-Programm irgendwie nicht den USB-Sound
nehmen wollte, obwohl das entsprechend der ALSA-Konfiguration eigentlich
hätte gehen sollen (oder ich habs nicht richtig gemacht ;-)), aber
nach dem Entfernen des Treibers für den internen Sound ging es dann
problemlos. Und der Sound ist nun deutlich besser als vorher.
Da ich nun allerdings keine Lust mehr hatte, die Komponenten wieder in das
alte Gehäuse zu bauen (was wegen der USB-Soundkarte auch gar nicht
mehr geklappt hätte), habe ich dann die meisten Komponenten auf der
Experimentierplatte gelassen und diese in dem Siteboard versteckt, auf
welchem die Station eh schon stand. Die Bedienelemente habe ich in
Gehäusen auf das Board gestellt und die Kabel durch ein schnell
gebohrtes Loch in der Rückwand geführt. Jetzt sieht das Ganze
auch ein wenig geschmeidiger aus und nicht mehr ganz so nerdig ;-)
©2020 Holger Thiele
generiert aus "mp3station.template" vom 05 05 2016
|