蓝牙低功耗:使用BlueZ堆栈作为外设(具有自定义服务和特性)

我试图在Linux机器上使用BlueZ堆栈来创build一个具有自定义服务和特性的GATT服务器。 最终目标是使用任何中央设备(例如iOS或Android设备)连接到GATT服务器,发现服务和特征,并处理特征中的数据。

例:

  • 包含3个特征的1个服务的外围设备。
  • 服务uuid​​ = 0xFFFF
  • 字符1 uuid = 0xAAAA,属性=可读
  • 字符2 uuid = 0xBBBB,属性=可读写
  • 字符3 uuid = 0xCCCC,属性=通知

从中央设备,我应该看到外围设备,连接到它并发现一个具有三个特征(0xAAAA,0xBBBB,0xCCCC)的服务(0xFFFF)。 然后我应该可以读取0xAAAA的值,读取和写入0xBBBB的值,并在0xCCCC上启用通知。

请注意,我知道存在类似的问题 ,但仅解释如何将外设用作广告客户。 另一个解决的问题解释了如何创build一个GATT服务器,但没有解释如何使用特性的属性(例如可读,通知等),或者我错过了一些东西。

先谢谢你。

您可以看到gatt-example练习,或者在profile /目录下定义的配置文件,例如alert / server.c。 基本上,你只需要使用gatt_service_add()函数在现有的代码之后注册你的服务。 例如 :

gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF, /* Char 1 */ GATT_OPT_CHR_UUID16, 0xAAAA, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback, /* Char 2 Define here */ ... /* Char 3 Define here */ ... GATT_OPT_INVALID); } 

此外,我忘记了细节,但为了让服务器工作正常,您需要在配置过程中启用实验(和维护者模式),方法是添加“–enable-maintainer-mode”和“–enable-experimental”

要运行,使用-n和-d选项运行已编译的“bluetoothd”进行调试(也可以使用-E来启用实验性服务)。 运行bluetoothd后,您可能需要重新设置适配器。 然后你可以使用gatttool从远程设备连接(也可以在远程设备上运行bluetoothd)。

1)转到Bluez文件夹

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

3)sudo使所有

4)广告可连接的数据包

 # activate bluetooth sudo hciconfig hci0 up # set advertise data: "hello world" sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44 # start advertising as connectable sudo hciconfig hci0 leadv 0 

5)sudo服务蓝牙停止

6)sudo src / bluetoothd -d -n

7)从其他PC上,键入(更改MAC ID gatt服务器mac)

 gatttool -b gatt_server_mac --interactive 

第6步是为了防止编译插件/ gatt-example.c

如果你想编译服务器c配置文件/时间profle /警报 (替换警报代替时间)或任何其他档案文件夹中的文件替换步骤6

sudo src / bluetoothd –plugin = time -n