Es posible utilizar un router OpenWRT como altavoz Bluetooth gracias al proyecto BlueZ-ALSA, que permite recibir audio desde dispositivos bluetooth externos, sin necesidad de instalar PulseAudio. Voy a explicar como hacerlo sin entrar en demasiados detalles.
Como punto de partida necesitamos:
- Un router OpenWRT conectado a Internet que tenga dos puertos USB libres
- Una tarjeta bluetooth USB compatible con Linux (cuidado con esto, que las hay que sólo valen para Windows)
- Una tarjeta sonido USB
- Conocimientos para manejar Openwrt desde un cliente remoto (SSH o PuTTY)
NOTA: El paquete que he compilado soporta únicamente routers mips32, que son estos:
https://openwrt.org/docs/techref/instructionset/mips_mips32#devices_with_this_instructionset.
Puedes hacer tu propia compilación (
los detalles están aquí) o descargarte alguna de estas:
Altavoz Bluetooth con el HG553Altavoz Bluetooth con el HG556aLas compilaciones incluyen ALSA, BlueZ y Bluez-Alsa. No se utiliza PulseAudio.
ALSA es un componente del núcleo de Linux diseñado para manejar dispositivos de sonido.
BlueZ es la pila oficial de protocolos Bluetooth para Linux. A partir de la versión 5 dejó de ser compatible con ALSA, en favor de PulseAudio. PulseAudio parece no funcionar en OpenWrt. Afortunadamente existe Bluez-Alsa.
Bluez-Alsa permite la integración entre BlueZ y ALSA, actuando como intermediador entre perfiles BT de audio y dispositivos BT de audio. Bluez-Alsa no está incorporado en OpenWrt, pero se puede incorporar haciendo una "compilación a medida".Cargar la imagen en el router, insertar los pinchos USB de audio y BT y arrancar el router.
EMPAREJAR EL TELÉFONO MÓVIL CON EL ROUTER Y ENVIARLE AUDIOEn el PC, abrir una sesión SSH e invocar la utilidad para configurar conexiones BT "bluetoothctl"
root@OpenWrt:~# bluetoothctl
Agent registered
Desde la utilidad "bluetoothctl", activar el pincho BT del router
power on
discoverable on
pairable on
default-agent
En el teléfono móvil, activar BT. El dispositivo OpenSpk (el router) aparecerá disponible. Pulsarlo para vincular
El teléfono móvil pide un PIN. Poner cualquiera, por ejemplo 0000
La utilidad "bluetoothctl" detecta la solicitud de conexión de un nuevo dispositivo. Confirmar PIN. Poner el mismo que al teléfono móvil
Si pide confirmación para algún servicio determinado, contestar que sí. La conexión queda establecida
En el teléfono, el dispositivo OpenSpk aparece sincronizado y conectado
Cerrar la utilidad "bluetoothctl"
quit
En la sesión SSH, teclear
alsamixer -D bluealsa -V capture
Bajar el volumen de captura hasta un discreto 28% aproximadamente, para evitar saturación
Salir pulsanto la tecla Esc
En la sesión SSH, teclear
bluealsa-aplay -vv 00:00:00:00:00:00
La utilidad bluealsa-aplay recoge el audio del dispositivo BT y lo redirecciona a la tarjeta de sonido
Volver al teléfono móvil y reproducir un audio o un vídeo. ¡El sonido se oirá en los altavoces o auriculares del router!
El volumen del pincho de audio se puede controlar con alsamixer
alsamixer
FICHEROS DE CONFIGURACIÓN(Incluidos en la compilación)
/etc/bluetooth/audio.conf (Configura el pincho BT para recibir audio)
[General]
Enable=Source
(Parece que lo razonable sería Enable=Sink, pero no. BlueZ es así.)
/etc/bluetooth/main.conf (Se le puede poner un nombre al altavoz BT. No es necesario, pero mola)
[General]
Name=OpenSpk
/etc/init.d/bluealsa (Habilita el servicio bluealsa audio-sink)
#!/bin/sh /etc/rc.common
START=70
USE_PROCD=1
PROG=/usr/bin/bluealsa
start_service() {
procd_open_instance
procd_set_param command "$PROG" -i hci0 -p a2dp-sink
procd_close_instance
}
stop() {
service_stop /usr/bin/bluealsa
}
/etc/dbus-1/system.d/bluealsa.conf (Políticas de seguridad)
<!-- This configuration file specifies the required security policies
for BlueALSA core daemon to work. -->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- ../system.conf have denied everything, so we just punch some holes -->
<policy user="root">
<allow own_prefix="org.bluealsa"/>
<allow send_destination="org.bluealsa"/>
</policy>
<policy group="audio">
<allow send_destination="org.bluealsa"/>
</policy>
</busconfig>
/etc/asound (Genera el dispositivo PCM virtual bluealsa)
defaults.bluealsa.service "org.bluealsa"
defaults.bluealsa.interface "hci0"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000
Es necesario reiniciar los servicios para activar los cambios
service dbus restart
service bluetoothd restart
service bluealsa restart
O, si se prefiere, hacer un reboot.