BLE设备完整工作流程详解:从初始化到数据交互的核心步骤与代码示例

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

目录

1. 设备启动与初始化

步骤1:硬件初始化

示例代码(nRF Connect SDK):

2. 广播与扫描(Advertising & Scanning)

步骤2:Peripheral设备广播

示例代码(开始广播):

步骤3:Central设备扫描

示例代码(开始扫描):

3. 连接建立(Connection Setup)

步骤4:Central发起连接

示例代码(建立连接):

4. 服务发现与数据交互(GATT交互)

步骤5:服务发现

示例代码(发现服务):

步骤6:数据读写与通知

示例代码(启用通知):

5. 连接维护与断开

步骤7:连接维护

步骤8:断开连接

示例代码(断开连接):

6. 典型工作流程图

7. 关键概念与术语

8. 实际应用示例

场景:心率监测仪(Peripheral)

9. 常见问题与解决方案

Q1:连接失败?

Q2:数据传输延迟高?

Q3:服务发现失败?

总结

以下是 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);
}

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

34号树洞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值