GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bluetooth Low Energy in C - Verwendung von Bluez zum Erstellen eines GATT-Servers

Ich habe den GATT-Beispielserver für BlueZ 5.31 zum Laufen gebracht (zuletzt seit diesem Beitrag):

Mein Umfeld:
Landstreicher
Virtuelle Kiste
Ubuntu Trusty Tahr als Gastbetriebssystem (v. 14.04 32-Bit-Betriebssystem)
Aktualisiert auf Linux-Kernel 3.19
Installierte Pakete:
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev

BlueZ 5.31 von hier heruntergeladen:https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Installation des aktualisierten Kernels (v. 3.19):
sudo apt-get update
sudo apt-get install --install-recommends linux-generic-lts-vivid

Ein Neustart ist erforderlich. Ich verwende Vagrant und habe den Zugriff auf freigegebene Ordner verloren. Wenn Ihnen das passiert, warten Sie, bis vagrant den Fehler meldet, und gehen Sie trotzdem in die VM (vagrant ssh). Geben Sie in der VM diesen Befehl aus, um das Problem mit dem freigegebenen Ordner zu beheben:
sudo /etc/init.d/vboxadd-Setup

Ich würde erneut neu starten (wahrscheinlich nicht notwendig), um zu überprüfen, ob der freigegebene Ordner wieder aktiv ist.
Sobald Sie wieder in der VM sind, fahren Sie mit der Installation von BlueZ 5.31 fort:
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
machen
sudo make install
sudo cp attrib/gatttool /usr/bin

Installation abgeschlossen. Überprüfen Sie es wie folgt:
hciconfig
Sie sollten die folgende Antwort (oder etwas Ähnliches) erhalten:
hci0:Typ:BR/EDR-Bus:USB
BD-Adresse:00:1A:7D:DA:71:0C ACL-MTU:310:10 SCO-MTU:64:8
NIEDER
RX-Bytes:15528 acl:126 sco:0 Ereignisse:683 Fehler:0
TX-Bytes:6459 acl:146 sco:0 Befehle:234 Fehler:0

Konfigurieren Sie den Bluetooth-Adapter, starten Sie die Werbung, starten Sie den Beispiel-GATT-Server (Herzfrequenzdienst) mit verbose on (mein Adapter ist hci0):
cd BlueZ 5.31-Verzeichnis
sudo tools/btmgmt -i hci0 ausschalten
sudo tools/btmgmt -i hci0 le on
sudo tools/btmgmt -i hci0 anschließbar an
sudo tools/btmgmt -i hci0 name "irgendein freundlicher Name "
sudo tools/btmgmt -i hci0 Werbung ein
sudo tools/btmgmt -i hci0 einschalten
tools/btgatt-server -i hci0 -s low -t public -r -v

Gehen Sie zu einem anderen Gerät (ich habe einen iPod, ein Android-Gerät – Samsung Galaxy 5S und ein Nexus-Tablet – und einen anderen PC mit BlueZ verwendet) und stellen Sie eine Verbindung zum Dienst her. So habe ich es auf einem anderen PC mit BlueZ gemacht:
gatttool -b MAC-Adresse des GATT-Servers -ICH
verbinden
primär
Eigenschaften

Sie können andere Befehle zum Lesen und Schreiben auf dem GATT-Server erteilen.

Ich habe auch einen benutzerdefinierten GATT-Server (Ihre ursprüngliche Anfrage) erstellt, indem ich diese Datei kopiert und bearbeitet habe:tools/btgatt-server.c . Sie können die Datei Makefile.tools bearbeiten, um Ihren benutzerdefinierten Server in den Build aufzunehmen. Sie müssen automake, make und sudo make install ausführen, um es zum Laufen zu bringen.


1) gehe zum Bluez-Ordner

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

3) sudo alles machen

4) Verbindbare Pakete ankündigen

Bluetooth aktivieren

sudo hciconfig hci0 up

Werbedaten festlegen:"hello world"

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

Werbung als verbindbar starten

sudo hciconfig hci0 leadv 0

5) sudo-Dienst Bluetooth stoppen

6) sudo src/bluetoothd -d -n

7) Geben Sie auf dem anderen PC (MAC-ID gatt server mac ändern)

ein

gatttool -b gatt_server_mac --interaktiv

Schritt 6 ist für den Fall, dass Sie plugins/gatt-example.c kompilieren möchten

wenn Sie server.c aus Profil/Zeit kompilieren möchten oder Profil/Alarm (durch Benachrichtigung anstelle der Uhrzeit ersetzen) oder eine andere Datei im Profilordner ersetzt Schritt 6

sudo src/bluetoothd --plugin=time -n


Ich bin bei meiner Suche nach einem eigenständigen GATT-Server für C einige Male auf diese Frage gestoßen. Die Antworten hier erfordern, dass Sie Ihren GATT-Server mit dem BlueZ-Stack erstellen. BlueZ fügte D-Bus-Unterstützung hinzu, um eigenständige GATT-Server zu ermöglichen, und enthält sogar einen eigenständigen Beispiel-GATT-Server für Python, aber nicht für C.

Da ich immer noch einen Server brauche, begann ich mit der Arbeit an einem mit der Absicht, ein Beispiel zu veröffentlichen, aber selbst eine minimale Implementierung ist immer noch mehr Code, als ich Beispiel nennen würde .

Die Erstimplementierung ist nun erfolgt und wurde unter LGPL freigegeben (edit:die Lizenz wurde von GPL-3 auf LGPL geändert):

https://github.com/nettlep/gobbledegook

Wenn es jemandem hilft, cool. Wenn es jemandem hilft, der Code veröffentlicht hat, der mir geholfen hat, umso besser.


Linux
  1. Erstellen Sie einen DNS-Server

  2. Erstellen Sie einen sudo-Benutzer in CentOS

  3. Erstellen Sie einen sudo-Benutzer in Ubuntu

  4. Erstellen Sie OnMetal Cloud-Server

  5. Bluetooth Low Energy:Abhören von Benachrichtigungen/Hinweisen unter Linux

So erstellen Sie einen voll ausgestatteten Mailserver mit Postal

Erstellen Sie mit Terraform einen S3-Bucket auf AWS

So erstellen Sie einen eigenen Video-Streaming-Server mit OBS Studio unter Linux

So erstellen Sie einen HTTP-Proxy mit Squid unter CentOS 8

Erstellen Sie einen Cloud-Server

Wie installiere ich Pdftk auf meinem Server?