Bluetooth Low Energy in C - Verwendung von Bluez zu erstellen, die ein GATT-server
Ich bin versucht, GATT auf meiner Linux-box einrichten eines benutzerdefinierten Dienstes mit einem Last von Eigenschaften.
Mit diese Frage, und die, die es links zu, ich war in der Lage, zu identifizieren, die code, die ich brauchen würde, zu schreiben (unter Verwendung der gatt_service_add()
- Funktion).
Ich habe eine separate Datei namens gatt_service.c geschrieben und der code, den ich denke, dass ich brauche. Aber ich kann nicht herausfinden, wie mein code, um die Bluez-Bibliotheken, um kompiliert und ausgeführt meine Lösung. Zum Beispiel diese Website (zwar nicht für die BLE-Entwicklung) links gegen libbluetooth mit -lbluetooth
als gcc-parameter, und ich kann nicht herausfinden, was link gegen meinen code arbeiten.
Habe ich noch nicht gebucht, keine Proben, weil ich mir nicht sicher bin was zu posten - wenn überhaupt erforderlich ist, oder habe ich versäumt zu erwähnen, etwas, lassen Sie es mich bitte wissen.
Vielen Dank im Voraus.
BEARBEITEN - weitere Informationen:
Folgenden die Kommentare, die ich verwendet habe-plugins/Zeit als Basis zu schreiben, meine eigene Datei für meine eigenen "Sender-service". Voller code: hier (ich weiß nicht, welches bit des Codes zu setzen in der Antwort!).
Meine Zusammenstellung Befehl: gcc gatt_broadcaster_service.c -Wall -o gatt_broadcaster_service -lbluetooth 'pkg-config --cflags --libs glib-2.0' -I/home/alexander/Documents/bluez-5.29/lib
(einschließlich der glib bit um das Problem zu beheben, berichtete hier).
Den Fehler den ich bekomme, ist: gatt_broadcaster_service.c:11:27: fatal error: lib/bluetooth.h: No such file or directory #include "lib/bluetooth.h"
Meine C-Datei gespeichert in Dokumente, und meine Forschung sagt mir, dass es nicht finden können lib/bluetooth.h, weil es ist nicht auf der Suche an der richtigen Stelle (diese und diese sprechen über die Verwendung von include-flags für den compiler, wenn eine Datei nicht in den Allgemeinen Orten, aber ich kann nicht machen, dass die Arbeit.
Nochmals vielen Dank!
-lbluetooth
ist der richtige Weg, um link gegen die bluetooth-Bibliothek... vielleicht, wenn du geschrieben welche Fehler sind Sie immer, wenn Sie versuchen, kompilieren Sie Ihren code erhalten Sie möglicherweise besser helfen.Vielleicht sind Sie einschließlich
-lbluetooth
auf die Zusammenstellung Schritt und nicht die Verknüpfung Schritt?Ich habe bearbeitet Sie meine Frage, einige code, Befehl kompilieren und die Fehler, die ich immer bin. Irgendwelche Gedanken? Danke!
InformationsquelleAutor Alex | 2015-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das Beispiel der GATT-server läuft BlueZ 5.31 (neueste Version, wie von diesem post):
Meinem Umfeld:
Vagrant
Virtual Box
Ubuntu Trusty Tahr als Gast-OS (v. 14.04 32-bit-OS)
Aktualisierte linux-kernel 3.19
Installierte Pakete:
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev
Heruntergeladen BlueZ 5.31 von hier: https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Installation der kernel aktualisiert (v. 3.19):
sudo apt-get update
sudo apt-get install --install-recommends linux-generic-lts-vivid
Ist ein Neustart notwendig. Ich bin mit Vagrant und verloren freigegebenen Ordner zugreifen. Wenn dies geschieht, um Sie, warten Sie, bis vagrant um den Fehler zu melden und gehen in die VM sowieso (vagrant ssh). In der VM, geben Sie diesen Befehl, um fix den freigegebenen Ordner problem:
sudo /etc/init.d/vboxadd-setup
Ich würde Neustart wieder (wahrscheinlich nicht nötig), um zu überprüfen, dass der freigegebene Ordner ist wieder aktiv.
Einmal zurück in der VM, setzen Sie die installation von 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
machen
sudo make install
sudo cp attrib/gatttool /usr/bin
Fertig ist die Installation. Überprüfen Sie es wie folgt aus:
hciconfig
Sie sollten, Holen Sie sich das follow-response (oder so ähnlich):
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1A:7D:DA:71:0C ACL MTU: 310:10 SCO MTU: 64:8
UNTEN
RX bytes:15528 acl:126 sco:0 events:683 Fehler:0
TX bytes:6459 acl:146 sco:0 commands:234 Fehler:0
Konfigurieren Sie die Bluetooth-adapter, starten, Werbung, start-Beispiel GATT-server (heart-rate-service) mit verbose auf (mein adapter ist hci0):
cd BlueZ 5.31 Verzeichnis
sudo-tools/btmgmt -i hci0 ausschalten
sudo-tools/btmgmt -i hci0 le
sudo-tools/btmgmt -i hci0 Anschließbare auf
sudo-tools/btmgmt -i hci0 name "einige freundliche Namen"
sudo-tools/btmgmt -i hci0 Werbung
sudo-tools/btmgmt -i hci0 einschalten
tools/btgatt-server -i hci0 -s low -t-öffentlich-r -v
Gehen Sie zu einem anderen Gerät (ich habe einen iPod, ein Android -- Samsung Galaxy 5S und Nexus tablet -- und ein weiterer PC läuft BlueZ) und eine Verbindung zum Dienst herzustellen. Hier ist, wie ich es auf einem anderen PC mit BlueZ:
gatttool -b MAC-Adresse des GATT server -ich
verbinden
primäre
Merkmale
Können Sie weitere Befehle ausgeben, um Lesen und schreiben zu den GATT-server.
Habe ich auch erstellt eine benutzerdefinierte GATT-server (Ihre erste Anfrage) durch kopieren und Bearbeiten dieser Datei: tools/btgatt-server.c. Sie können das Makefile editieren.tools-Datei, um Ihre benutzerdefinierten server im build. Musst du laufen, automake, make und sudo make install, um es läuft.
InformationsquelleAutor Johnas Cukier
1) goto Bluez-Ordner
2) sudo ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-systemd --enable-experimental --enable-maintainer-mode
3) sudo make all
4) Werben Anschließbare Pakete
aktivieren Sie bluetooth
sudo hciconfig hci0 up
Satz werben data: "hello world"
sudo hcitool -i hci0 0x08 cmd 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
starten Sie Werbung als Anschließbare
sudo hciconfig hci0 leadv 0
5) sudo service bluetooth-stop
6) sudo src/bluetoothd -d -n
7) Von anderen PC-Typ (Ändern Sie die MAC-id gatt-server mac)
gatttool -b gatt_server_mac --interactive
Schritt 6 ist für in Fall, dass Sie wollen, zu kompilieren plugins/gatt-Beispiel.c
wenn Sie möchten, compile-server.c aus Profil/Zeit oder profle/alert(ersetzen mit der Warnung, die in Ort, Zeit) oder anyother-Datei im Profil-Ordner ersetzen Schritt 6
sudo src/bluetoothd --plugin=- n
so drucken Sie den Wert schreiben Rückruf in btgatt-server.c-Programm ?
InformationsquelleAutor Jagdish
ya die Schaffung eines Zeit-server ist gut zu beginnen mit .Profil/Zeit hat gute Sitte Beispiel,clean-up-code, und versuchen Sie halten einen minimalen code, und führen Sie mit gatttool als client.Wenn Sie möchten, eine benutzerdefinierte client-und custom-server, als du sehen kannst tools/btgatt-client.c und tools/btgatt-server.c .
Laufen tools/btgatt-server.c in einem pc mit sudo ./btgatt-server in einem pc
und sudo ./btgatt-client -d server_mac in einem anderen pc
InformationsquelleAutor Jagdish
Landete ich auf diese Frage ein paar mal in meine Suche nach einer standalone-GATT-server für C. hier Die Antworten erfordern den Aufbau Ihrer GATT-server mit dem BlueZ stack. BlueZ Hinzugefügt D-Bus-Unterstützung zu ermöglichen, eigenständige GATT-Servern und enthält sogar ein standalone sample GATT-server für Python, aber nicht für C.
Braucht noch ein server, begann ich, mit der Absicht, die Freigabe einer Probe, sondern auch eine minimale Umsetzung ist noch mehr code, als würde ich bequem aufrufen einer Probe.
Die erste Implementierung ist jetzt fertig und wurde veröffentlicht unter der GPL-3:
https://github.com/nettlep/gobbledegook
Wenn es jemand hilft, cool. Wenn es hilft jemand, der veröffentlicht hat code, der mir geholfen hat, noch besser.
InformationsquelleAutor pauln