BLE HRPC例程

源码路径:example/ble/hrpc

支持的平台

例程可以运行在以下开发板上.

  • sf32lb52-lcd_n16r8

  • sf32lb56-lcd_a128r12n1/sf32lb56-lcd_n16r12n1

  • sf32lb58-lcd_n16r64n4/sf32lb58-lcd_a128r32n1_dsi

概述

  • 这是一个基于Sifli BLE协议栈的一个应用程序示例,创建自定义的GATT service,进行BLE的广播、连接,以及连接后基本的GATT数据交互,可以通过蓝牙将hrpc传感器数据通过蓝牙发送到手机,手机也可以进行写入数据,。

hrpc基本概念

  • hrpc 是蓝牙标准配置文件之一,用于接收和处理来自心率传感器(心率传感器是传感器设备,HRP 是心率传感器的协议)的数据。

  • 在例程中的作用:该例程是一个基于 Sifli BLE 协议栈的应用程序示例,它创建自定义的 GATT service,进行 BLE 的广播、连接,以及连接后基本的 GATT 数据交互,可以通过蓝牙将 hrpc 传感器数据发送到手机,手机也可以进行写入数据。

GATT协议

GATT(Generic Attribute Profile,通用属性配置文件) 是低功耗蓝牙(BLE)通信的核心规范,定义了设备间数据交互的统一框架和规则。它基于属性(Attribute) 概念组织数据,是 BLE 设备实现服务发现、数据读写、实时通知等功能的基础。GATT本质是一套数据交互协议。 GATT协议包含以下几类数据:

  • 服务(Service):相关特征的集合,代表设备的一项完整功能。

  • 特征(Characteristic):是GATT中最常见的交互单元,本质是一组相关的属性组合。例如:“心率特征” 包含 “心率值(特征值)” 和 “心率测量范围(描述符)”。

  • 属性(Attribute):是GATT中最小的数据单元。每个属性包含3部分:

    1. UUID:用于唯一标识属性。区分不同类型的数据(如 “心率值” 的 UUID 是 0x2A37,“电池电量” 是 0x2A19)

    2. 值(Value):实际存储的数据(如心率值 “65”、电池电量 “80%”)

    3. 权限(Permissions):属性值的访问权限,如:只读、只写、读写、通知等。

  • 配置文件:是多个服务组合,针对特定应用场景定义。例如:“心率配置文件(HRP)” 规定了实现心率监测必须包含 “心率服务” 和 “电池服务”(方便用户查看设备电量)

GATT的核心功能

发现服务与特征

  • 客户端连接服务器后,首先需要 “遍历” 服务器中的服务和特征,了解对方能提供哪些数据(类似 “查询目录”)。

  • 流程:客户端发送 “发现服务请求”→ 服务器返回所有服务的 UUID 和范围 → 客户端再针对每个服务发现其包含的特征。

例程的使用

例程配置前的准备

  • 手机端建议:iPhone手机推荐用第三方软件LightBlue,Android端用nRF Connect进行BLE测试。

编译和烧入

切换到例程project目录,运行scons命令执行编译:

scons --board=sf32lb52-lcd_n16r8 -j8

运行build_sf32lb52-lcd_n16r8_hcpu\uart_download.bat,按提示选择端口即可进行下载:

build_sf32lb52-lcd_n16r8_hcpu\uart_download.bat

Uart Download

please input the serial port num:5

运行结果展示

如果在开机log中可以看到log信息打印,则说明例程运行成功:

  • 蓝牙协议的初始化成功 alt text

  • 广播启动成功 alt text

  • 在手机端打开我们上面说的下载的对应软件,并连接名为SIFLI_APP-xx-xx-xx-xx-xx-xx的蓝牙设备,如图所示 alt text

  • 连接成功之后可以看到手机界面中的含有名为SIFLI_APP-xx-xx-xx-xx-xx-xx的蓝牙设备已连接,如图所示 alt text alt text

  • 可以通过手机app进行数据的读取,和写入 alt text alt text

异常诊断

  • 如果不能实现上面展示中的步骤,请检查手机端是否已经打开蓝牙,以及手机是否已经连接上单片机。

  • 是否选择对了菜单框进入