蓝牙低功耗(BLE)或蓝牙智能是一种无线个人区域网络技术,在使用相同的无线电频率时,它与蓝牙经典不向后兼容。与蓝牙经典相比,它在保持相似的通信范围(通常在10米到100米之间)的同时降低了功耗。它被纳入蓝牙核心规范4.0版。

低功耗蓝牙有两个核心协议:

  • 通用访问配置文件(GAP):控制设备间的连接和广告。GAP定义了两个核心设备角色:

    • 外设:连接到中心设备的小型、低功耗、资源受限的设备。它们通常是传感器。一个外设只能连接到一个中心设备。

    • 中央:这是ConnectCore 8M Nano设备通常的角色,处理来自外围设备的连接。

  • 通用属性概要(GATT):用于BLE设备间的数据传输。GATT定义了服务和特征,并定义了两个角色:

    • 服务器或从服务器,它包含服务和特征定义,通常是上面的外围设备。

    • 客户机或主机,通常是上面向服务器发送请求的中心设备。

GATT事务由主设备通过建立连接并向从设备建议连接间隔来启动。然后,从服务器将尝试在连接间隔重新连接以恢复数据。

BLE为低能耗设备定义了一组基于GATT (Generic Attribute Profile)协议的服务和特性的配置文件。一个配置文件的预定义集合是服务,它又包含一组特征。每个服务都用UUID标识自己,官方BLE服务为16位,自定义服务为128位特征由预定义的16位或128位UUID标识。

用户空间使用情况

Digi Embedded Yocto包括bluetoothctlgattool,以及其他可用于测试蓝牙功能的标准命令行应用程序,如下所示:

扫描和发现设备

你可以使用bluetoothctl工具扫描上述设备。也可以只扫描BLE设备hcitool如下:

#hcitool -i hci0 lescan——复制LE扫描…00:18:31:85:28:3E(未知)00:18:31:85:28:3E Keyfobdemo

连接

识别出远程设备后,就可以使用gatttool命令行应用程序。您将看到提示符更改为远程设备的MAC。

#gatttool -i hci0 -b <远端MAC> -i[00:18:31:85:28:3E] (LE) >连接

发现服务

您可以请求发现远端设备提供的服务。

(反对)[00:18:31:85:28:3E] (LE) >主attr句柄:0x0001,结束GRP句柄:0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb attr句柄:0x000c,结束GRP句柄:0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb attr句柄:0x0010,结束GRP句柄:0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb attr句柄:0x0023,结束GRP句柄:0x0025 uuid: 00001803-0000-1000-8000-00805f9b34fb attr句柄:0x0026,结束GRP句柄:0x0028 uuid: 00001802-0000- 1000000 -00805f9b34fb attr句柄:0x0029,结束GRP句柄:0x002c uuid:00001804-0000-1000-8000-00805f9b34fb attr句柄:0x002d,结束GRP句柄:0x0031 uuid: 0000180f-0000-1000-8000-00805f9b34fb attr句柄:0x0032,结束GRP句柄:0x0044 uuid: 0000ffa0-0000-1000-8000-00805f9b34fb attr句柄:0x0045,结束GRP句柄:0xffff uuid: 0000ffe0-0000-1000-8000-00805f9b34fb

访问特征

然后,您可以读取/写入特征。在当前的例子中,我们正在使用一个加速度计设备,它可以按如下方式启用:

(反对)[00:18:31:85:28:3E] (LE) >特征值/描述符:00 [CON][00:18:31:85:28:3E] (LE) >char-write-req 34 01 [CON][00:18:31:85:28:3E] (LE) >日志含义特征值写入成功

作为BLE服务器

您可以将您的设备设置为BLE服务器。为此,您可以使用自定义应用程序来提供您自己的服务和特征,或者使用示例应用程序btgatt-server模拟一个心率装置。

心率服务

启动BLE广告:

#btmgmt -i hci0 le on hci0设置Low Energy完成,设置:powered bondable ssp br/edr le secure-conn#btmgmt -i hci0 connectable on hci0 Set connectable complete,设置:powered connectable bondable ssp br/edr le secure-conn#BTMGMT -i hci0 name "my_ble_server"#btmgmt -i hci0 advertising on hci0 Set advertising complete,设置:powered connectable bondable ssp br/edr le advertising secure-conn

启动具有所需功能的GATT服务器(- r——心率:启用心率服务):

#btgat -server -i hci0 -r -v开始监听ATT频道。等待连接<客户端连接后将出现下一个输出> Connect from 00:40:9D:98:99:BD运行GATT server [GATT server]# att: > 10 01 00 ff ff 00 28 ......[[GATT server]# att: att PDU received: 0x10 .

此时,您可以使用任意一种方式连接到BLE服务器gatttoolbtgatt-client

#hcitool lescan LE Scan…00:40:9D: 8 b: 8 e: 20 my_ble_server#btgatt-client -d 00:40:9D:8B:8E:20 -i hci0 -v btgatt-client:在ATT通道打开L2CAP LE连接:src: 00:40:9D:98:99:BD dest: 00:40:9D:8B:8E:20连接到设备…做……[GATT client]# services service - start: 0x0001, end: 0x0006, type: primary, uuid: 00001800-0000-1000-8000-0 0805f9b34fb ........

样例应用程序

一个示例应用程序ble-gatt-server-example包含在dey-examples包装meta-digi层。此应用程序演示了如何在ConnectCore 8M Nano平台上启用具有自定义服务和使用蓝牙SIG标准的特性的BLE GATT服务器。

应用程序创建了一个名为“设备信息”的服务,该服务包含以下特征:

  • 当前时间(读/写特点)

    • Read:返回当前系统时间。

    • Write:将接收到的值打印到控制台。

  • 温度测量(读/通知特性)

    • Read:返回当前CPU温度

    • Notify:在订阅时,当温度超过作为命令行参数传递的定义阈值时发送通知

每个特征都有两个描述符,“用户描述”和“表示格式”包含特征值的格式信息(格式、指数、单位、命名空间和描述)。

启动BLE广告:

#btmgmt -i hci0 le on hci0设置低能量完成,设置:供电连接可绑定ssp br/edr le广告安全连接#btmgmt -i hci0 connectable on hci0设置connectable complete,设置:powered connectable bondable ssp br/edr le advertising secure-conn#btmgmt -i hci0 pairable on hci0 Set Bondable complete,设置:powered connectable Bondable ssp br/edr le advertising secure-conn#btmgmt -i hci0 advertising on hci0 Set advertising complete,设置:powered connectable bondable ssp br/edr le advertising secure-conn

初始化BLE接口之后,就可以启动示例应用程序了。参见GATT服务器样例应用程序的语法- h表示帮助):

#/usr/bin/ble-gatt-server-app -h ble-gatt-server-app [options] options: -i,——index 指定适配器索引,例如hci0 -t,——threshold 发送通知的温度阈值-m,——mtu 使用的ATT mtu -v,——verbose启用额外日志记录-h,——help显示帮助

运行GATT服务器,温度阈值为50C:

#/usr/bin/ble-gatt-server-example——index hci0——threshold 50运行GATT服务器开始监听ATT通道。等待连接

现在,您可以从客户端(例如使用移动电话上的任何标准应用程序)连接到GATT服务器,以阅读并与之交互。

GitHub查看应用程序说明和源代码。

已知问题和限制

  • 支持的最大同时蓝牙低功耗连接数为15。