21

我在这里有一个更广泛的问题,所以如果有人可以向我指出可以解释这一点的文档或文章,那就足够了。不用说,一天的谷歌搜索让我无处可去,我可以伸出援助之手。

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

  1. 创建一个 Gatt 服务器,
  2. 用一些可写的属性加载它,并且
  3. 宣传该服务器以连接到 android 设备。

我已经创建了将连接并作为中心运行的 Android 应用程序,渲染 3 基本完成。我不知道命令(要键入的文字内容)如何启动 Gatt 服务器/在 BeagleBoard 上创建属性。我知道硬件很大,所以我的术语可能完全不正确 - 也就是说,在完成 1 和 2 时,任何帮助都将不胜感激,即使它只是朝着正确的方向推进。谢谢!

4

3 回答 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) 

在这两个服务之后,您可以添加自己的服务。在您的情况下,您似乎没有针对知名服务,因此您将创建自己的服务。

首先,创建一个 128 位 UUID,例如使用uuidgenMac 命令行上的工具

$ 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 数据库。如果您没有生成二进制数据的好工具,您可能必须自己编写它们。蓝牙核心规范 V4.0 对此进行了解释。希望您能找到一个为您进行转换的 API :-)

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

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

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

如果您想先尝试 Android,因为它对您来说更熟悉,您可以尝试使用 Android 4.2 的 Galaxy S 4。它还有一个 LE 外围模式——不过我还没有测试过它的可靠性。目前充当 LE 外围设备的最可靠的智能手机堆栈目前在 iOS 7 中 - 因此,如果可以负担得起使用 iPod touch,它可能是值得的。

于 2013-10-26T12:22:04.933 回答
5

结帐bleno,这是我最近为 node.js 创建的 BLE 外围堆栈库。它目前支持 Linux(使用 BlueZ 4.101 测试)和 OS X 10.9。

这里这里有如何使用它的例子。

于 2013-11-12T16:51:35.363 回答
3

定制gatt服务的关键是bluez的守护程序bluetoothd。

我已经在博客中描述了如何自定义 gatt 服务,请查看。

于 2015-01-11T18:33:33.697 回答