Introduit en 1980 par le fabricant danois Bang & Olufsen avec le système Beolab 8000, le protocole Datalink 80 raccorde par un bus de données les différents appareils d’un même système , offrant à l’utilisateur un contrôle unifié sur ce dernier. Ainsi, une télécommande unique contrôle l’ensemble du système, et commencer la lecture sur un appareil provoque le basculement automatique de l’amplificateur sur l’entrée associée, ainsi que la mise en pause des autres appareils. Le protocole évolue au fil des années, voyant notamment, avec le Beosystem 5500, l’addition d’une transmission en temps réelle de l’état des appareils, alors affiché sur la télécommande (Master Control Panel 5500)
Étant propriétaire d’un système 5500 (BEOMASTER 5500, BEOCORD 5500, BEOGRAM CD 5500, et MASTER CONTROL PANEL 5500), j’ai souhaité lui ajouter une fonction Bluetooth audio, qui, contrairement à un adaptateur Bluetooth Audio classique, exploiterait le protocole Datalink pour offrir la même interface de contrôle que les autres éléments du système.
Le BEOMASTER 5500 étant doté d’une entrée TP2 permettant le contrôle d’un second BEOCORD, j’ai entrepris de concevoir un récepteur Bluetooth capable de simuler un BEOCORD 5500 sur le bus Datalink. Ce récepteur relaie les commandes du système (PLAY/PAUSE, etc.) via Bluetooth et transmet les informations sur la piste en cours de lecture au système.
Après un premier prototype à base d’ESP32 ne me donnant par entièrement satisfaction (codec SBC seulement, et stabilité de la connexion marginale), j’ai remanié le projet autour d’un module BM83 de Microchip, et je suis parvenu à un résultat satisfaisant, que j’ai nommé le BEOTOOTH 5500.
Sous la forme d’un boitier de 66mm de coté, et 27mm de haut, il dispose d’un câble (solidement maintenu en place par un support anti-arrachement) terminé par une prise DIN 7 broches pour se raccorder aux prises TP ou TP2 des équipements B&O, ainsi que d’une prise USB-C pour son alimentation. (5V, 100mA). De part de d’autre de la prise USB-C sont disposées une LED rouge qui indique l’état de la liaison Bluetooth (En veille / Connecté / Appairage), ainsi qu’un bouton poussoir, qui permet par un appui court d’entrer en mode appairage, ou par un appui prolongé (10 secondes) d’oublier tous les appareils appairés.
Ses principales fonctions sont :
La vidéo ci dessous démontre ces fonctionnalités :
Le BEOTOOTH 5500 est compatible avec tout appareil doté d’une interface Datalink (DIN 7 broches) et a été testé (par les membres du forum Beoworld) avec les systèmes suivants :
Appareil | Affichage du statut | Note |
Beomaster 5500 | Oui | Etat en temps réel sur entrée TP1 seulement |
Beosystem 2500 | Non | |
Beocenter 9500 | Non | |
Beomaster 5000 | – | |
BeoMaster 7000 | Oui | Statut affiché sur MCP6500, Confirmé OK contrôle et affichage status sur BL7000 et BL5000 |
Beosound Ouverture | Non | |
MCL2AV | Non | |
Beomaster 4500 | – | |
BeoSound 3200 | Non | Audio seulement ! Pas de liaison de donnée Datalink ! |
Il est possible de mettre à jour son micrologiciel simplement en le raccordant à un ordinateur (Windows ou Linux) via un câble USB-C.
Le BEOTOOTH 5500 est disponible assemblé et prêt à l’emploi, ou sous forme de kit incluant : la carte électronique préassemblée, la led rouge, le cable, la prise DIN 7 broche, le boitier usiné adéquatement, la pièce de support du câble, la visserie nécessaire, ainsi que l’étiquette. Le kit contient l’ensemble des éléments nécessaires à l’assemblage, mais nécessite des compétences en soudure électronique.
Un guide de montage et d’utilisation (en anglais) est disponible ici : Beotooth_Manual_V1.1
Si vous souhaitez acquérir un BEOTOOTH 5500, ou pour toute question, merci de publier un commentaire avec votre adresse e-mail, et je vous répondrai dans les plus bref délais.
Ayant récemment développé un projet de récepteur audio Bluetooth utilisant AVRCP pour récupérer les informations du lecteur multimédia actif, j’ai pu constater que Linux Mint ne communique aucune information sur le média en cours de lecture à travers la liaison Bluetooth.
Après quelques recherche, il s’avère que c’est le démon MPRIS-PROXY qui est chargé de cette fonction, mais celui-ci ne semble pas actif sous Mint. Pire, il est introuvable ni à son emplacement supposé (/bin), ni dans les paquets !
La frayeur est de courte durée, il est bien installé avec le paquet bluez
, et se situe à /lib/bluetooth/mpris-proxy
.
Il suffit pour l’activer de créer un fichier de configuration pour systemd
en mode utilisateur :
$ mkdir ~/.config/systemd/user
$ nano ~/.config/systemd/user/mpris-proxy.service
Y ajouter le contenu suivant :
[Unit]
Description=Forward bluetooth media controls to MPRIS
[Service]
Type=simple
ExecStart=/lib/bluetooth/mpris-proxy
[Install]
WantedBy=default.target
Il ne reste plus qu’à l’activer :
$ systemctl --user start mpris-proxy.service
$ systemctl --user enable mpris-proxy.service
On peut vérifier son bon fonctionnement avec la commande suivante :
$ systemctl --user status mpris-proxy.service
Qui doit nous retourner cette réponse :
Et voilà, les informations de la lecture multimédia (état lecture / pause, piste en cours, et position) sont maintenant accessibles par les périphériques Bluetooth connectés.
Il s’agit d’un petit logiciel que j’ai développé sous Qt, facilitant la calibration d’un écran tactile / tablette graphique, notamment quand l’écran en question est un écran secondaire
Cet article décrit très rapidement la procédure que j’ai suivie ( durant de nombreuses heures de tatonnements ) afin de mettre en place sous Linux Mint un environnement de développement pour stm32f042 basé sur QtCreator, stm32plus et OpenOCD, permettant de s’affranchir des logiciels ST.
Cloner le dépot git situé à l’URL suivante :
https://github.com/andysworkshop/stm32plus
Installer les dépendances nécessaires :
$ apt install libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib scons gdb-multiarch cmake
Compiler la bibliothèque stm32plus : Exécuter la commande suivante dans le dossier stm32plus en modifiant si nécessaire le type de MCU, le mode ( fast, small ou debug ) ainsi qu’en précisant la fréquence en Hz de l’oscillateur interne ou externe utilisé (paramètre hsi ou hse)
$ scons mode=debug mcu=f042 hsi=8000000 -j4
Installer la bibliothèque compilée :
$ sudo scons mode=debug mcu=f042 hsi=8000000 -j4 install
Corriger les problèmes de stm32plus avec CMake :
Dans le dossier /usr/local/arm-none-eabi/lib/stm32plus-040100
Pour éviter un problème de fichier non trouvé, éditer le contenu du fichier stm32plus-config.cmake pour ne conserver que les 2 premières lignes ( copiées ci dessous )
include(${CMAKE_CURRENT_LIST_DIR}/stm32plus-config-${STM32PLUS_CONFIGURATION}i.cmake
OPTIONAL RESULT_VARIABLE STM32PLUS_CONFIG_FILE)
Modifier le fichier stm32plus-config-debug-f042-8000000i.cmake ( modification à répéter pour chaque version de stm32plus compilée ) : ajouter --specs=nosys.specs
aux variables CMAKE_C_FLAGS et CMAKE_CXX_FLAGS.
Répéter éventuellement avec les autres modes pour disposer de la bibliothèque compilée pour chaque mode
Récupérer l’exemple de compilation avec CMake fourni avec stm32plus dans le dossier stm32plus/cmake/example
Dans QtCreator : Aide -> Plugins, activer « BareMetal », et redémarrer QtCreator
Dans les options de QtCreator, catégorie « Appareils Mobiles », onglet « Bare Metal », cliquer « Add » et sélectionner « OpenOCD », remplir ainsi :
Name : OpenOCD for STM32F042
Startup mode : Pipe mode
Executable file : openocd
Root script directory : /usr/share/openocd/scripts
Configuration file : /usr/share/openocd/scripts/board/st_nucleo_f0.cfg
Puis cliquer sur Appliquer
Dans les options de QtCreator, catégorie « Appareils Mobiles », onglet « Périphériques », cliquer « Ajouter » et sélectionner « Bare Metal Device », remplir ainsi :
Nom : STM32F042
GDB Service Provider : OpenOCD for STM32F042
Cliquer sur appliquer
Dans les options de QtCreator, catégorie « Kits », Onglet « Debugger », cliquer sur « Add » et remplir les champs suivants :
Name : GDB Multiarch
Path : /usr/bin/gdb-multiarch
Cliquer sur Appliquer
Dans les options de QtCreator, catégorie « Kits », Onglet « Kits », cliquer sur « Ajouter » et remplir les champs suivants :
Nom : STM32F042
Device type : Bare Metal Device
Device : STM32F042
Compiler C : GCC (C, arm 32 bits in /usr/bin)
Compiler C++ : GCC (C++, arm 32 bits in /usr/bin)
Debugger : GDB Multiarch
Qt Version : None
Cmake tool : System CMake at /usb/bin/cmake
CMake Configuration : cliquer sur « change », puis supprimer la ligne commençant par CMAKE_PREFIX_PATH
Cliquer sur appliquer
Se rendre dans le dossier où l’on a précédemment copié l’exemple CMake fourni avec stm32plus
Ouvrir le fichier CMakeList.txt avec QtCreator, et sélectionner le kit STM32 précédemment créé.
Editer le fichier CMakeList.txt pour refléter le MCU utilisé ainsi que le mode ( fast, small ou debug ) de compilation de stm32plus à utiliser. Spécifier aussi la fréquence de l’oscillateur, suivi de la lettre i ou e pour un oscillateur interne ou externe.
Dans mon cas, ce dossier était inexistant, j’ai copié le dossier system depuis l’example Blink ( sans CMake ), dans lequel j’ai renommé le dossier f042_48_8 en f042.
Renommer le fichier system/f042/startup.asm en system/f042/startup.s. Modifier le fichier CMakeList.txt pour refléter ce changement.
Dans la catégorie « Projet », sélectionner la variable CMAKE_PREFIX_PATH, et cliquer sur « unset », puis « Apply configuration change ». La variable doit se remplir avec le contenu suivant :
/usr/local/arm-none-eabi;/usr/arm-none-eabi
Dans QtCreator, Menu « Compiler », cliquer sur « Executer CMake ».
Il est maintenant (enfin) possible de compiler et de débugger le projet