Hallo zusammen,
bin schon eine ganze Weile an meiner persönlichen Jukebox für meine Kleine dran.
Habe damals verschiedene Varianten getestet und habe mich letztendlich für MiczFlor/RPi-Jukebox-RFID entschieden.
Mein persönliches Setup besteht aus:
RPi3 |
imuto 10000mAh Powerbank (für mich war dabei passthrough wichtig) |
RPi USV+ (damit beim Laden der Powerbank sich der RPi nicht einfach abschaltet) |
CSL - Externe USB Soundkarte
|
Trust Leto 2.0 USB Lautsprecher Set
|
I2C LCD 20 x 4
(aktuell mein Sorgenkind) |
125Khz RFID-Lesegerät EM4100 |
Die grundlegenden Funktionen laufen einwandfrei und die einzelnen Alben werden über die RFID-Karten geladen.
Nun wollte ich als letzten Step das LCD-Disyplay integrieren, nur bei diesem Thema bin ich ehrlich gesagt total aufgeschmissen.
Habe das "gpio-buttons.py"-Script angepasst, sodass ich bei einem Button eine einfache Anzeige erhalten nur entspricht das nicht meinen Vorstellungen.
Ich möchte über das Display das aktuelle Lied angezeigt bekommen und ein Symbol, ob es gerade abspielt oder pausiert.
Zusätzlich soll über den Laut/Leiser-Button die aktuelle Lautstärke als Balken angezeigt werden.
Falls es funktionieren sollte wäre es schön, wenn man den aktuelle Akkuzustand der Powerbank anzeigen könnte (aber laut Google sollte diese Funktion nicht realisierbar sein).
Vielleicht noch das aktuelle Datum und Uhrzeit? Hättet Ihr noch Ideen für sinnvolle Funktionen?
Ich hoffe Ihr könnt mir dazu weiterhelfen 


