Einleitung
Hier stelle ich nun eine Schritt-für-Schritt Bauanleitung für ein MP3 Kinderradio vor.
Es sind keine technischen Kenntnisse notwendig um es nachzubauen. Lediglich etwas handwerkliches Geschick und ein geübter Umgang mit einem Lötkolben sollten vorhanden sein.
Hier könnt ihr euch schon mal ansehen wie es dann fertig aussieht.
Einkaufsliste
Alles was wir brauchen, können wir bequem bei Amazon bestellen
Technische Sachen
Raspberry Pi 3
64GB Speichkarte
Netzteil 3,1A
Pi Supply
Display
Mifare Reader
NFC Sticker
Jumper Kabel
Acrade Button (grün)
Arcade Button (rot)
Arcade Button (gelb)
Arcade Button (blau)
Logitech USB PC-Lautsprecher
kurzes USB Kabel
USB Verlängerung
Micro-USB Einbaubuchse
Powerbank
Ganz klar, wir brauchen einen Raspberry Pi 3. Er bietet uns genügend GPIO-Pins um alles anzuschließen und hat gleichzeitig WLAN an Board um unsere Junior-Jukebox mit neuer Musik zu versorgen.
Der Pi Supply ist eine kleine Platine, die ich nicht mehr missen möchte. Dadurch ist es möglich den Raspberry per Knopfdruck ein- und wieder auszuschalten. So wie man es von jedem handelsüblichen Radio ja kennt.
Diesmal habe ich nicht das original Netzteil von Raspberry genommen, sondern ein leistungsstärkeres (Netzteil 3,1A). Denn es muss ja nicht nur der Raspberry versorgt werden, sondern auch die anderen Bauteile. Gerade die Buttons und die Lautsprecher brauchen viel Saft.
Bei den Acrade Button kann man den Deckel abnehmen und mithilfe von Folie, die für den Drucker geeignet ist, mit den passenden Funktions-Icons versehen. Dadurch greifen sich die Logos nicht ab und es sieht etwas professioneller aus.
Das kurze USB Kabel, die USB Verlängerung und die Micro-USB Einbaubuchse sind später dafür da, damit man die Powerbank später laden kann, ohne den Koffer öffnen zu müssen. Alternativ kann so auch das Ladekabel direkt angeschlossen werden und somit wird der Akku geschont, wenn das Radio nur teilweise mobil sein soll.
Natürlich muss das Radio nicht mit einer Powerbank betrieben werden, aber somit ist es super mobil.
Empfehlen kann ich auch noch, dass du dir ein Dupont Set kaufst, denn so kann man die Stecker bequem als ein Bündel zusammenfassen bzw. auch mal defekte Stecker schnell neu crimpen ohne gleich das Kabel auszutauschen.
Gehäusebauteile
Alukoffer
Filz (weiß)
Filz (grün)
Rahmen fürs Display
Sprühkleber
Anstelle des Alukoffer kann natürlich auch etwas selbst entworfen werden. Aber wir hatten den Koffer noch übrig. Er hat zwei Vorteile. Er ist leichter als eine vergleichbare Holzkiste und durch den Griff kann er wunderbar durch ein Kleinkind transportiert werden.
Wir haben uns auch für Grün-Weiß entschieden, da es am besten zu den Möbeln unseres Kindes passt.
Den Sprühkleber brauchst du, um den Filz auf dem Koffer zu bekommen.
All unsere Teile wurden geliefert, das Gehäuse ist nach unseren Wünschen gebaut.
Und nun heißt es die Teile alle schön einzubauen und zu Verkabeln.
Aber wohin nur mit all den bunten Kabeln?!
Keine Angst, ich habe mal einen kleinen Plan aufgestellt, der genauso farbenfroh auch in echt dann aussieht.
Um die kleine SD Karte mit Raspbian zu bespielen, brauchen wir Win32Disk Imager.
Das können wir uns bequem hier runterladen.
Das Programm mit den Standardeinstellungen installieren.
Nun brauchen wir natürlich auch noch das Raspbian.
Das laden wir uns hier runter.
Die im Lieferumfang enthaltende SD-Karte stecken wir in unserem PC und starten das Win32Disk Imager Programm, dass wir zuvor installiert haben,
Nun musst du auf den kleinen blauen Ordner klicken und zu dem Pfad navigieren, wo du das Image gespeichert hast. Wenn du in dem sich geöffneten Fenster dann auf "Öffnen" geklickt hast, sollte es nun so aussehen.
Als nächstes installieren wir unseren Mifare RC522 Reader. Dazu habe ich mal ein kurzes Video erstellt, in dem ihr sehen könnt, welche Befehle ihr wann eingeben musst.
Wem die Befehle zu schnell gingen, hier dann noch mal die Schritt für Schritt Anleitung mit vielen bunten Bildern. :)
Als erstes verbinden wir uns mit Putty über SSH.
Dort geben wir als erstes
sudo raspi-config
ein.
Und navigieren zu
Interfacing Options
Im nächsten Menü wählen wir dann
SPI
aus.
Bestätigen mit YES und wählen OK aus. Und schon sind wir wieder bei unserer Shell.
Ob die Aktivierung geklappt hat, können wir ganz einfach überprüfen.
Dazu öffnen wir die config.txt mit
sudo nano /boot/config.txt
und dort muss dann fast ganz unten
dtparam=spi=on
drin stehen. Wenn ein # davor steht, dann ist die Zeile auskommentiert. Dann einfach das # entfernen.
Mit STRG+O speichern und STRG+X die Datei schließen.
Ein nächster Test zeigt uns, ob der SPI nun wirklich funktionieren wird und wir alles richtig gemacht haben.
Dazu geben wir
lsmod | grep spi
ein und die Ausgage sollte so ähnlich wie diese aussehen.
Um eine möglich einfache Bedienung zu haben, nutzen wir die Erweiterung von Louis Thiery & Connor Wolf.
Um auf unseren SPI Bus nun zugreifen zu können, laden wir uns erstmal deren Bibliotheken herunter.
Dafür einfach folgende Befehle eingeben und warten bis sie erfolgreich ausgeführt wurden.
sudo apt.get install git python-dev --yes
sudo apt-get install python2.7-dev
git clone https://github.com/lthiery/SPI-Py.git
Nun wechseln wir mit
cd SPI-Py
in unseren neuen Ordner und unsere Shell sieht nun so aus
Von dort starten wir nun die Installation mit
sudo python setup.py install
Wir verlassen den Ordner mit
cd ..
und laden uns die nächste notwendige Bibliothek mit
git clone https://github.com/mxgxw/MFRC522-python.git
herunter.
Nun wechseln wir wieder in unseren neu erstellten Ordner mit
cd MFRC522-python
und bearbeiten dort die MFRC522.py mit
sudo nano MFRC522.py
In Zeile 10 finden wir ein 22 in eine 11 geändert werden muss.
Und in Zeile 113 ändern wir wieder die 22 in eine 11.
Mit STRG+O speichern und mit STRG+X beenden
Nun starten wir den Raspberry Pi mit
sudo reboot
neu.
Die Installation des RFID/NFC Readers ist damit abgeschlossen.
Um zu Testen einfach wieder mit
cd MRFC522-python
in den Ordner wechseln und
sudo python Read.py
eingeben.
Nun könnt ihr eure Tags vorhalten und bekommt eine Ausgabe.
#! /usr/bin/python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import sys
import glob
import subprocess
from RPLCD import CharLCD, cleared, cursor
from RPLCD import Alignment, CursorMode, ShiftMode
GPIO.setwarnings(False)
subprocess_list = subprocess.check_output(('ps', '-A'))
subprocess_list_mpd = subprocess_list.find("mpd")
Dauerschleife = True
framebuffer = [
'',
'',
]
def write_to_lcd(lcd, framebuffer, num_cols):
lcd.home()
for row in framebuffer:
lcd.cursor_pos = (1, 0)
lcd.write_string(row.ljust(num_cols)[:num_cols])
lcd.write_string('\r\n')
lcd.cursor_pos = (0, 0)
lcd.write_string ("%s" %time.strftime("%d.%m.%Y %H:%M"))
lcd = CharLCD(cols=16, rows=2, pin_rs=26, pin_e=36, pins_data=[29, 31, 32, 33])
write_to_lcd(lcd, framebuffer, 16)
def loop_string(string, lcd, framebuffer, row, num_cols, delay=0.5):
padding = ' ' * num_cols
s= padding + string + padding
for i in range(len(s) - num_cols + 1):
framebuffer[row] = s[i:i+num_cols]
write_to_lcd(lcd, framebuffer, num_cols)
time.sleep(delay)
while Dauerschleife:
mpd_info = " "
if subprocess_list_mpd == -1:
mpd_info = "Player nicht gestartet!"
else:
process = subprocess.Popen('mpc', shell=True, stdout=subprocess.PIPE)
status = process.communicate()[0]
statusLines = status.split('\n')
if len(statusLines) > 2:
mpd_title = statusLines[0]
mpd_info = mpd_title
else:
mpd_info = "Musik pausiert"
print mpd_info
#time.sleep(100)
loop_string(mpd_info, lcd, framebuffer, 1, 16)
Den Sprühkleber brauchst du, um den Filz auf dem Koffer zu bekommen.
Gehäusebau
Damit wir die Kabellängen besser bestimmen können, fangen wir zuerst mit dem Gehäusebau an.
Wie man auf den ersten Bildern erkennen kann, haben wir noch ein altes kleines Schloss eingebaut. Dadurch ist es unserem Kind nicht möglich den Koffer zu öffnen und die Neugierde zu befriedigen ;-)
Wie man auf dem oberen Bild sehr gut sehen kann, mussten wir für den Reader etwas Filz raus schneiden, da sonst das Signal nicht mehr zuverlässig erkannt wurde.
Den Innenraum haben wir mit Nadelfilz ausgekleidet und Halterungen eingebaut, die das Innenleben sicher am Platz halten.
Wir haben erst sämtliche Öffnungen reingesägt und dann mit dem Sprühkleber den Filz rauf geklebt.
Dadurch haben wir nun perfekte Übergänge.
An der Seite haben wir für die Lautsprecher Öffnungen reingesägt. Als Blende für die Lautsprecher haben wir die Frontblende für das Display genommen und einfach ein paar Löcher reingemacht und mit Akustikstoff bespannt.
Verkabelung
All unsere Teile wurden geliefert, das Gehäuse ist nach unseren Wünschen gebaut.
Und nun heißt es die Teile alle schön einzubauen und zu Verkabeln.
Aber wohin nur mit all den bunten Kabeln?!
Keine Angst, ich habe mal einen kleinen Plan aufgestellt, der genauso farbenfroh auch in echt dann aussieht.
Links oben siehst du das Display, daneben die Köpfe für Skip next, Play/Pause und Skip prev. Dann kommt unser Reader, und unten natürlich der Raspberry Pi.
Und noch einmal eine tabellarische Übersicht, wo welches Kabel rangesteckt werden muss.
Den Aufmerksamen unter uns ist jetzt sicherlich aufgefallen, dass der Pi-Supply und die On und Off-Buttons gar nicht in dem Plan vorkommen.
Display
Pin
| Raspberry Pi Pin |
---|---|
1
|
6
|
2
|
2
|
3
|
9
|
4
|
26
|
5
|
14
|
6
|
36
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
29
|
12
|
31
|
13
|
32
|
14
|
33
|
15
|
4
|
16
|
20
|
Reader Pin | Raspberry Pi Pin |
---|---|
1 (SDA)
|
24
|
2 (SCK)
|
23
|
3 (MOSI)
|
19
|
4 (MISO)
|
21
|
5 (IRQ)
|
-
|
6 (GND)
|
25
|
7 (RST)
|
22
|
8 (3,3V)
|
1
|
Buttons
| Raspberry Pi Pin |
---|---|
3,3V
|
17
|
Funktion Skip prev
|
38
|
Funktion Play/Pause
|
12
|
Funktion Skip next
|
10
|
LED 5V
|
3
|
GND LED 5V
|
39
|
GND LED on/off
|
34
|
pi-supply
Pin
| Raspberry Pi Pin |
---|---|
7
|
7
|
8
|
8
|
Das liegt daran, dass ich bei Fritzing kein Bauteil gefunden habe, das ich dafür nehmen kann. Aber auf der Webseite von pi-Supply kann man sich die Anleitung für das Bauteil runterladen und zusammen löten.
Hier mal ein Bild wie der pi-supply dann fertig zusammengelötet im Radio aussieht.
Das schwarze Kabel was rechts vom pi-supply wegführt, sind die on-/off Schalter, die am Gehäuse befestigt sind. Dafür habe ich zusätzliche Kabel an der Unterseite der kleinen Buttons (die ja im Lieferumfang vom pi-supply sind) angelötet.
Raspbian installieren
Das können wir uns bequem hier runterladen.
Das Programm mit den Standardeinstellungen installieren.
Nun brauchen wir natürlich auch noch das Raspbian.
Das laden wir uns hier runter.
Die im Lieferumfang enthaltende SD-Karte stecken wir in unserem PC und starten das Win32Disk Imager Programm, dass wir zuvor installiert haben,
Nun musst du auf den kleinen blauen Ordner klicken und zu dem Pfad navigieren, wo du das Image gespeichert hast. Wenn du in dem sich geöffneten Fenster dann auf "Öffnen" geklickt hast, sollte es nun so aussehen.
Nun noch auf "Write" klicken.
Bei der Meldung nicht erschrecken. Die ist normal und warnt uns nur.
Also da klicken wir dann einfach auf "Yes" und schon wird die SD-Karte beschrieben.
Nach kurzer Wartezeit kommt dann die Meldung, dass der Schreibvorgang erfolgreich war.
SSH und WLAN aktivieren
Wir haben nun die SD Karte fertig bespielt.
Aber anstatt sie direkt in den Raspberry Pi zulegen, lassen wir sie im PC und gehen über den Explorer zu der SD Karte.
So nun kann die SD Karte in den Raspberry Pi gesteckt werden und sobald er mit Strom versorgt wird, startet er auch gleich.
Wenn wir nun alles richtig gemacht haben, können wir uns auch gleich mit Putty verbinden.
Der Benutzername ist pi und das Kennwort lautet raspberry.
Eine wichtige Einstellung ist, die SD zu erweitern. Wie das geht, zeige ich euch in dem Video.
Aber anstatt sie direkt in den Raspberry Pi zulegen, lassen wir sie im PC und gehen über den Explorer zu der SD Karte.
In dem Verzeichnis erstellen wir nun zwei Dateien. Die eine nennen wir "ssh" und die andere "wpa_supplicant.conf". Eine Dateiändung wie "txt" muss natürlich entfernt werden.
Wenn ihr das gemacht habt, dann sieht es bei euch genauso aus wie auf dem oberen Bild.
Die ssh-Datei erlaubt es uns nun, uns mit dem Raspberry Pi per SSH zu verbinden (seit Raspbian Jessi ist das nicht mehr per Default aktiv) und die zweite Datei ist für unsere WLAN-Einstellungen und muss nach folgendem Schema gefüllt werden.
Natürlich können wir auch ein Display anschließen und uns mit Maus und Tastatur durch das Menü hangeln, aber so geht es schneller. :)ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DEnetwork={
ssid="euer WLAN Name"
psk="euer WLAN Passwort"
key_mgmt=WPA-PSK
}
So nun kann die SD Karte in den Raspberry Pi gesteckt werden und sobald er mit Strom versorgt wird, startet er auch gleich.
Wenn wir nun alles richtig gemacht haben, können wir uns auch gleich mit Putty verbinden.
Der Benutzername ist pi und das Kennwort lautet raspberry.
Eine wichtige Einstellung ist, die SD zu erweitern. Wie das geht, zeige ich euch in dem Video.
Dadurch haben wir nun die volle Kapazität der Speicherkarte. Wem das Video zu schnell ging noch einmal die Befehle zum Kopieren.
Nach dem Einloggen geben wir
sudo raspi-config
ein. Nun wird der Hintergrund blau und ein graues Menü wird sichtbar.
Dort navigieren wir zu
Advanced Options
Im nächsten Menü geht es dann zu
Expand Filesystem
Die Meldung bestätigen wir mit
OK
Und schließen das Menü mit
finish
Nun werden wir gefragt, ob wir neustarten möchten. Das bestätigen wir mit
Yes
Und nach dem der Raspberry Pi wieder gebootet ist, können wir nun Updates runterladen.
Auch dafür habe ich ein Video erstellt. Das Laden dauert eine Weile, deswegen ist das Video ist der 5-fachen Geschwindigkeit.
Folgende Befehle werden dafür der Reihe nach eingegeben.
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
Nun haben wir sämtliche Updates geladen.
Installation Mifare RC522 Reader
Als nächstes installieren wir unseren Mifare RC522 Reader. Dazu habe ich mal ein kurzes Video erstellt, in dem ihr sehen könnt, welche Befehle ihr wann eingeben musst.
Als erstes verbinden wir uns mit Putty über SSH.
Dort geben wir als erstes
sudo raspi-config
ein.
Und navigieren zu
Interfacing Options
Im nächsten Menü wählen wir dann
SPI
aus.
Bestätigen mit YES und wählen OK aus. Und schon sind wir wieder bei unserer Shell.
Ob die Aktivierung geklappt hat, können wir ganz einfach überprüfen.
Dazu öffnen wir die config.txt mit
sudo nano /boot/config.txt
und dort muss dann fast ganz unten
dtparam=spi=on
drin stehen. Wenn ein # davor steht, dann ist die Zeile auskommentiert. Dann einfach das # entfernen.
Mit STRG+O speichern und STRG+X die Datei schließen.
Ein nächster Test zeigt uns, ob der SPI nun wirklich funktionieren wird und wir alles richtig gemacht haben.
Dazu geben wir
lsmod | grep spi
ein und die Ausgage sollte so ähnlich wie diese aussehen.
Um eine möglich einfache Bedienung zu haben, nutzen wir die Erweiterung von Louis Thiery & Connor Wolf.
Um auf unseren SPI Bus nun zugreifen zu können, laden wir uns erstmal deren Bibliotheken herunter.
Dafür einfach folgende Befehle eingeben und warten bis sie erfolgreich ausgeführt wurden.
sudo apt.get install git python-dev --yes
sudo apt-get install python2.7-dev
git clone https://github.com/lthiery/SPI-Py.git
Nun wechseln wir mit
cd SPI-Py
in unseren neuen Ordner und unsere Shell sieht nun so aus
sudo python setup.py install
Wir verlassen den Ordner mit
cd ..
und laden uns die nächste notwendige Bibliothek mit
git clone https://github.com/mxgxw/MFRC522-python.git
herunter.
Nun wechseln wir wieder in unseren neu erstellten Ordner mit
cd MFRC522-python
und bearbeiten dort die MFRC522.py mit
sudo nano MFRC522.py
In Zeile 10 finden wir ein 22 in eine 11 geändert werden muss.
Und in Zeile 113 ändern wir wieder die 22 in eine 11.
Mit STRG+O speichern und mit STRG+X beenden
Nun starten wir den Raspberry Pi mit
sudo reboot
neu.
Die Installation des RFID/NFC Readers ist damit abgeschlossen.
Um zu Testen einfach wieder mit
cd MRFC522-python
in den Ordner wechseln und
sudo python Read.py
eingeben.
Nun könnt ihr eure Tags vorhalten und bekommt eine Ausgabe.
MPD installieren
Natürlich soll unsere Jukebox auch Musik abspielen können. Das machen wir mit MPD.
Wir ihr das bei dem Raspberry Pi macht, zeige ich euch in dem Video.
Wem die Befehle zu schnell waren, folgt jetzt wie gewohnt die bebilderte Schritt-für-Schritt-Anleitung.
Als erstes geben wir
sudo apt-get install mpd mpc alsa-utils
ein, um die benötigten Pakete zu installieren
ein
Natürlich kannst du auch statt playliste.m3u irgendein anderen Namen geben.
die Playliste abspielen.
Sollte keine Musik abgespielt werden, müsst ihr die playliste.m3u überprüfen, ob sich ein Tippfehler eingeschlichen hat. Diesen dann korrigieren und wieder die Datenbank mit
starten wir das Script und halten das Tag davor. Nun wird uns eine ID angezeigt, diese merken wir uns. Das Schema der ID ist 123,456,789,123
um das Script zu beenden.
if uid == [123,456,789,123]:
os.system("mpc stop")
os.system("mpc clear")
os.system("mpc load playliste")
os.system("mpc play")
das if muss auf derselben Höhe stehen wie das else: in der vorletzten Zeile.
neustarten und schon könnt ihr das Tag vorhalten (sofern das Ready.py im Autostart ist) und die passenden Playliste wird abgespielt.
Wem die Befehle zu schnell waren, folgt jetzt wie gewohnt die bebilderte Schritt-für-Schritt-Anleitung.
Als erstes geben wir
sudo apt-get install mpd mpc alsa-utils
ein, um die benötigten Pakete zu installieren
Nach kurzer Zeit wird eine Bestätigung von uns gefordert, da einfach
Y
für YES (Ja) eingeben
für YES (Ja) eingeben
und weiter gehts.
sudo modprobe snd_bcm2835
eingeben, um das Modul der Soundkarte zu laden
Da unsere Lautsprecher über den Klinkenschluss am Raspberry verbunden werden sollen, muss die Soundausgabe noch auf diesem mit den Befehl
sudo amixer cset numid=3 1
umgestellt werden.
mit sudo amixer cset numid= 3 2 (für HDMI-Ausgabe) und sudo amixer cset numid=3 0 (automatische Auswahl), kann die Einstellung auch verändert werden.
Wollen wir, dass unsere Lautstärkeinstellungen auch nach dem Neustart immer gleich sind, dann müssen wir folgenden Befehl eingeben
sudo alsactl store
Mit
sudo nano /etc/mpd.conf
die Konfigurationsdatei von mpd aufrufen.
Bei Bedarf die Pfade anpassen. Und mit STRG+O speichern und mit STRG+X schließen.
Wenn die Pfade für die Playlisten und der mp3 nicht geändert wurden, müssen natürlich noch die Berechtigungen gesetzt werden.
Dafür einfach
sudo chmod g+w /var/lib/mpd/music /var/lib/mpd/playlists/
sudo chgrep audio /var/lib/mpd/music /var/lib/mpd/playlists/
eingeben.
Nun noch den Dienst mit
sudo /etc/init.d/mpd
neustarten.
Und die Datenbank aktualisieren.
sudo mpc update
Playlisten den NFC-Tags zuordnen
Als erstes installiert ihr euch FileZilla und startet es.
Nun tragt ihr bei Server oben die IP-Adresse von euren Raspberry Pi ein, Username ist im Standard "Pi" und Kennwort "raspberry". Der Port ist 22 für SFTP.
Dann auf Verbinden und schon seht ihr sämtliche Ordner von eurem Raspberry Pi auf der rechten Seite und auf der linken Seite die Ordner von eurem PC.
Auf dem PC navigiert ihr zu eurer Musik und auf der rechten Seiten nach
/var/lib/mpd/Music
/var/lib/mpd/Music
Nun schiebt ihr einfach die Musik von links nach rechts.
Je nachdem wie viele MP3s ihr übertragen wollt, kann dieser Vorgang einige Minuten in Anspruch nehmen.
Währenddessen verbinden wir uns mit Putty um die Playliste zu erstellen.
Sobald du dich eingeloggt, hast gibst du
cd /var/lib/mpd/playlists/
ein
nun erstellen wir eine neue Playliste mit
sudo nano playliste.m3u
Natürlich kannst du auch statt playliste.m3u irgendein anderen Namen geben.
Nun füllst du die Datei nach folgendem Schema.
Ich habe in dem Ordner "music" einen Unterordner "Asterix" mit einem Unterordner "Folge 3_ Asterix als Gladiator" und in dem sind dann sieben mp3s.
Nun mit
STRG+O speichern und mit STRG+X beenden.
Nun gebt ihr in der Konsole folgende Befehle nach einander ein (sofern die mp3-Übertragung erfolgreich abgeschlossen wurde)
mpc stop
mpc clear
mpc update
Nun ist die Playliste und die mp3s dem Raspberry bekannt und wir können mit
mpc load playliste
mpc Play
die Playliste abspielen.
Sollte keine Musik abgespielt werden, müsst ihr die playliste.m3u überprüfen, ob sich ein Tippfehler eingeschlichen hat. Diesen dann korrigieren und wieder die Datenbank mit
mpc stop
mpc clear
mpc update
aktualisieren.
Um nun ein Tag dazu zu nutzen die Playliste abzuspielen, wechseln wir in den Ordner wo unsere Read.py liegt
cd ~
cd /MFRC522-python
Mit
sudo python Read.py
starten wir das Script und halten das Tag davor. Nun wird uns eine ID angezeigt, diese merken wir uns. Das Schema der ID ist 123,456,789,123
drücken
STRG+C
um das Script zu beenden.
nun öffnen wir die Read.py mit
sudo nano Read.py
und ergänzen es am Ende pro Playliste mit folgenen Zeilen
if uid == [123,456,789,123]:
os.system("mpc stop")
os.system("mpc clear")
os.system("mpc load playliste")
os.system("mpc play")
das if muss auf derselben Höhe stehen wie das else: in der vorletzten Zeile.
Nun noch den Raspberry Pi mit
sudo nano reboot
neustarten und schon könnt ihr das Tag vorhalten (sofern das Ready.py im Autostart ist) und die passenden Playliste wird abgespielt.
LCD Display
Nun können wir schon Musik hören und unsere Tags werden auch erkannt. Nun ist es an der Zeit, dass unser Display noch mehr kann als nur leuchten.
Da python schon auf unserem Raspberry Pi installiert ist, müssen wir nur ein neues Script schreiben, was mit unserem Display.
Dafür einfach
sudo nano LCD.py
eingeben und die Datei mit folgenden Inhalt füllen
#! /usr/bin/python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import sys
import glob
import subprocess
from RPLCD import CharLCD, cleared, cursor
from RPLCD import Alignment, CursorMode, ShiftMode
GPIO.setwarnings(False)
subprocess_list = subprocess.check_output(('ps', '-A'))
subprocess_list_mpd = subprocess_list.find("mpd")
Dauerschleife = True
framebuffer = [
'',
'',
]
def write_to_lcd(lcd, framebuffer, num_cols):
lcd.home()
for row in framebuffer:
lcd.cursor_pos = (1, 0)
lcd.write_string(row.ljust(num_cols)[:num_cols])
lcd.write_string('\r\n')
lcd.cursor_pos = (0, 0)
lcd.write_string ("%s" %time.strftime("%d.%m.%Y %H:%M"))
lcd = CharLCD(cols=16, rows=2, pin_rs=26, pin_e=36, pins_data=[29, 31, 32, 33])
write_to_lcd(lcd, framebuffer, 16)
def loop_string(string, lcd, framebuffer, row, num_cols, delay=0.5):
padding = ' ' * num_cols
s= padding + string + padding
for i in range(len(s) - num_cols + 1):
framebuffer[row] = s[i:i+num_cols]
write_to_lcd(lcd, framebuffer, num_cols)
time.sleep(delay)
while Dauerschleife:
mpd_info = " "
if subprocess_list_mpd == -1:
mpd_info = "Player nicht gestartet!"
else:
process = subprocess.Popen('mpc', shell=True, stdout=subprocess.PIPE)
status = process.communicate()[0]
statusLines = status.split('\n')
if len(statusLines) > 2:
mpd_title = statusLines[0]
mpd_info = mpd_title
else:
mpd_info = "Musik pausiert"
print mpd_info
#time.sleep(100)
loop_string(mpd_info, lcd, framebuffer, 1, 16)
Nun mit STRG+O speichern und mit STRG+X beenden
Mit
sudo python LCD.py
können wir das Script starten und nun sehen wir in der oberen Zeile das aktuelle Datum und die Uhrzeit und in der unteren Zeile den aktuellen Titel in einer Laufschrift.
Buttons
Nun haben wir unser Radio schon fast fertig. Lediglich unsere Buttons sind noch ohne Funktion.
Aber dafür habe ich mir ein einfaches Python-Script geschrieben, was die notwendigen Aktionen ausführt.
Da das Script nun nicht nur die Buttons steuern soll, sondern auch noch im Display anzeigen soll, ob ein Titel gerade pausiert oder nicht, sind auch noch ein paar Zeilen vom Display dabei.
Zu nächst geben wir wieder
Sudo nano Button.py
ein und füllen es mit folgendem Inhalt.
Aber dafür habe ich mir ein einfaches Python-Script geschrieben, was die notwendigen Aktionen ausführt.
Da das Script nun nicht nur die Buttons steuern soll, sondern auch noch im Display anzeigen soll, ob ein Titel gerade pausiert oder nicht, sind auch noch ein paar Zeilen vom Display dabei.
Zu nächst geben wir wieder
Sudo nano Button.py
ein und füllen es mit folgendem Inhalt.
#!/usr/bin/env python
from RPLCD import CharLCD
import sys
import time
import RPi.GPIO as GPIO
import os
from subprocess import call
#PLAY_SWITCH = 12
#NEXT_Switch = 38
#Prev_Switch = 10
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(3,GPIO.OUT)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#lcd= CharLCD(cols=16, rows=2, pin_rs=26, pin_e=36, pins_data=[29, 31, 32, 33])
GPIO.output(3,GPIO.HIGH)
while True:
#lcd.write_string("%s" %time.strftime("%H:%M" " " "%d.%m.%Y"))
input_state = GPIO.input(12)
if input_state == True:
os.system("mpc toggle")
time.sleep(2)
if(GPIO.input(10)):
os.system("mpc next")
time.sleep(2)
if(GPIO.input(38)):
os.system("mpc prev")
time.sleep(2)
Mit
sudo python Button.py
können wir das Script starten und nun das Radio bedienen.
Mit
sudo python Button.py
können wir das Script starten und nun das Radio bedienen.
Guten Morgen
AntwortenLöschenIch wollte Fragen wie man die Karten beschreibt das die zum Beispiel eine Playlist abspielen (zum Beispiel alle alle Folgen einer Hörspielreihe ). Gibts da ein Tutorial für?
Hallo Marcel,
Löschenich bin gerade dabei dazu auch noch eine Anleitung zu schreiben. Weil das ja für die Jukebox sehr interessant ist. :) Ich denke Ende März werde ich damit fertig sein.
Das ist Super dann bedanke ich mich schon einmal
AntwortenLöschenAnleitung wäre Spitze - vor allem scheitere ich am Display. Box läuft, aber Display wäre schon fein. Aktuell in der Variante von hailogugo mit vlc - aber da wäre ich flexibel :)
AntwortenLöschenHallo Tom,
Löschenals nächstes wollte ich die Anleitung schreiben wie man den Titel auf dem Display anzeigt. Ich denke in 1-2 Wochen habe ich die Anleitung fertig.
Hallo,
AntwortenLöschenich danke dir für deine Anleitung, bin auch noch dran das Ding fertigzustellen.
Hat mir sehr geholfen und auf jeden Fall inspiriert.
Bin eben drauf gekommen, dass die Arcade Buttons 3,3V oder max. 5V haben dürfen, ansonsten eigenes Netzteil brauchen. Hab nicht die von GOZAR bestellt (lange Lieferzeit und die Volt stehen auch nicht dabei) sondern welche von Arcade4you, die Dinger haben jedoch 12V, komplett übersehen :(
Es sind Kabelschuhe 2,8mm von Vorteil, wenn die Buttons angeschlossen werden sollten.
Übrigens noch bei Punkten an denen ich gehangen habe als Neuling:
1) es gibt NFC tags zu kaufen, die einen Error (AUTH Error!) beim Scannen vom Mifare Reader ausgeben. Die Dinger sind von NXP. Es scheint einen Unterschied von 4bytes und 7bytes tags zu geben. Jedenfalls erkennt er nur die eigenen, die mitgeliefert werden. Das ist so eine Check-Karte und ein blauer Art Anhänger, die funktionieren.
Die NXP Tags erkennt er zwar die UID, jedoch mit dem Error danach ist kein Befehl mehr im Anschluss möglich.
2) beim Bearbeiten vom Read.py unbedingt "import os" in den ersten Zeilen dazuschreiben, ansonsten erkennt er den Befehl nicht mit den playlisten.
lg Chris
Hallo, kann ich hier auch ein RFID-Reader mit USB anschließen? Wenn ja, wo muss ich dann den Befehl ändern, dass er den dann auch erkennt?
AntwortenLöschenHi
AntwortenLöschencooles Projekt. Ich verstehe nur nicht ganz, wie du das mit den On-Off-Buttons am Gehäuse gelöst hast. Hast du da im Prinzip die entsprechenden Buttons auf der Platine einzeln "verlängert" oder gibt es die Möglichkeit eines einzigen Power-Buttons.
VG
Martin
Hallo,
AntwortenLöschenich bekomme leider nicht den NFC-Tag mit der Playliste verknüpft. Ist es möglich ein Screenshot vom Beispiel an zu sehen?
Hi, wird die Abspielposition gespeichert?
AntwortenLöschenHallo - schliesse mit der Anfrage von Tom an: "Anleitung wäre spitze" :)
AntwortenLöschenIch hatte leider keinen Erfolg mit der If-Abfrage, bin allerdings in einem Forum fündig geworden. Vielleicht hilft es ja dem nächsten, der diese Anleitung liest:
AntwortenLöschenoben im Play.py-script muss zuallererst das Subprozess-Modul mit
import subprocess
eingebunden werden. Die If-Abfrage sieht dann so aus (Einrückungen nicht vergessen):
if uid[0] == 134 and uid[1] == 97 and uid[2] == 75 and uid[3] == 31:
print "Karte erkannt"
subprocess.call("mpc stop", shell=True)
subprocess.call("mpc clear", shell=True)
subprocess.call("mpc load lieder", shell=True)
subprocess.call("mpc play", shell=True)
Hallöchen,
AntwortenLöschenich bin gerade dabei solch eine Box für meine Kleine als Weihnachtsgeschenk zu basteln. Mit kleineren Problemen klappt auch schon einiges ... aber LCD Display und Buttons sind komplett außen vor, das bekomme ich nicht hin. Ich nehme die Skripte wie angegeben und es gibt Fehlermeldungen die mir rein gar nix sagen.
Gäbe es die Möglichkeit dass ich Ihnen mal eine E-Mail schreibe?
Besten Dank
Hallo ich habe die Anleitung genau befolgt und bekomme das Display leider nicht zum laufen.
AntwortenLöschenGibt es das Skript für das Display als Download?
Hallo,
AntwortenLöschenvielen lieben Dank für die Anleitung - ohne hätte ich mich nicht an das Projekt getraut.
Hier ein paar evtl. wichtige Ergänzungen:
- Das PI-Supply funktioniert bei mir in diesem Setup nicht:
Grundsätzlich macht es was es soll, aber wenn der Status länger als 5 min "off" ist kann man nicht mehr einschalten - erst wenn man das Kabel von der Powerbank abzieht und wieder einsteckt gehts wieder. Grob geraten: Die Powerbank ist selbst "intelligent" und schaltet den Port ab.
Alternative: Ich habe einen echten Unterbrecherschalter in's USB Kabel eingebaut und eine NFC-Karte für einen sauberen "shutdown now -h" reserviert". Meine 4-Jährige macht das ganz brav...
- Mifare RC522 Reader
Im Read.py fehlt import os
Ausserdem ist die UID der NFC Karten bei mir anders. Beispiel: [121, 244, 125, 86, 166]
Wenn man
print "Meine UID:" + str(uid)
in Read.py eingefügt bekommt man eine bessere Ausgabe als das was das Script sonst auswirft.
Und eine kleine Erweiterung wenn's interresiert.
Ich habe sehr viel Kinder Hörbücher auf meiner Box und wollte das sie immer an der letzten Position weiter spielen und nicht von vorn Anfangen.
Wenn man "save_pos.sh" vor jedem Abspielen einer neuen Playlist ausführt wird die letzte Position in den Ordner der entsprechenden Liste geschrieben.
"play_pos.sh" kommt dann zum Einsatz wenn die letzte Abspielposition gewünscht ist - ansonsten beleibt "mpc play".
save_pos.sh:
#!/bin/bash
folder=`mpc -f %file%|head -1|awk -F '/' '{printf $1}'`
echo $folder
mpc -f %position%|head -1>/var/lib/mpd/music/$folder/lastpos.txt
mpc |head -2|tail -1|awk '{printf $3}'|awk -F '/' '{print $1}'>>/var/lib/mpd/music/$folder/lastpos.txt
play_pos.sh:
#!/bin/bash
if [ -f /var/lib/mpd/music/$1/lastpos.txt ]
then
mpc play `head -1 /var/lib/mpd/music/$1/lastpos.txt`
mpc seek +`tail -1 /var/lib/mpd/music/$1/lastpos.txt`
else
mpc play
fi
Anwendungsbeispiel:
if uid == [80, 219, 139, 187, 187]:
os.system("/home/pi/scripts/save_pos.sh")
os.system("mpc stop")
os.system("mpc random off")
os.system("mpc clear")
os.system("mpc load ")
os.system("/home/pi/scripts/play_pos.sh ")
Hi ,
AntwortenLöschenbin deiner Anleitung gefolgt , jedoch habe ich nun ein Problem.
Habe den Reader installiert , und rebootet, jedoch komm ich dann an dem Punkt wo ich den Reader testen möchte nicht weiter.
Wenn ich mit : cd mfrc522-python
-bash: cd: mfrc522-python: Datei oder Verzeichnis nicht gefunden
in das Verzeichnis wechseln möchte , sagt er es gäbe das Verzeichnis nicht.
Über WinSCP habe ich dies kontrolliert , die Ordner gibt es dort.
Was kann ich noch machen ?
Viele Grüße
Mario