Skip to main content

Transformer un Raspberry Pi en enceinte Bluetooth avec PipeWire

Présentation

Ce tutoriel vous guide dans la configuration d'un Raspberry Pi pour qu'il fonctionne comme une enceinte Bluetooth, vous permettant de diffuser de la musique depuis votre téléphone, tablette ou ordinateur vers des enceintes analogiques connectées au Pi.

Prérequis matériels

  • Raspberry Pi (modèle 3 ou ultérieur avec Bluetooth intégré)
  • Carte SD avec Raspberry Pi OS Lite déjà installé
  • Enceintes ou système audio avec entrée analogique 3.5mm
  • Câble audio 3.5mm
  • Alimentation adaptée pour le Raspberry Pi

Configuration initiale du système

  1. Configuration de la connexion automatique

Pour permettre un fonctionnement sans interface utilisateur :

sudo raspi-config

Naviguez vers :

  • Option 1 : System Options
  • Option S5 : Boot / Auto Login
  • Sélectionnez Console Autologin
  1. Installation des paquets nécessaires

Mettez à jour les dépôts et installez PipeWire, WirePlumber et les dépendances Bluetooth :

sudo apt update
sudo apt install pipewire wireplumber libspa-0.2-bluetooth python3-dbus

Redémarrez les services audio pour appliquer les changements :

systemctl --user restart pipewire wireplumber

Configuration Bluetooth

  1. Téléchargement des scripts de gestion

Téléchargez l'agent Bluetooth et son fichier de service systemd directement depuis le dépôt GitHub :

cd ~
wget https://raw.githubusercontent.com/fdanis-oss/pw_wp_bluetooth_rpi_speaker/master/speaker-agent.py
wget https://raw.githubusercontent.com/fdanis-oss/pw_wp_bluetooth_rpi_speaker/master/speaker-agent.service

Rendez le script exécutable :

chmod +x speaker-agent.py
  1. Configuration de l'agent Bluetooth

Pour autoriser plusieurs connexions simultanées (mixage audio) :

Utilisez la configuration par défaut qui permet à plusieurs appareils de se connecter et de mixer leur audio.

Pour n'autoriser qu'une seule connexion à la fois :

Modifiez le fichier de service pour ajouter l'option --single-connection :

sed -i 's|ExecStart=python speaker-agent.py|ExecStart=python speaker-agent.py --single-connection|' speaker-agent.service

Installation du service systemd

Créez le répertoire utilisateur pour systemd si nécessaire :

mkdir -p ~/.config/systemd/user

Copiez le fichier de service au bon emplacement :

cp speaker-agent.service ~/.config/systemd/user/

Activez et démarrez le service :

systemctl --user daemon-reload
systemctl --user enable speaker-agent.service
systemctl --user start speaker-agent.service

Configuration de BlueZ pour appairage automatique

Modifiez la configuration Bluetooth pour permettre l'appairage sans interaction :

sudo sed -i 's/#JustWorksRepairing.*/JustWorksRepairing = always/' /etc/bluetooth/main.conf

Redémarrez le service Bluetooth :

sudo systemctl restart bluetooth

Utilisation

  1. Connexion de vos appareils
  2. Connectez vos enceintes : Branchez vos enceintes ou système Hi-Fi sur la prise jack 3.5mm du Raspberry Pi

  3. Redémarrez le système :

    sudo reboot
    
  4. Appairez votre appareil : · Sur votre téléphone/tablette/ordinateur, activez le Bluetooth · Recherchez les nouveaux appareils · Sélectionnez RPi speaker (ou un nom similaire) · L'appairage se fera automatiquement sans code PIN requis

  5. Diffusez votre audio : · Une fois connecté, votre audio sera automatiquement redirigé vers les enceintes · Le volume peut être contrôlé depuis votre appareil source

Dépannage

Vérifier l'état des services

systemctl --user status speaker-agent.service
systemctl --user status pipewire
systemctl --user status wireplumber

Vérifier les connexions Bluetooth

bluetoothctl
# Dans l'interface bluetoothctl :
devices
info <adresse_MAC>

Journal des services

Pour voir les logs de l'agent Bluetooth :

journalctl --user -u speaker-agent.service -f

Réinitialiser les appareils appairés

Si vous rencontrez des problèmes de connexion :

bluetoothctl
# Dans l'interface bluetoothctl :
remove <adresse_MAC>
# Puis réappairez l'appareil

Résoudre l'erreur "appairage non accepté"

L'erreur "appairage non accepté" lors de la tentative de connexion du téléphone à votre Raspberry Pi est un problème courant lié aux profils et services Bluetooth. Voici comment le résoudre, étape par étape.

🔍 Diagnostic initial

Tout d'abord, vérifions l'état de l'interface Bluetooth et le service. Ouvrez un terminal sur votre Pi et exécutez ces commandes :

· hciconfig -a : Vérifiez que l'adaptateur est listé et qu'il est UP RUNNING. S'il est marqué DOWN, il faut le réactiver. · sudo systemctl status bluetooth : Assurez-vous que le service Bluetooth est bien actif (active (running)).

Si l'adaptateur est désactivé (DOWN), vous pouvez essayer de le réactiver avec sudo rfkill unblock bluetooth.

⚙️ Résolution principale : configuration du profil A2DP

D'après votre tutoriel, le Pi doit se comporter comme une enceinte Bluetooth. Pour cela, il doit exposer le bon profil audio. L'erreur "Pas de services utilisables" ou "appairage non accepté" indique souvent que le profil A2DP (Audio Sink) n'est pas correctement publié.

  1. Vérifier et installer PulseAudio Bluetooth (si nécessaire) Le gestionnaire audio PulseAudio gère souvent les connexions Bluetooth. Vérifiez si le module nécessaire est installé :
    sudo apt install pulseaudio-module-bluetooth
    
    Après l'installation, rechargez PulseAudio :
    pulseaudio -k
    pulseaudio --start
    
  2. Configurer BlueZ pour publier le profil A2DP (Méthode alternative) Parfois, il faut configurer l'agent Bluetooth (bluetoothctl) pour accepter les connexions sur le bon profil. Ouvrez l'outil en ligne de commande :
    sudo bluetoothctl
    
    Dans l'interface bluetoothctl, exécutez les commandes suivantes dans l'ordre : · agent on : Active l'agent de gestion des associations. · default-agent : Définit l'agent par défaut. · discoverable on : Rend le Pi visible. · pairable on : Autorise l'appairage. · scan on (temporairement) : Pour voir les appareils à proximité. Ensuite, depuis votre téléphone, tentez à nouveau l'appairage. Si une clé est demandée, confirmez-la à la fois sur le téléphone et dans le terminal bluetoothctl. Une fois l'appairage réussi, assurez-vous de faire confiance (trust) à l'appareil depuis bluetoothctl.
  3. Vérifier les services exposés Après l'appairage, dans bluetoothctl, utilisez la commande info <adresse_MAC_du_telephone> pour lister les services de votre Pi vus par le téléphone. Vous devriez voir des UUIDs de services audio comme 0000110a-0000-1000-8000-00805f9b34fb (Audio Source) ou 0000110b-0000-1000-8000-00805f9b34fb (Audio Sink). Leur absence confirme le problème de profil.

Crédits et licence

Ce tutoriel est basé sur le travail original de Frédéric Danis :

  • Article original : pw_wp_bluetooth_rpi_speaker
  • Licence : LGPL-2.1-or-later

Les scripts fournis sont sous licence LGPL-2.1-or-later. Vous êtes libre de les utiliser, modifier et distribuer selon les termes de cette licence.