GNU/Linux >> Linux Esercitazione >  >> Linux

Bluetooth Low Energy in C - utilizzo di Bluez per creare un server GATT

Ho il server GATT di esempio in esecuzione per BlueZ 5.31 (più recente di questo post):

Il mio ambiente:
Vagabondo
Scatola virtuale
Ubuntu Trusty Tahr come sistema operativo guest (sistema operativo v. 14.04 a 32 bit)
Aggiornato al kernel Linux 3.19
Pacchetti installati:
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev

Scarica BlueZ 5.31 da qui:https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Installazione del kernel aggiornato (v. 3.19):
sudo apt-get update
sudo apt-get install --install-recommends linux-generic-lts-vivid

È necessario un riavvio. Sto usando Vagrant e ho perso l'accesso alla cartella condivisa. Se ciò accade a te, attendi che vagrant segnali l'errore ed entra comunque nella VM (vagrant ssh). Nella VM, emetti questo comando per risolvere il problema della cartella condivisa:
sudo /etc/init.d/vboxadd setup

Riavvierei di nuovo (probabilmente non necessario), per verificare che la cartella condivisa sia di nuovo attiva.
Una volta tornato nella VM, continua l'installazione di 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
rendere
sudo make install
sudo cp attrib/gatttool /usr/bin

Installazione completata. Controllalo come segue:
hciconfig
Dovresti ottenere la seguente risposta (o qualcosa di simile):
hci0:Tipo:BR/EDR Bus:USB
Indirizzo BD:00:1A:7D:DA:71:0C MTU ACL:310:10 MTU SCO:64:8
FUORI USO
RX byte:15528 acl:126 sco:0 eventi:683 errori:0
TX byte:6459 acl:146 sco:0 comandi:234 errori:0

Configura l'adattatore Bluetooth, avvia la pubblicità, avvia il server GATT di esempio (servizio di frequenza cardiaca) con verbose attivo (il mio adattatore è hci0):
cd directory BlueZ 5.31
sudo tools/btmgmt -i hci0 spegnimento
sudo tools/btmgmt -i hci0 le on
sudo tools/btmgmt -i hci0 collegabile su
sudo tools/btmgmt -i hci0 name "un nome descrittivo "
sudo tools/btmgmt -i hci0 pubblicità su
sudo tools/btmgmt -i hci0 accendi
tools/btgatt-server -i hci0 -s low -t public -r -v

Vai su un altro dispositivo (ho usato un iPod, un tablet Android - Samsung Galaxy 5S e Nexus - e un altro PC con BlueZ) e connettiti al servizio. Ecco come l'ho fatto su un altro PC con BlueZ:
gatttool -b indirizzo MAC del server GATT -IO
Collegare
primario
caratteristiche

Puoi emettere altri comandi per leggere e scrivere sul server GATT.

Ho anche creato un server GATT personalizzato (la tua richiesta originale) copiando e modificando questo file:tools/btgatt-server.c . Puoi modificare il file Makefile.tools per includere il tuo server personalizzato nella build. Dovrai eseguire automake, make e sudo make install per farlo funzionare.


1) vai alla cartella Bluez

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

3) sudo crea tutto

4) Pubblicizzare i pacchetti collegabili

attiva il bluetooth

sudo hciconfig hci0 up

imposta i dati pubblicitari:"hello world"

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

inizia a pubblicizzare come collegabile

sudo hciconfig hci0 leadv 0

5) sudo service bluetooth stop

6) sudo src/bluetoothd -d -n

7) Dall'altro PC, digita (Cambia id MAC gatt server mac)

gatttool -b gatt_server_mac --interactive

passaggio 6 serve nel caso in cui desideri compilare plugins/gatt-example.c

se vuoi compilare server.c da profilo/ora o profilo/avviso (sostituisci con avviso al posto dell'ora) o qualsiasi altro file nella cartella del profilo sostituisci il passaggio 6

sudo src/bluetoothd --plugin=time -n


Sono arrivato a questa domanda alcune volte nella mia ricerca di un server GATT autonomo per C. Le risposte qui richiedono la creazione del tuo server GATT con lo stack BlueZ. BlueZ ha aggiunto il supporto D-Bus per consentire server GATT autonomi e include anche un server GATT di esempio autonomo per Python, ma non per C.

Avendo ancora bisogno di un server, ho iniziato a lavorarci su uno con l'intenzione di rilasciare un campione, ma anche un'implementazione minima è ancora più codice di quanto mi sentirei a mio agio a chiamare un campione .

L'implementazione iniziale è stata eseguita ora ed è stata rilasciata sotto LGPL (modifica:la licenza è stata cambiata da GPL-3 a LGPL):

https://github.com/nettlep/gobbledegook

Se aiuta qualcuno, bene. Se aiuta qualcuno che ha rilasciato codice che ha aiutato me, ancora meglio.


Linux
  1. Crea server cloud OnMetal

  2. Forcone:crea server

  3. Come installo Pdftk sul mio server?

  4. Bluetooth Low Energy:ascolto di notifiche/indicazioni in Linux

  5. BlueZ:come configurare un server GATT dalla riga di comando

Come creare un server di posta completo utilizzando Postal

Crea un bucket S3 su AWS utilizzando Terraform

Come creare il proprio server di streaming video con OBS Studio in Linux

Come creare un proxy HTTP utilizzando Squid su CentOS 8

Crea un server cloud

Perché usare innodb_file_per_table?