BLE Current Time Server (CTS) 示例
源码路径:example/ble/tip_cts
支持的平台
全平台
概述
本示例演示了如何在设备上实现BLE Current Time Service (CTS)服务器。该服务允许BLE客户端(如智能手机)获取和设置设备的当前时间信息。示例实现了完整的BLE应用,包括:
自定义服务和特征的定义与注册
广播(Advertising)管理
GATT服务端实现,支持读写操作
Current Time Service (CTS) Profile实现
与RT-Thread RTC设备的集成
核心功能
1. 自定义服务和特征
示例定义了一个自定义服务和特征用于演示数据交换:
#define app_svc_uuid { \
0x73, 0x69, 0x66, 0x6c, \
0x69, 0x5f, 0x61, 0x70, \
0x70, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00 \
};
#define app_chara_uuid { \
0x73, 0x69, 0x66, 0x6c, \
0x69, 0x5f, 0x61, 0x70, \
0x70, 0x01, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00 \
}
该服务包含以下属性:
服务声明特征
自定义数据特征
客户端特征配置描述符(用于通知)
2. 广播管理
示例实现了一种广播模式:
可连接广播
设备启动后会开始广播,允许其他设备发现并连接。
3. Current Time Service 实现
通过BSP_BLE_TIMES
宏控制的代码实现了完整的Current Time Service:
#ifdef BSP_BLE_TIMES
#include "bf0_ble_tips.h"
#include "time.h"
#endif
服务支持以下操作:
获取当前时间
获取本地时间信息(时区、夏令时)
获取参考时间信息
设置当前时间
设置本地时间信息
时间服务与RT-Thread RTC设备驱动集成,当通过BLE接收到时间设置请求时,会同步更新设备RTC。
例程使用方法
编译并烧录程序到开发板
使用支持BLE的手机(如iPhone的LightBlue或Android的nRF Connect)连接设备
查找并访问Current Time Service
可以读取设备当前时间,或写入新的时间值
手机端操作方法
Android设备操作步骤:
使用nRF Connect应用操作Current Time Service:
下载并安装nRF Connect应用
打开应用,扫描附近的BLE设备
找到名为”SIFLI_APP-xx-xx-xx-xx-xx-xx”的设备并连接
在服务列表中找到”Current Time Service” (UUID: 0x1805)
可以对以下特征进行操作:
Current Time Characteristic (UUID: 0x2A2B):读取/写入当前时间
Local Time Information Characteristic (UUID: 0x2A0F):读取时区信息
Reference Time Information Characteristic (UUID: 0x2A12):读取参考时间信息
iOS设备操作步骤:
使用LightBlue应用操作Current Time Service:
下载并安装LightBlue应用
扫描并连接到设备
浏览服务找到Current Time Service
对各个特征进行读写操作
实际操作示例:
读取时间:
使用手机BLE应用连接设备
寻找”Current Time Service”
读取”Current Time”特征值
应用会显示当前设备时间
设置时间:
使用手机BLE应用连接设备
找到”Current Time Service”
向”Current Time”特征写入新的时间值
设备会更新其内部RTC时间
命令行功能
示例提供了丰富的命令行接口用于调试和配置:
diss conn [interval] # 更新连接参数
diss adv_start # 启动广播
diss adv_stop # 停止广播
diss adv_update # 更新广播内容
diss gen_addr # 生成蓝牙地址
硬件需求
运行该例程需要一块支持的开发板。
编译和烧录
切换到例程project/common目录,运行scons命令执行编译:
> scons --board=eh-lb525 -j32
切换到例程project/common/build_xx
目录,运行uart_download.bat
进行下载。
预期结果
例程启动后:
设备开始广播,可被手机等BLE客户端发现
客户端可以连接设备并访问Current Time Service
可以读取和写入时间信息
时间信息与设备RTC同步
技术要点
1. BLE服务注册
通过sibles_register_svc_128
函数注册自定义服务,使用128位UUID:
env->data.srv_handle = sibles_register_svc_128(&svc);
sibles_register_cbk(env->data.srv_handle, ble_app_gatts_get_cbk, ble_app_gatts_set_cbk);
2. GATT回调处理
实现了读写回调函数处理客户端请求:
ble_app_gatts_get_cbk
:处理读请求ble_app_gatts_set_cbk
:处理写请求
3. 时间服务集成
时间服务与系统RTC同步:
#ifdef RT_USING_RTC
set_date((uint32_t)cur_time->date_time.year, (uint32_t)cur_time->date_time.month, (uint32_t)cur_time->date_time.day);
set_time((uint32_t)cur_time->date_time.hour, (uint32_t)cur_time->date_time.min, (uint32_t)cur_time->date_time.sec);
#endif
注意事项
需要启用RTC设备支持才能完整使用时间服务功能
时间服务需要通过
BSP_BLE_TIMES
宏启用
@手机端建议: 1. iPhone手机推荐用第三方软件LightBlue,Android端用nRF Connect进行BLE测试。
更新记录
版本 |
日期 |
发布说明 |
---|---|---|
0.0.1 |
2025/02 |
初始版本 |