User Tools

Site Tools


doc:appunti:software:rpi_kodi_bluetooth_headset

Cuffia Bluetooth con Kodi su Raspberry Pi

Come ascoltare l'audio da Kodi con una cuffia Bluetooth, il tutto su Raspberry Pi. Questa è la piattaforma hardware e software:

  • Raspberry Pi 3 Model B.
  • Cuffie Bluetooth Mpow H1.
  • Sistema Operativo Raspbian basato su Debian Stretch 9.11.
  • Kodi 17.6 Krypton.

Il Raspberry Pi 3 include un controller Bluetooth, i pacchetti da installare sono:

  • bluez - Include il demone bluetoothd che fornisce il servizio bluetooth e il programma di controllo bluetoothctl.
  • bluealsa - Include il demone bluealsa che fornisce il servizio omonimo.

BlueZ, PulseAudio e BlueALSA

La nostra soluzione non prevede l'utilizzo di PulseAudio. Molte ricette invece prevedono di installare PulseAudio per collegare BlueZ al sistema audio ALSA. Questo perché è necessario un middleware per far comunicare il software che implementa il protocollo Bluetooth (BlueZ) con i driver del kernel e relative librerie che gestiscono la scheda audio (ALSA). In passato vi era una integrazione diretta fra BlueZ e ALSA e non era necessario alcun middleware, ma con BlueZ versione >= 5 è necessario una componente in più. In molti tuttavia preferiscono non installare PulseAudio a causa delle dipendenze e complicazioni che ciò comporta, perciò è nato BlueALSA. Questa componente software fornisce un device PCM chiamato bluealsa che risponde alle specifiche ALSA software PCM I/O plugin, non è una ALSA Kernel proc interface.

Pertanto le istruzioni che seguono utilizzano bluealsa e non richiedono l'installazione di PulseAudio. Per altri dettagli vedere la pagina PulseAudio e ALSA.

Pairing delle cuffie Bluetooth

Con il servizio bluetooth attivo è possibile eseguire il programma bluetoothctl che fornisce una console di controllo a riga di comando. Le prime operazioni da fare sono abilitare l'interfaccia Bluetooth del Raspberry Pi con il comando power on, attivare l'agente Bluetooth che gestirà il pairing con agent on, quindi definire tale agent come quello predefinito con default-agent e infine ricevere la lista dei device rilevati con scan on:

# bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:AA:27:A0 Discovering: yes

Tenendo premuto il tasto cornetta delle cuffie per circa 7 secondi, queste entrano in modalità pairing (il LED lampeggia blu/rosso). Nella console bluetoothctl si vede comparire il device Mpow H1 con il suo MAC address:

[NEW] Controller B8:27:EB:AA:27:A0 kodi [default]
[NEW] Device EB:06:EF:F6:11:B4 Mpow H1

a questo punto è possibile fare il pairing, trust e connect:

pair EB:06:EF:F6:11:B4
connect EB:06:EF:F6:11:B4
trust EB:06:EF:F6:11:B4

Il pairing è la procedura per cui controller e device si riconoscono l'uno con l'altro, poiché le cuffie non hanno un'interfaccia di input (es. una tastiera) il pairing avviene senza digitare un PIN. Quando si esegue il comando connect le cuffie segnalano l'evento con il messaggio vocale connected. Con il comando trust si indica che d'ora in poi vorremo effettuare il paring e il connect automaticamente ogni volta che la cuffia viene accesa.

ATTENZIONE: Se il pacchetto bluealsa non è installato, il connect fallisce con il seguente errore:

[bluetooth]# connect EB:06:EF:F6:11:B4
Attempting to connect to EB:06:EF:F6:11:B4
Failed to connect: org.bluez.Error.Failed

Con il comando info è possibile verificare lo stato del device:

[Mpow H1]# info EB:06:EF:F6:11:B4
Device EB:06:EF:F6:11:B4
        Name: Mpow H1
        Alias: Mpow H1
        Class: 0x240404
        Icon: audio-card
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)

Le preferenze delle connessioni Bluetooth (compreso lo stato di trust, ecc.) vengono salvate nella directory /var/lib/bluetooth/.

Da questo momento in poi la cuffia Bluetooth è disponibile come device per le librerie ALSA (e quindi per i comandi aplay, alsamixer, ecc.) semplicemente indicando come device la stringa bluealsa:HCI=hci0,DEV=EB:06:EF:F6:11:B4,PROFILE=a2dp (ovviamente il MAC address deve essere quello specifico del vostro dispositivo).

