Danielside

informática softwarelibre divagaciones música

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.

PiZero, witty, Justboom
PiZero, witty pi3 mini, Justboom

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:

Pantalla OLED programable con Python

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:

Para saber si se ha detectado el DAC. Busca «sndrpijustboomd».

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.

Cantata conectado a la Pi Zero. ¡OJO! Música extraída desde sus CDs originales o comprada en digital.

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.

BubbleUPNP conectado a la Raspberry mediante UpmpdCli

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.


Archivado en categoría(s) GNU/Linux, Música, Raspberry Pi

Enlace permanente



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.