ArduinoBLE 库的使用
ArduinoBLE 是 Arduino 官方提供的用于低功耗蓝牙(BLE)通信的库。该库支持所有硬件支持 BLE 和 Bluetooth 4.0 及以上版本的 Arduino 开发板,包括:
- Nano 33 BLE - 基于 Nordic nRF52840 的开发板
- Arduino NANO 33 IoT - 集成 WiFi 和 BLE 的开发板
- Uno WiFi Rev 2 - 带有 WiFi 和 BLE 功能的 Uno 开发板
- MKR WiFi 1010 - MKR 系列开发板,支持 WiFi 和 BLE
使用方法
要使用 ArduinoBLE 库,首先需要在代码中包含库的头文件:
#include <ArduinoBLE.h>
BLE 快速入门
什么是 BLE?
Bluetooth 4.0 标准包含两种技术:传统的蓝牙(现在称为 "Bluetooth Classic")和低功耗蓝牙(Bluetooth Low Energy,简称 BLE)。BLE 针对低功耗和低数据速率进行了优化,设计用于从简单的纽扣电池供电运行。
BLE 通信模型
与基于异步串行连接(UART)的标准蓝牙通信不同,BLE 的通信模型更像是一个社区公告板。连接到它的设备就像社区成员阅读公告板一样。每个设备可以充当公告板(发布者)或读者(订阅者)。
- 外设设备(Peripheral):充当公告板,发布数据供其他设备读取。在 BLE 术语中,外设设备类似于服务器,因为它们包含读者设备请求的信息。
- 中心设备(Central):充当读者,从外设设备读取信息。在 BLE 术语中,中心设备类似于客户端,因为它们从外设读取可用信息。
可以将 BLE 外设设备想象成公告板,中心设备是查看者。中心设备查看服务、获取数据,然后离开。每次交互都很快(几毫秒),因此多个中心设备可以从一个外设获取数据。
服务和特征
外设提供的信息以 服务(Services) 的形式组织,每个服务又细分为 特征(Characteristics)。可以将服务想象成公告板上的通知,特征则是这些通知的各个段落。
- 外设设备:只需在需要时更新每个服务特征,无需担心中心设备是否读取它们。
- 中心设备:连接到外设后,读取所需的数据。
- 读写权限:如果某个特征既可读又可写,那么外设和中心都可以修改它。
Notify 通知机制
BLE 规范包含一种称为 notify(通知) 的机制,可以在数据更改时通知接收方。当启用特征的通知功能并且发送方写入新值时,新值会自动发送给接收方,而无需接收方显式发出读取命令。这通常用于流式数据,例如加速度计或其他传感器读数。
indicate(指示) 是 notify 的一个变体,工作方式类似,但在 indicate 规范中,读取方会发送对推送数据的确认。
BLE 的客户端-服务器结构,结合 notify 特征,通常称为 发布-订阅模型(publish-and-subscribe model)。
更新特征值
外设应该在特征值发生显著变化时更新它们。例如:
- 当开关从关闭变为打开时,更新其特征值
- 当模拟传感器变化达到显著程度时,更新其特征值
虽然可以按固定间隔更新特征值,但如果特征值没有变化,这会浪费处理能力和能量。因此,建议只在值发生有意义的变化时才更新特征。
中心设备和外设设备
- 中心设备(Central):充当客户端。它们从外设设备读取和写入数据。
- 外设设备(Peripheral):充当服务器。它们提供来自传感器的可读特征,并提供可读/可写特征来控制执行器(如电机、灯光等)。
在实际应用中:
- 外设设备:通常是传感器节点、IoT 设备等,负责采集数据并提供给中心设备
- 中心设备:通常是手机、平板电脑或主控制器,负责读取数据并控制外设