Test delle cuffie

I tool ALSA possono adesso usare la cuffia Bluetooth, è sufficiente indicare il device con l'opzione -D:

aplay -D bluealsa:HCI=hci0,DEV=EB:06:EF:F6:11:B4,PROFILE=a2dp \
    /usr/share/sounds/alsa/Front_Center.wav

Purtroppo la periferica Bluetooth non viene elencata tra quelle disponibili dal comando aplay --list-devices, poiché BlueALSA è un plugin I/O, non un driver del kernel. Anche lanciando il comando alsamixer e premendo F6, la scheda audio bluealsa non viene elencata, ma è possibile scegliere l'opzione enter device name e digitare appunto bluealsa. Nella figura seguente ecco come viene evidenziata la periferica:

Alsamixer with Bluealsa device

Esistono due canali di output: A2DP e SCO. Si tratta di due protocolli differenti per il trasporto dell'audio su Bluetooth. Il primo è l'acronimo per Advanced Audio Distribution Profile e serve per lo streaming audio da un device all'altro. È quello che useremo nel nostro caso. Il protocollo Synchronous Connection-Oriented è invece generalmente utilizzato per canali audio mono, ad esempio per l'auricolare dello smartphone. Esiste anche un canale di input, infatti la cuffia Mpow H1 ha un microfono integrato per effettuare le telefonate (infatti utilizza il protocollo SCO). Infine il mixer mostra anche il livello della batteria della cuffia.

Configurazione /etc/asound.conf

La configurazione appena fatta non è sufficiente per poter selezionare le cuffie Bluetooth in Kodi; se andiamo nel menu Settings = System settingsAudioAudio output device vediamo che compaiono le periferiche integrate del Raspberry Pi (PI: HDMI e PI: Analogue) ed altre eventuali periferiche ALSA (ad esempio ALSA: USB Advanced Audio Device, Analog per una scheda audio USB), ma non vi è traccia del dispositivo Bluetooth.

È necessario dichiarare il plugin bluealsa nel file /etc/asound.conf in questo modo:

pcm.btheadset {
    type plug
    slave.pcm {
        type bluealsa
        device "EB:06:EF:F6:11:B4"
        profile "a2dp"
    }
    hint {
        show on
        description "Mpow H1 Bluetooth Headset"
    }
}

Dopo aver riavviato Kodi - e solo se le cuffie hanno fatto il connect Bluetooth - sarà possibile selezionare il device audio ALSA: Mpow H1 Bluetooth Headset dal menu.

Il file /etc/asound.conf ha valenza per l'intero sistema, in alternativa è possibile creare un file $HOME/.asoundrc valido solo per l'utente che esegue Kodi.

Se si desidera che la periferica BlueALSA sia quella predefinita dal sistema ALSA (cioè quella utilizzata se non si indica il device con l'opzione -D), è sufficiente aggiungere una sezione al file di configurazione asound.conf (oppure alla versione personale dell'utente):

pcm.!default {
    type plug
    slave.pcm "btheadset"
}

Integrazione con Kodi

Audio output device

In Kodi 17 è possibile scegliere il device per l'uscita audio dal menu Settings = System settingsAudioAudio output device. Qui vengono elencati tutti i dispositivi di tipo ALSA Kernel e quelli di tipo PCM I/O plugin che siano dichiarati in /etc/asound.conf. Purtroppo Kodi crea l'elenco di questi dispositivi al suo avvio; se il connect avviene dopo che Kodi è già avviato, la cuffia Bluetooth non viene mostrata. È necessario riavviare Kodi per poterla selezionare.

Pulsanti delle cuffie

I pulsanti delle cuffie Mpow H1 vengono riconosciuti da Kodi per le seguenti funzioni:

Cornetta Pausa
+ Brano successivo
- Brano precedente

Le funzioni integrate direttamente nella cuffia e confermate da messaggi vocali nella cuffia stessa sono invece:

Tenere permuto + Alza il volume
Tenere permuto - Abbassa il volume
Tenere permuto Cornetta per 3 sec Disconnect
Tenere permuto Cornetta per 4 sec Pairing
Tenere permuto Cornetta per 6 sec Power off

Web References

doc/appunti/software/rpi_kodi_bluetooth_headset.txt · Last modified: 2020/08/14 10:18 by niccolo