Bluetooth Low Energy in C - using Bluez to create a GATT server
I got the example GATT server running for BlueZ 5.31 (latest as of this post):
My environment:
Vagrant
Virtual Box
Ubuntu Trusty Tahr as a guest OS (v. 14.04 32-bit OS)
Updated to linux kernel 3.19
Installed packages:
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev
Downloaded BlueZ 5.31 from here: https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
Installation of updated kernel (v. 3.19):
sudo apt-get update
sudo apt-get install --install-recommends linux-generic-lts-vivid
A reboot is necessary. I'm using Vagrant and lost shared folder access. If this happens to you, wait for vagrant to report the error and go into the VM anyway (vagrant ssh). In the VM, issue this command to fix the shared folder problem:
sudo /etc/init.d/vboxadd setup
I would reboot again (probably not necessary), to check that the shared folder is active again.
Once back in the VM, continue the installation of 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
make
sudo make install
sudo cp attrib/gatttool /usr/bin
Installation completed. Check it as follows:
hciconfig
You should get the follow response (or something similar):
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1A:7D:DA:71:0C ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:15528 acl:126 sco:0 events:683 errors:0
TX bytes:6459 acl:146 sco:0 commands:234 errors:0
Configure the Bluetooth adapter, start advertising, start example GATT server (heart rate service) with verbose on (my adapter is hci0):
cd BlueZ 5.31 directory
sudo tools/btmgmt -i hci0 power off
sudo tools/btmgmt -i hci0 le on
sudo tools/btmgmt -i hci0 connectable on
sudo tools/btmgmt -i hci0 name "some friendly name"
sudo tools/btmgmt -i hci0 advertising on
sudo tools/btmgmt -i hci0 power on
tools/btgatt-server -i hci0 -s low -t public -r -v
Go to another device (I've used an iPod, an Android -- Samsung Galaxy 5S and Nexus tablet -- and another PC running BlueZ) and connect to the service. Here is how I did it on another PC running BlueZ:
gatttool -b MAC address of GATT server -I
connect
primary
characteristics
You can issue other commands to read and write to the GATT server.
I've also created a custom GATT server (your original request) by copying and editing this file: tools/btgatt-server.c. You can edit the Makefile.tools file to include your custom server in the build. You'll have to run automake, make, and sudo make install to get it running.
Python BLE GATT Server personalised characteristic read
ReadValue and WriteValue have an options parameter that contains the connected device path, and this will identify it.
def WriteValue(self, value, options):
if ("device" in options):
print(options['device'])
Related Topics
What Length Can a Network Interface Name Have
What Do the Suffixes "+" and "-" After the Job Id of Background Jobs Mean
Sudoers Nopasswd: Sudo: No Tty Present and No Askpass Program Specified
Write to a File After Piping Output from Tail -F Through to Grep
Ignoring Comma in Field of CSV File with Awk
Simulating a Spinner for Progress in Bash
Linux Assembler Error "Impossible Constraint in 'Asm'"
Interrupting Syscalls in Threads on Linux
How to Determine the Precise Set of Environment Variables a Systemd Environmentfile Would Set
How to Save the Execution Log When We Run a Command Using Putty/Plink
Linux How to Add a File to a Specific Folder Within a Zip File
Filename Last Modification Date Shell in Script
How Does One Determine the Page Frame Number for Device Memory
How to Make Static Linked Elf File to Load Ld_Preload .So
How to Join a Thread in Linux Kernel
Grep Fails Inside Bash Script But Works on Command Line