Bonjour à tous,
Suite à une panne j’ai été obligé de reconfigurer le RPI 3B qui me sert de récepteur bluetooth audio. On se connecte en bluetooth au RPI depuis un smartphone sans interaction autre qu’accepter le code au moment de l’association entre eux des appareils. Le RPI a sa sortie son branchée sur l’ampli et donc on a le son du smartphone sur l’ampli et les enceintes.
Avant la panne ça fonctionnait très bien. Depuis j’ai réussi à réinstaller un système qui ne fonctionne que moyennement: on peut se connecter/déconnecter quelques fois puis le système bloque et il faut rebooter la framboise. Le son à l’air stable.
Si vous voulez reproduire l’expérience depuis une installation fraîche voilà la procédure qui finalement fonctionne le moins mal.
- Matériel:
Dans un LAN, un RPI 3B connecté via un cable Jack/RCA à un ampli. On administre le RPI en SSH depuis le LAN, il faut un paramétrage DHCP dans la box.
2.Installation:
- Avec RPI Os imager, choisir Raspberry Pi OS 64bits light comme image. On utilise le paramétrage de RPI Os imager pour pouvoir accéder au RPI en SSH dès le premier démarrage.
- Au premier redémarrage on fait d’abord un :
sudo apt update
et un
sudo apt upgrade -y
qui mettent le système à jour. Ensuite je reboote:
sudo reboot
Au redémarrage on installe ces paquets: - « screen » qui est un gestionnaire de session
- « bluetooth » qui,si j’ai bien compris, met à jour la dernière version du contrôleur « bluetoothctl »
- « bluez » qui, si j’ai bien compris, permet entre autre de faire de transmettre l’audio par le bluetooth
-« bluez-utils » qui permet d’installer l’agent « bt-agent » et la commande « bt-adapter »
sudo apt install screen bluetooth bluez bluez-utils
Enfin on se crée un dossier « bluetooth » en guise d’espace de travail
cd /home/sigmund/
mkdir bluetooth
cd bluetooth
3-paramétrage
Si on suit la plupart des tutos du Net sur le sujet, on aborde forcément comment utiliser le contrôleur « bluetoothctl ». Cependant m’est avis que bluetoothctl fonctionne de manière très aléatoire. Modifier /etc/bluetooth/main.conf est censé passer un paramétrage bluetoothctl mais cela fonctionne très mal. Le paramétrage proposé permet de se passer totalement de bidouiller « bluetoothctl ». J’utilise même un main.conf vide:
cd /etc/bluetooth
sudo cp main.conf main.conf.bak
sudo rm main.conf; sudo touch main.con
La suite consiste à créer un script de paramétrage qui se lancera à chaque démarrage. Appelons le « bt-launcher »:
sudo nano "bt-launcher"
Comme c’est un script simple la première ligne est:
#!/bin/sh
et la dernière:
exit 0
Voyons ce qu’on met entre les deux. La commande hciconfig permet, si j’ai saisie, de procéder à un premier paramétrage au niveau de l’interface. Donc après la première ligne on ajoute ces lignes les unes après les autres:
sudo hciconfig hci0 up # active l'interface
sudo hciconfig noauth # déactive l'authentification
sudo hciconfig piscan # active la visiblité de l'interface bluetooth
sudo hciconfig hci0 lm accept # "the device will accept baseband connections even when there are no listening AF_BLUETOOTH sockets. (man hciconfig)"
sudo hciconfig hci0 sspmode 1 # active le "Simple Pairing Mode", réglage empirique
bt-adapter --set DiscoverableTimeout 0 # rend la visibilité de l'interface constante
bt-adapter --set PairableTimeout 0 # rend l'appairage constant
bt-adapter --set Discoverable on # active la visibilité
bt-adapter --set Pairable on # active l'appairage
sudo bt-agent --capability=DisplayOnly --pin /home/denis/bluetooth/pin # lance l'agent de façon à ce que l'utilisateur n'ai pas de code à saisir, juste un code à confirmer; le code est paramétré dans le fichier "pin"
On rend le script exécutable avec:
sudo chmod +x bt-launcher
Il faut aussi créer le fichier « pin » avec le paramétrage dedans:
sudo nano pin
dedans on place ceci:
* *
on sauvegarde. Il y a 5 espaces entre les deux astérisques. La première astérisque correspond à la l’adresse mac d’une interface cliente, la deuxième au code pin correspondant. Ce paramétrage à double astérisque signifie « pour n’importe quel adresse mac correspond un code aléatoire ».
Il faut aussi corriger les droits du fichier sans quoi on obtient un message d’erreur:
sudo chmod 550 pin
Ici, avant de le lancer au démarrage, on peut tester que le script ne renvoie pas d’erreur en l’exécutant:
./bt-launcher
On remarque que le script s’exécute correctement mais semble gelé, on ne revient pas au prompt. (« Ctrl + c » permet de revenir au prompt mais termine l’exécution de bt-agent.)
A ce stade une connexion bluetooth depuis un smartphone devrait fonctionner: l’interface du RPI est visible, l’appairage affiche simplement un code sur le smartphone qu’il faut confirmer, ce dernier se connecte au Rpi en détectant le bon service.
Pour rendre pérenne ce changement on va exécuter le script au démarrage de la machine. On édite le fichier /etc/rc/local:
sudo nano /etc/rc.local
Et juste avant la dernière ligne « exit 0 » on place les lignes suivantes:
cd /home/sigmund/bluetooth
./bt-launcher
On sauvegarde et on redémarre la machine en se disant qu’au redémarrage on pourra se connecter sans problème. Et en essayant, on se prend un message d’erreur sur le smartphone. Là, grand mystère…Si on ouvre alors une session SSH et qu’on réessaie la connexion en bluetooth, elle fonctionne…Si on ferme la session SSH alors la connexion bt ne fonctionne plus. Du coup je lance une session ssh, un screen
, je lance htop
dans une fenêtre, je quitte en laissant la sesson screen active en utilisant screen -d
avant exit
, cela semble fonctionner comme ça. Plus ou moins car après quelques connexions/déconnexions ça ne fonctionne plus et il faut redémarrer le bouzin.
Vos commentaires sont les bienvenus, surtout si vous connaissez une façon d’obtenir un résultat stable. Merci de m’avoir lu.
Miaou.
Petit Chat