====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()