Achso, ich verwende Stretch-Lite, falls dies für Euch wichtig ist.
Jukebox4Kids - Installation:
Version:
Jukebox4Kids - v0.0.1.img
- Update & Upgrade
- Autologin Desktop
- Jukebox4Kids installiert
- RFID Reader konfiguriert
Jukebox4Kids - v0.0.2.img
- Update & Upgrade
- Autologin Desktop
- Jukebox4Kids installiert
- RFID Reader konfiguriert
- USB-Soundcard installiert und eingerichtet
Jukebox4Kids - v0.0.3.img
- Update & Upgrade
- Autologin Desktop
- Jukebox4Kids installiert
- RFID Reader konfiguriert
- USB-Soundcard installiert und eingerichtet
- GPIO installiert und PushButton konfiguriert
Jukebox4Kids - v0.0.4.img
- Update & Upgrade
- Autologin Desktop
- Jukebox4Kids installiert
- RFID Reader konfiguriert
- USB-Soundcard installiert und eingerichtet
- GPIO installiert und PushButton konfiguriert
- USV+ installiert und konfiguriert
Jukebox4Kids - v0.0.5.img
- Update & Upgrade
- Autologin Desktop
- Jukebox4Kids installiert
- RFID Reader konfiguriert
- USB-Soundcard installiert und eingerichtet
- GPIO installiert und PushButton konfiguriert
- USV+ installiert und konfiguriert
- LCD-Display installiert und die ersten Einstellungen vorgenommen
Installation:
- SD per „SD Card Formatter” formatieren
- Per „Win32DiskImager“ Raspbian STRETCH auf die SD kopieren
- Datei „ssh“ auf die SD kopieren/erstellen
- Login: pi / Passwort: raspberry
- Passwort mit dem Befehl ändern:
-- passwd
neue Daten = Login: pi / Passwort: XXX
- Root-Passwort erstellen und Passwortabfrage für WinSCP abschalten:
-- sudo passwd root
-- sudo su
-- nano /etc/ssh/sshd_config
Folgender Block muss entsprechend abgeändert werden:
ALT:
# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
NEU:
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
STRG + O, Return & STRG + X
- Autologin für PuTTY per SSH einstellen (http://ozzmaker.com/how-automatically-log-into-a-raspberry-pi/):
Per WinSCP den Ordner erstellen:
/home/pi/.ssh/
Dort wird der Key mit dem Namen eingefügt:
authorized_keys
Im Programm „PuTTY“ müssen folgende Einstellungen vorgenommen werden:
Connection SSH Auth Private Key for authentication = Key (.ppk) auswählen
Connection Data unsername = pi
- Update durchführen
-- sudo apt-get update
-- sudo apt-get upgrade
- Autologin setzen (vorausgesetzt man hat die Vollversion installiert):
-- sudo raspi-config
Boot options --> Desktop / CLI --> Console Autologin - Text console, automatically logged in as 'pi' user
- Samba installieren:
-- sudo apt-get install samba samba-common-bin
-- sudo nano /etc/samba/smb.conf
Folgendes wird in der Config geändert:
workgroup = WORKGROUP
wins support = yes
[RPi-Jukebox]
comment= Pi Jukebox
path=/home/pi/RPi-Jukebox-RFID/shared
browseable=Yes
writeable=Yes
only guest=no
create mask=0777
directory mask=0777
public=no
STRG + O, Return & STRG + X
Benutzer für Samba anlegen:
-- sudo smbpasswd -a pi
- evdev installieren:
-- sudo apt-get install python-dev python-pip gcc
-- uname -r
-- sudo apt-get install linux-headers-4.X (Anstatt dem X muss die Versionsnr. angegeben werden)
-- sudo pip install evdev
- lighttpd & PHP installieren:
-- sudo apt-get install lighttpd php7.0-common php7.0-cgi php7.0
-- sudo nano /etc/lighttpd/lighttpd.conf
Folgende Änderung muss vorgenommen werden:
server.document-root = "/home/pi/RPi-Jukebox-RFID/htdocs"
STRG + O, Return & STRG + X
-- sudo nano /etc/sudoers
Folgende Zeile muss hinzugefügt werden:
www-data ALL=(ALL) NOPASSWD: ALL
STRG + O, Return & STRG + X
-- sudo lighty-enable-mod fastcgi-php
-- sudo service lighttpd force-reload
- VLC installieren:
-- sudo apt-get install vlc
-- sudo sed -i 's/geteuid/getppid/' /usr/bin/vlc
- mpg123 installieren:
-- sudo apt-get install mpg123
- git installieren:
-- sudo apt-get update
-- sudo apt-get install git
- Jukebox installieren:
-- cd /home/pi/
-- git clone https://github.com/MiczFlor/RPi-Jukebox-RFID.git
-- sudo chown -R pi:www-data /home/pi/RPi-Jukebox-RFID/shared
-- sudo chmod -R 775 /home/pi/RPi-Jukebox-RFID/shared
-- sudo reboot
- RFID registrieren:
-- cd /home/pi/RPi-Jukebox-RFID/scripts/
-- python2 RegisterDevice.py
Nun muss der RFID ausgewählt werden.
Mit folgendem Code kann man prüfen, welcher eingetragen wurde:
-- cat deviceName.txt
- Auto-start für Jukebox einrichten:
-- crontab -e
Folgende Zeilen werden am Schluss hinzugefügt:
@reboot mpg123 /home/pi/RPi-Jukebox-RFID/misc/startupsound.mp3
@reboot python2 /home/pi/RPi-Jukebox-RFID/scripts/daemon_rfid_reader.py &
STRG + O, Return & STRG + X
- Media Player Script:
-- cd /home/pi/RPi-Jukebox-RFID/scripts/
-- cp rfid_trigger_play.sh.sample rfid_trigger_play.sh
-- chmod +x rfid_trigger_play.sh
-- sudo reboot
- USB-Soundcard einrichten:
-- aplay -l
Hier ist die Card Nummer relevant:
Beispiel:
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
-- sudo nano /usr/share/alsa/alsa.conf
Folgende Werte müssen entsprechend der Card Nummer angepasst werden:
defaults.ctl.card 1
defaults.pcm.card 1
STRG + O, Return & STRG + X
-- sudo nano ~/.asoundrc
Folgende Daten eintragen:
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
STRG + O, Return & STRG + X
Da nun die Lautstärke nicht über den Webserver geändert werden kann muss folgende Änderung vorgenommen werden:
In der Datei /htdocs/index.php muss in der Zeile 60 "Speaker" anstatt "PCM" eingetragen werden:
exec("/usr/bin/sudo amixer sset 'Speaker' ".$urlparams['volume']."%");
Datei speichern und RPi neustarten:
-- sudo reboot
- GPIO installieren und PushButtons konfigurieren:
-- sudo get-apt update
-- sudo apt-get install python3-gpiozero python-gpiozero
-- cp /home/pi/RPi-Jukebox-RFID/misc/GPIO-button-sample.py /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py
-- sudo chmod +x /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py
- Autostart einrichten:
-- sudo nano /etc/rc.local
Folgende Zeile oben einfügen:
/home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py &
- Die Datei "gpio-buttons.py" muss noch wie folgt angepasst werden:
#!/usr/bin/python3
from gpiozero import Button
from signal import pause
from subprocess import check_call
# 2017-12-12
# This script was copied from the following RPi forum post:
# https://forum-raspberrypi.de/forum/thread/13144-projekt-jukebox4kids-jukebox-fuer-kinder/?postID=312257#post312257
# I have not yet had the time to test is, so I placed it in the misc folder.
# If anybody has ideas or tests or experience regarding this solution, please create pull requests or contact me.
#def def_shutdown():
# check_call(['sudo', 'poweroff'])
def def_volU():
check_call("amixer sset Speaker 1.5db+", shell=True)
def def_volD():
check_call("amixer sset Speaker 1.5db-", shell=True)
def def_vol0():
check_call("amixer sset Speaker 50db-", shell=True)
def def_next():
check_call("echo 'next' | nc.openbsd -w 1 localhost 4212", shell=True)
def def_prev():
check_call("echo 'prev' | nc.openbsd -w 1 localhost 4212", shell=True)
def def_halt():
check_call("echo 'pause' | nc.openbsd -w 1 localhost 4212", shell=True)
#shut = Button(3, hold_time=2)
vol0 = Button(13)
volU = Button(16,pull_up=True)
volD = Button(19,pull_up=True)
next = Button(26)
prev = Button(20)
halt = Button(21)
#shut.when_held = def_shutdown
vol0.when_pressed = def_vol0
volU.when_pressed = def_volU
volD.when_pressed = def_volD
next.when_pressed = def_next
prev.when_pressed = def_prev
halt.when_pressed = def_halt
pause()
- Buttons müssen via GPIO wie folgt angeschlossen werden:
Stumm - vol0 - PIN33 - GPIO13
Lauter - volU - PIN36 - GPIO16
Leiser - volD - PIN35 - GPIO19
Nächstes - next - PIN37 - GPIO26
Zurück - prev - PIN38 - GPIO20
Play/Stop - halt - PIN40 - GPIO21
Ground - - PIN39 - Ground
-- sudo reboot
- RPI USV+ installieren und konfigurieren:
-- sudo apt-get install -y python-smbus
-- sudo apt-get install -y i2c-tools
-- sudo raspi-config
5 – Interfacing Options P5 – I2C Enabled
-- sudo reboot
-- sudo nano /etc/piupsmon/piupsmon.conf
Config wird folgend angepasst:
PowerOffTimer=15
ShutdownTimer=45
ShutdownCmd=init 0
LogLevel=notice
LogStatusDesc=1
StatusChangedCmd=
STRG + O, Return & STRG + X
-- sudo reboot
Log-Datei liegt unter:
/var/log/piupsmon.log
Folgende Befehle stehen zur Verfügung:
-- sudo /etc/init.d/piupsmon start
-- sudo /etc/init.d/piupsmon stop
-- sudo /etc/init.d/piupsmon status
- LCD – Installation und Konfiguration:
-- sudo apt-get install python-pip python-dev build-essential
-- sudo apt-get install python-pip python-dev build-essential
-- sudo apt-get install python-imaging
-- sudo nano /etc/modules
Folgende Zeilen in die Datei einfügen:
i2c-bcm2708
i2c-dev
STRG + O, Return & STRG + X
-- sudo reboot
-- mkdir I2C-LCD && cd I2C-LCD
-- wget http://tutorials-raspberrypi.de/wp-content/uploads/scripts/hd44780_i2c.zip
-- unzip hd44780_i2c.zip
I2C-Adresse kontrollieren:
-- sudo i2cdetect -y 1
Sollte nicht Adresse 27 angezeigt werden muss folgende Datei angepasst werden: -- sudo nano lcddriver.py
Folgende Dateien müssen in den Ordner RPi-Jukebox-RFID/scripts eingefügt werden:
i2c_lib.py
i2c_lib.pyc
lcddriver.py
lcddriver.pyc
Der Ordner /home/pi/I2C-LCD kann gelöscht werden
Die Datei /home/pi/Rpi-Jukebox-RFID/scripts/pgio-buttons.py muss mit folgenden Zeilen angepasst werden:
import lcddriver
from time import *
lcd = lcddriver.lcd()
lcd.lcd_clear()
lcd.lcd_display_string(" LAUTER ", 1)
Display More