创建一个 Gatt 服务器?

21

我有一个比较广泛的问题,如果有人能指向一份文件或文章来解释这个问题,那就足够了。不用说,我已经花了一整天的时间在谷歌上搜索,但是没有结果,我需要帮助。

我正在使用 BlueZ 5.9 连接到一个 BeagleBoard,我的意图是:

  1. 创建 Gatt 服务器,
  2. 在其中加载一些可写属性,并
  3. 将该服务器广告以连接到 Android 设备。

我已经创建了 Android 应用程序,它将作为中心连接并运行,从而完成了第三步。但我不知道如何输入命令 - 具体的输入内容 - 来启动 Gatt 服务器/在 BeagleBoard 上创建属性。我对硬件的知识非常有限,所以我的术语可能完全不正确 - 话虽如此,即使只是帮助我完成 1 和 2,也会受到赞赏。感谢!

3个回答

15

您的术语主要是正确的。

通常,GATT数据库至少具有0x1800(通用访问)0x1801(通用属性)服务。 通用访问服务包含两个强制特征:设备名称外观。 通用属性服务应为空。

因此,最小的GATT数据库如下所示:

Handle  Description
 0000   Service: Generic Access (1800)
 0001   Characteristic: Device Name (2A00, readable)
 0002   Characteristic Value (string)
 0003   Characteristic: Appearance (2A01, readable)
 0004   Characteristic Value (16bit enum)
 0005   Service: Generic Attribute (1801) 

完成这两项服务后,您可以添加自己的服务。在您的情况下,您似乎没有针对一个知名的服务进行定位,因此您将创建一个自己的服务。

首先,在您的Mac命令行中使用uuidgen工具创建一个128位UUID。

$ uuidgen
DCDF2725-56C8-4235-A4BC-F7951D5C3762

这将是您的服务UUID

 0006   Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

然后,你提到你想要几个可写的特征。那么,让我们为那个创建另一个UUID。

$ uuidgen
4C06C6F4-C90D-4C58-8E31-20C8C74FF832

并为服务添加一个特征

 0007   Characteristic: Custom Characteristic (4C06C...FF832, writeable)
 0008   Characteristic Value (hex, 20 bytes)

您的特征值不应超过20个字节,并且应选择“写请求”以确保将写操作的确认发送到中央。如果选择“写命令”,则写操作可能会被您手机的堆栈或外围设备丢弃。

定义了这个特征后,就可以开始编码了。

我不知道BeagleBoard SDK,但通常情况下,您需要初始化GATT库和其他模块(例如,为了支持写入,您必须初始化库的第二部分)。

初始化后,注册GATT数据库。如果没有好的工具来生成二进制数据,则可能需要自己编写。在Bluetooth Core Spec V4.0中有解释。希望您能找到一个可以为您进行转换的API :-)

注册成功后,您将必须设置广告参数并开始广告(再次请参阅SDK的文档和示例)。

现在发生的是,在某个时间点,您将获得一个回调,告诉您已建立连接,并且稍后,您将收到给定句柄的属性请求。然后,您只需通过查看句柄、提供的值和操作类型(读取/写入)来处理请求。不要忘记始终对请求返回成功值或错误代码,否则,您将锁定蓝牙通信。

通常,这些蓝牙芯片始终与异步操作一起工作。您将发送请求,然后必须等待请求完成,然后再发送下一个请求。记住,在编程时,这可以节省时间 :-)

如果您想先在Android上尝试,因为它更熟悉,请尝试搭载Android 4.2的Galaxy S 4。它也具有LE外围模式——虽然我没有测试其可靠性。目前,最可靠的智能手机堆栈用作LE外围设备的是iOS 7——所以,如果可以负担得起,可能值得购买一个iPod touch来进行实验。


5

请查看bleno,这是我最近为node.js创建的BLE外设堆栈库。目前它支持Linux(已使用BlueZ 4.101进行测试)和OS X 10.9。

有关如何使用它的示例,请单击此处此处


3
定制gatt服务的关键是bluez的守护程序bluetoothd。
我已经在我的博客中描述了如何定制gatt服务,请查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接