目录
2. 广播与扫描(Advertising & Scanning)
以下是 BLE设备的工作流程 的详细说明,涵盖从设备启动到数据通信的完整过程,结合 GAP(通用访问配置文件) 和 GATT(通用属性配置文件) 协议的核心步骤

1. 设备启动与初始化
步骤1:硬件初始化
-
硬件准备:
-
BLE芯片(如nRF52、ESP32)上电,初始化射频模块。
-
-
软件初始化:
-
启动蓝牙协议栈,配置蓝牙地址(BD_ADDR)。
-
定义设备角色:Peripheral(广播数据)或 Central(主动连接)。
-
示例代码(nRF Connect SDK):
#include <zephyr/bluetooth/bluetooth.h>
void main(void) {
int err = bt_enable(NULL);
if (err) {
printk("Bluetooth init failed: %d\n", err);
return;
}
printk("Bluetooth initialized\n");
}
2. 广播与扫描(Advertising & Scanning)
步骤2:Peripheral设备广播
-
广播模式:
-
Peripheral设备定期发送 广告数据包(Advertising Packet),包含设备信息(如名称、UUID)。
-
广播类型:
-
可连接广播:允许Central设备连接。
-
不可连接广播:仅发送信息(如Beacon广告)。
-
-
-
关键参数:
-
广播间隔:广告包发送的间隔(默认100ms~1秒)。
-
广播数据内容:
-
服务UUID:标识设备支持的功能(如
0x180F电池服务)。 -
设备名称:如 "Smart Sensor"。
-
-
示例代码(开始广播):
static struct bt_data ad[] = {
BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_FLAG_BREDR_NOT_SUPPORTED),
BT_DATA(BT_DATA_NAME_COMPLETE, "Sensor", 7),
BT_DATA_UUID16_LIST(BT_UUID_HEART_RATE_SERVICE),
};
void start_advertising(void) {
bt_le_adv_start(BT_LE_ADV_NCONN_NAME, ad, ARRAY_SIZE(ad), NULL, 0);
}
步骤3:Central设备扫描
-
扫描模式:
-
Central设备启动扫描,监听周围广播包。
-
可过滤特定UUID或设备名称。
-
-
扫描结果处理:
-
收到广告包后,解析广播数据并记录设备信息。
-
示例代码(开始扫描):
static void scan_cb(const struct bt_le_scan_resp *resp, int err) {
if (err) {
printk("Scan failed: %d\n", err);
return;
}
// 处理扫描到的设备
}
void start_scanning(void) {
bt_le_scan_start(BT_LE_SCAN_PASSIVE, scan_cb);
}


2943

被折叠的 条评论
为什么被折叠?



