====Bluetooth====
See [[interfaces:bluetooth]] for Linux Bluetooth devices and setup.
===Services===
Development has two service dependencies, dbus and bluetoothd.
==DBUS==
I normally disable dbus with systemd and here is how to enable this service with `runit' if preferred.
#!/bin/bash
sleep 1
#LOG
exec 2>&1
ulimit -aH
#RUN
export TZ="UTC"
rm -Rf /var/run/dbus
mkdir -p /var/run/dbus
exec dbus-daemon --syslog --syslog-only --nofork --config-file=/usr/share/dbus-1/system.conf
==BLUETOOTHD==
Install bluez and various tools if not already installed
apt install bluez bluez-tools bluez-test-tools bluez-hcidump
I prefer to run Bluetoothd from `runit'
This run file can work but it should wait until dbus is ready before starting.
See the wait method of runit to detect /var/run/dbus/pid.
#!/bin/bash
sleep 5
#LOG
exec 2>&1
ulimit -aH
#RUN
export TZ="UTC"
exec /usr/sbin/bluetoothd -n
===C development===
Development in C is mostly about reading the code examples.
==Headers==
Install dev headers for the current installation of bluez
apt install libbluetooth-dev
==Source==
Access source code for documentation of how to use bluez
git clone https://github.com/bluez/bluez
bluez source code demonstrates how to access BT devices via dbus in the src directory or the API in the attrib and tools directories.
==Build==
Build the source to create tools
sudo apt-get install glib2.0-dev libdbus-1-dev libical-dev python3-docutils
./bootstrap
./configure --prefix=/opt/bt --enable-experimental --enable-deprecated
== Test==
Test [[:boards:wb15|STM32WB15CC]] BLE device.
./tools/btgatt-client -d 00:80:E1:22:F9:7C
Connecting to device... Done
[GATT client]# Service Added - UUID: 00001801-0000-1000-8000-00805f9b34fb start: 0x0001 end: 0x0004
[GATT client]# Service Added - UUID: 00001800-0000-1000-8000-00805f9b34fb start: 0x0005 end: 0x000b
[GATT client]# Service Added - UUID: 0000fe40-cc7a-482a-984a-7f2ed5b3e58f start: 0x000c end: 0x0011
[GATT client]# GATT discovery procedures complete
[GATT client]#
service - start: 0x0001, end: 0x0004, type: primary, uuid: 00001801-0000-1000-8000-00805f9b34fb
charac - start: 0x0002, value: 0x0003, props: 0x20, ext_props: 0x0000, uuid: 00002a05-0000-1000-8000-00805f9b34fb
descr - handle: 0x0004, uuid: 00002902-0000-1000-8000-00805f9b34fb
service - start: 0x0005, end: 0x000b, type: primary, uuid: 00001800-0000-1000-8000-00805f9b34fb
charac - start: 0x0006, value: 0x0007, props: 0x0a, ext_props: 0x0000, uuid: 00002a00-0000-1000-8000-00805f9b34fb
charac - start: 0x0008, value: 0x0009, props: 0x02, ext_props: 0x0000, uuid: 00002a01-0000-1000-8000-00805f9b34fb
charac - start: 0x000a, value: 0x000b, props: 0x02, ext_props: 0x0000, uuid: 00002a04-0000-1000-8000-00805f9b34fb
service - start: 0x000c, end: 0x0011, type: primary, uuid: 0000fe40-cc7a-482a-984a-7f2ed5b3e58f
charac - start: 0x000d, value: 0x000e, props: 0x06, ext_props: 0x0000, uuid: 0000fe41-8e22-4541-9d4c-21edae82ed19
charac - start: 0x000f, value: 0x0010, props: 0x10, ext_props: 0x0000, uuid: 0000fe42-8e22-4541-9d4c-21edae82ed19
descr - handle: 0x0011, uuid: 00002902-0000-1000-8000-00805f9b34fb
[GATT client]# ^C
Shutting down...
LED on/off for demo connection above.
[GATT client]# write-value -w 0x000E 0x01 0x01
Write command sent
[GATT client]# write-value -w 0x000E 0x01 0x00
Write command sent
[GATT client]#
===Python===
It's certainly a lot easier to write code to access BLE devices
in Python and preferred for demo purposes and maybe even
end use cases.
apt install python3-gattlib
Example for the [[:boards:wb15|STM32WB15CC]] BLE demo.
import sys, time
from gattlib import GATTRequester
req = GATTRequester("00:80:E1:22:F9:7C", False)
req.connect(True)
for n in range(10):
req.write_cmd(0x000E, bytes([0x01,0x01]))
time.sleep(1)
req.write_cmd(0x000E, bytes([0x01,0x00]))
time.sleep(1)
req.disconnect()