GNU/Linux >> Tutoriels Linux >  >> Linux

Bluetooth Low Energy en C - utilisation de Bluez pour créer un serveur GATT

J'ai l'exemple de serveur GATT fonctionnant pour BlueZ 5.31 (dernier à ce jour):

Mon environnement :
Vagabond
Boîte virtuelle
Ubuntu Trusty Tahr en tant qu'OS invité (v. 14.04 OS 32 bits)
Mise à jour vers le noyau Linux 3.19
Paquets installés :
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev

Téléchargé BlueZ 5.31 à partir d'ici :https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Installation du noyau mis à jour (v. 3.19) :
sudo apt-get mise à jour
sudo apt-get install --install-recommends linux-generic-lts-vivid

Un redémarrage est nécessaire. J'utilise Vagrant et j'ai perdu l'accès au dossier partagé. Si cela vous arrive, attendez que vagrant signale l'erreur et allez quand même dans la VM (vagrant ssh). Dans la VM, exécutez cette commande pour résoudre le problème de dossier partagé :
configuration de sudo /etc/init.d/vboxadd

Je redémarrerais à nouveau (probablement pas nécessaire), pour vérifier que le dossier partagé est à nouveau actif.
Une fois de retour dans la VM, poursuivez l'installation de BlueZ 5.31 :
cd ~
sudo apt-get install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
tar xvf bluez-5.31.tar.xz
cd bluez-5.31
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-systemd --enable-experimental --enable-maintainer-mode
Fabriquer
sudo faire installer
sudo cp attrib/gatttool /usr/bin

Installation terminée. Vérifiez-le comme suit :
hciconfig
Vous devriez obtenir la réponse suivante (ou quelque chose de similaire) :
hci0 :Type :BR/EDR Bus :USB
Adresse BD :00:1A:7D:DA:71:0C ACL MTU :310:10 SCO MTU :64:8
VERS LE BAS
Octets RX :15528 acl :126 sco :0 événements :683 erreurs :0
Octets TX :6459 acl :146 sco :0 commandes :234 erreurs :0

Configurez l'adaptateur Bluetooth, lancez la publicité, lancez l'exemple de serveur GATT (service de fréquence cardiaque) avec verbose activé (mon adaptateur est hci0):
cd Répertoire BlueZ 5.31
outils sudo/btmgmt -i hci0 hors tension
outils sudo/btmgmt -i hci0 le sur
sudo tools/btmgmt -i hci0 connectable sur
sudo tools/btmgmt -i hci0 name "un nom convivial "
sudo tools/btmgmt -i hci0 publicité sur
outils sudo/btmgmt -i hci0 sous tension
outils/btgatt-server -i hci0 -s low -t public -r -v

Accédez à un autre appareil (j'ai utilisé un iPod, une tablette Android - Samsung Galaxy 5S et Nexus - et un autre PC exécutant BlueZ) et connectez-vous au service. Voici comment je l'ai fait sur un autre PC exécutant BlueZ :
gatttool -b Adresse MAC du serveur GATT -JE
relier
primaire
caractéristiques

Vous pouvez émettre d'autres commandes pour lire et écrire sur le serveur GATT.

J'ai également créé un serveur GATT personnalisé (votre demande d'origine) en copiant et en modifiant ce fichier :tools/btgatt-server.c . Vous pouvez modifier le fichier Makefile.tools pour inclure votre serveur personnalisé dans la construction. Vous devrez exécuter automake, make et sudo make install pour le faire fonctionner.


1) aller dans le dossier Bluez

2) sudo ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-systemd --enable-experimental --enable-maintainer- mode

3) sudo fait tout

4) Annoncez des paquets connectables

activer le Bluetooth

sudo hciconfig hci0 up

définir les données publicitaires :"hello world"

sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44

commencez à faire de la publicité comme connectable

sudo hciconfig hci0 leadv 0

5) arrêt du service sudo bluetooth

6) sudo src/bluetoothd -d -n

7) À partir d'un autre PC, tapez (Change MAC id gatt server mac)

gatttool -b gatt_server_mac --interactive

étape 6 est pour le cas où vous voudriez compiler plugins/gatt-example.c

si vous voulez compiler server.c depuis profile/time ou profil/alerte (remplacez par alerte à la place de l'heure) ou tout autre fichier du dossier de profil remplacez l'étape 6

sudo src/bluetoothd --plugin=time -n


J'ai atterri sur cette question à quelques reprises dans ma recherche d'un serveur GATT autonome pour C. Les réponses ici nécessitent de construire votre serveur GATT avec la pile BlueZ. BlueZ a ajouté la prise en charge de D-Bus pour autoriser les serveurs GATT autonomes et inclut même un exemple de serveur GATT autonome pour Python, mais pas pour C.

Ayant toujours besoin d'un serveur, j'ai commencé à travailler sur un avec l'intention de publier un échantillon, mais même une implémentation minimale est encore plus de code que je ne serais à l'aise d'appeler un échantillon .

La mise en œuvre initiale est maintenant terminée et a été publiée sous LGPL (modification :la licence est passée de GPL-3 à LGPL) :

https://github.com/nettlep/gobbledegook

Si ça aide quelqu'un, cool. Si cela aide quelqu'un qui a publié du code qui m'a aidé, c'est encore mieux.


Linux
  1. Créer des serveurs cloud OnMetal

  2. Pitchfork :Créer un serveur

  3. Comment installer Pdftk sur mon serveur ?

  4. Bluetooth Low Energy :écoute des notifications/indications sous Linux

  5. Pourquoi utiliser innodb_file_per_table ?

Comment créer un serveur de messagerie complet à l'aide de Postal

Créer un compartiment S3 sur AWS à l'aide de Terraform

Comment créer son propre serveur de streaming vidéo avec OBS Studio sous Linux

Comment créer un proxy HTTP à l'aide de Squid sur CentOS 8

Créer un serveur cloud

Java (J2SE) Bluetooth basse consommation (BLE)