MPD y Qobuz Raspberry Zero portátil y solar
Un reproductor portátil con batería que también se puede alimentar con un panel de 5V/1A. Para reproducir música almacenada en la tarjeta (MPD) y también del servicio de subscripción Qobuz.
Lista de ingredientes:
- Raspberry Pi Zero WH. Es la que yo utilizo porque ya trae wifi y la cabecera presoldada para los puertos GPIO.
- Witty Pi 3 Mini. Añade gestión de la alimentación para la raspberry. Tiene un reloj de tiempo real (la raspberry no trae), un botón de encendido/apagado y la capacidad de monitorizar la corriente entrante y definir secuencias de apagado y arranque.
- Justboom DAC Zero. Un DAC, cosa que antes conocíamos por «tarjeta de sonido» con salida de audio de alta definición 32bit/384Khz, que mejora enormemente el sonido de la raspberry. Con una salida de auriculares y otra de línea.
- Powerpack. Uno que encontré por eBay. Cualquiera que tenga una salida a 5V te vale. Lleva una batería LIPO de 3,7V y el circuito se encarga de convertir la tensión a 5V.
El sistema operativo y conexionado
La raspberry zero es un modelo realmente limitado. En su momento he llegado a probar con sistemas ya preparados (como MoodeAudio) para ser tostados en la SD, pero ofrece mucho más de lo que necesito y además, no se exactamente como, terminaban por corromperse y dejar de arrancar. Lo que haremos es instalar Raspbian en la unidad, la última versión que haya disponible.
Lo único que necesito es que funcionen MPD y UPMPDCli (para Qobuz) de manera que un sistema mínimo es lo más recomendable.
Fue una suerte que el Witty Pi3 Mini y el Justboom se llevaran bien juntos. Cada uno de los HAT que se pueden instalar en una raspberry pi utiliza un conjunto determinado de pines físicos para comunicarse y en teoría podrías apilar dispositivos si no colisionan. Si más de HAT utiliza el mismo pin, y no es configurable para cambiarlo, esa combinación no va a funcionar.
Esto me recuerda a la situación previa al plug&play en los PC, cuando teníamos que seleccionar (mediante jumpers) la direcciones IRQ y DMA para cada dispositivo. Afortunadamente los fabricantes se pusieron de acuerdo y definieron el estándar de negociación plug&play. Esto es lo bueno de los estándares, que permite a la industria progresar de manera que ganen todos.
Como veis en la foto, la configuración final es la batería con el circuito en la base, seguidamente y usando los extensores que trae el powerpack acoplo la raspberry zero. Después, como los pines no tienen la longitud suficiente, he usado un extensor de conector GPIO, que por casualidades de la vida lleva los pines más largos. Eso me permite conectar primero Witty Pi y luego en el espacio restante Justboom.
Creo recordar que la primera prueba que hice conecté primero Justboom y luego Witty Pi y no funcionó. Abandoné el asunto durante un tiempo hasta que se me ocurrió conectarlos en este orden y funcionó.
Hubiera estado bien añadirle una pantallita OLED para sacar algo de información básica, como esta que tengo en otra raspberry que me da información de mi servidor:
Pero tiene pines en común con Witty Pi3. Pirate Audio tiene unos DAC para la rpi Zero que ya traen pantalla, se podría probar así. Pero ¿serían compatibles con Witty Pi3?
Witty Pi 3 Mini
Antes de dejarlo montado como en la foto hay que instalar y configurar por separado el HAT de gestión de energía. Es muy fácil porque solo hay que seguir unas sencillas instrucciones que están en su web. Los pasos básicos son 1) instalar el software antes de conectar el dispositivo, 2) apagar pi, 3) conectar dispositivo y 4) reiniciar. A partir de ese momento solo debes alimentar el HAT Witty Pi3 y no la raspberry. De esa manera te funcionará el botón de encender y apagar. Muy útil cuando un dispositivo no tiene pantalla ni teclado.
PowerPack
Ahora sí podemos empezar a montar todo tal y como están en la foto, empezando por la batería. Como vemos en la imagen, la salida de corriente va directa a la entrada de Witty Pi3 con un cable de USB-A a Micro USB. Esta parte tiene poco misterio. El powerpack que he comprado lleva también su propio interruptor de corriente y lo puedes cargar con cualquier alimentador con salida 5V o con el panel solar que vemos luego.
JustBoom
Enchufar y listo. En versiones anteriores a Raspbian 11 había que añadir unas líneas al fichero /boot/config.txt
pero en la 11 ni eso. De todas formas esta es la guía de instalación.
Para saber si está funcionando aplay -l
:
Gestión de Wifi
Lo que queremos conseguir es que se conecte sin preguntar a cualquiera de las redes que puedas tener por casa. El problema viene cuando estamos fuera. Lo que haremos en este caso es crearnos una conexión para el punto de acceso del móvil. Así al menos la Raspberry podrá estar en la misma red que el móvil (compartiendo wifi con tethering) y podremos reproducir (con M.A.L.P.) la música que está en local.
Hay muchas maneras de gestionar la red. En este caso he optado por wpa_supplicant (gestor/daemon) y wpa_cli. Una vez está instalado y activado (sudo systemctl enable --now wpa_supplicant
) las conexiones se crean de esta manera:
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 0 ssid "SSID"
wpa_cli -i wlan0 set_network 0 psk "Clave"
wpa_cli -i wlan0 enable_network 0
wpa_cli -i wlan0 save_config
Con el comando wpa_cli -i wlan0 list_networks
podremos ver todas las redes que tengamos definidas. Recuerda activar el tethering en tu móvil y dejar definida la red. Eso nos permitirá que la raspberry se conecte al mismo cuando no estés en casa.
MPD
Music Player Daemon es un reproductor de audio bastante especial, funciona en modo cliente-servidor. Una vez el demonio está reproduciendo audio podrás conectarte con cualquier cliente compatible y verás lo mismo. Los clientes se comunican con el servidor mediante TCP/IP. Algunos clientes:
- ncmpc es un cliente Ncurses para Linux.
- Cantata, el mejor cliente de escritorio para Linux que he probado
- M.A.L.P. es un cliente Android disponible en F-Droid.
Lo único que hay que hacer es instalarlo (sudo apt install mpd
), activarlo (sudo systemctl enable mpd
) y crear un fichero básico de configuración. Renombra /etc/mpd.conf
a /etc/mpd.conf.bak
y creamos la nueva configuración:
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/tag_cache"
log_file "/var/log/mpd/mpd.log"
pid_file "/run/mpd/pid"
state_file "/var/lib/mpd/state"
sticker_file "/var/lib/mpd/sticker.sql"
user "mpd"
bind_to_address "any"
input {
plugin "curl"
}
audio_output {
type "alsa"
name "JustBoom"
device "hw:1,0"
mixer_type "software"
auto_resample "no"
auto_channels "no"
auto_format "no"
dop "yes"
replay_gain_handler "none"
}
Al final es donde defines que MPD debe usar Justboom como salida. En este caso le ha correspondido la dirección ALSA hw:1,0
porque la hw:0,0
es la HDMI, pero esto podría variar. Es interesante que el mezclador sea software
porque así podrás modificar el volumen desde el controlador (cliente MPD).
Con esta configuración, los ficheros de música los tienes que copiar a /var/lib/mpd/music
y que el propietario sea mpd
. Podrás hacer que se recargue la biblioteca desde el cliente (Cantata, M.A.L.P. y te quedará la música bien organizada.
Qobuz
Lo esencial de UPNP, Qobuz y MPD ya lo expliqué en esta otra entrada. En esa ocasión utilicé la distribución Moode Audio, donde viene todo esto hecho y mucho más. Pero en este caso solo necesito la parte de UpmpdCli.
El único controlador viable que he encontrado en el mundo Linux para Qobuz es BubbleUPNP. Es gratuita pero desafortunadamente no está en F-droid. Pero bueno, en este caso he colaborado comprando la licencia (que desactiva la publicidad y permite listas de reproducción de mśa de 16 pistas) porque han hecho un trabajo excelente. Además es un cliente soportado oficialmente por Qobuz.
UpmpdCli es un media renderer
libre que no viene en los repositorios de Raspbian, así que hay que armarse de paciencia y compilarlo. No es difícil y aunque sea en la Zero, no tarda demasiado. Estos son los pasos básicos:
Instalar dependencias
sudo apt install git autoconf automake libtool build-essential libcurl4-gnutls-dev libmicrohttpd-dev libmpdclient-dev libexpat1-dev libjsoncpp-dev python3-pip
Compilar e instalar librería npupnp
git clone https://framagit.org/medoc92/npupnp
cd npupnp
sh autogen.sh
./configure.sh --prefix=/usr --sysconfdir=/etc
make
sudo make install
Compilar e instalar librería libupnpp
git clone https://framagit.org/medoc92/npupnp
cd npupnp
sh autogen.sh
./configure.sh --prefix=/usr --sysconfdir=/etc
make
sudo make install
Compilar e instalar upmpdcli
git clone https://framagit.org/medoc92/upmpdcli
cd upmpdcli
sh autogen.sh
./configure.sh --prefix=/usr --sysconfdir=/etc --disable-spotify
make
sudo make install
Creamos un usuario exclusivo para este servicio, sin el cual se niega a arrancar:
sudo adduser --system upmpdcli
Crear una unit
para Systemd copiando el siguiente contenido a /etc/systemd/system/upmpdcli.service
:
[Unit]
Description=UPnP Renderer front-end to MPD
After=network-online.target mpd.service
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/upmpdcli -c /etc/upmpdcli.conf
Restart=always
RestartSec=1min
[Install]
WantedBy=multi-user.target
Debe arrancar después de que haya red y de que haya arrancado MPD. De la configuraciń /etc/upmpdcli.conf
normalmente no hay que tocar nada, pero te puedes pasar por si quieres cambiarle el nombre al renderer. Ese nombre será el que detecte BubbleUpnp en Android. Activar:
systemctl enable --now upmpdcli
Y ya está, UpmpdCli actúa de cliente de MPD y se comunica por el puerto estándar. Si has cambiado el puerto de MPD también debes cambiarlo aquí. Así que básicamente: BubbleUPNP hace el trabajo de traerse los ficheros Qobuz, los envía al renderer UpmpdCli, este a su vez los envía a MPD (reproductor de audio) el cual termina sacando el sonido por su dispositivo ALSA predeterminado: JustBoom.
Realmente portátil
El conjunto RaspberryZero y Justboom consume muy poco. La bateŕia de 3800maH da para muchas horas, cosa que si te digo la verdad no he medido exactamente, pero sí se que me aburrí esperando a que se acabara.
Gasta tan poco que pensé alimentar el conjunto con un sencillo panel de 12V/1A y aquí está el resultado:
No es algo muy recomendable ya que si te quedas sin sol el conjunto se apagará por las malas. Witty Pi3 cuando funciona con batería tiene un umbral mínimo, pasado el cual se apaga automáticamente de forma segura. Pero si la corriente que da el panel baja del umbral ya no hay energía restante para hacer el apagado.
De hecho, este vídeo terminó mal, porque el animal decidió ir a beber agua, tiró el panel y se apagó el equipo. Afortunadamente reinicié y nada se había roto.
Por cierto el altavoz es una nueva versión de este otro. El altavoz que traía este modelo de radio Silvercrest es tan asombrosamente bueno que decidí comprar una por Wallapop para hacer esta versión.
Perpetrado el 15 de abril de 2022 por una IN (Inteligencia Natural), la mia, con cierto esfuerzo.
Archivado en categoría(s) GNU/Linux, Música, Raspberry Pi
Deja una respuesta