ANT&BLE: ANT BLE HRM¶
重要
此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。
1 功能概述¶
ant_ble_hrm
演示了ANT+ hreat rate profile和ble hreat rate双模在PAN1080 SoC上的使用方法,主要包括:
ANT+和BLE心率传感器例程
ANT+心率显示器例程
此例程中TX例程是ANT+和BLE双模应用,支持ANT+和BLE同时工作。
2 环境准备¶
PAN1081 EVB一块
Type-C USB线一条(用于供电和查看串口打印Log)
硬件接线:
使用USB线,将PC USB与EVB Type-C USB(USB->UART)相连
使用杜邦线或者跳线帽将EVB上的:
TX0 与 P00相连
RX0 与 P01相连
PC软件: 串口调试助手(UartAssist)或终端工具(SecureCRT),波特率921600
码表或者其他ANT接收设备,手机(nrf connect)
3 编译和烧录¶
例程位置:
TX例程:zephyr\samples_panchip\ant_plus\ant_ble_hrm\hrm_tx
RX例程:zephyr\samples_panchip\ant_plus\ant_ble_hrm\hrm_rx
编译时Board选择pan108xxb1_evb,Config选择prj.conf(如需OTA功能则选择prj_ota.conf)
使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍。
4 演示说明¶
TX例程中:
例程开启一个MASTER通道,并且按照ANT+协议上报心率数据。
例程同时支持蓝牙,并且按照BLE协议上报心率数据。
例程自带的模拟器支持手动模式和自动模式改变发送数据
手动和自动模式切换需要在
sdk_config.h
文件修改以下宏,1代表自动模式,0代表手动模式#define HRM_SIMULATOR_AUTO_UPDATE 1
自动模式
自动模式下心率数据会自动变化并上报,此时观察码表或其他接收设备会看到心率项的显示在变化。
手动模式
手动模式需要按键控制数据的变化,EVB板的Key1实现心率数增加,Key2实现心率数减少。
RX例程中:
例程开启一个SLAVE通道,通道会首先进入扫描模式,扫描到设备后会自动进行配对
配对后将按照设置的周期持续上报RX事件
4.1 例程日志:¶
低功耗例程默认没有打开日志,打开日志后,会持续输出如下内容,打开日志的方法见第5章节
*** Booting Zephyr OS build zephyr-v2.7.0-528-ga1bfaee13973 ***
*** libble-v1.1.0-950c3eb ***
*** libant-v1.0.0-5745a878 ***
ANT+ and BLE Heart Rate TX sample started.
Bluetooth initialized
Advertising successfully started
[00:00:00.002,000] <wrn> bt_hci_core: Failed to set device name (-12)
[00:00:00.106,000] <inf> bt_hci_core: Identity: EF:1D:A6:F8:32:0F (random)
[00:00:00.106,000] <inf> bt_hci_core: HCI: version 5.1 (0x0a) revision 0x0003, manufacturer 0x07d1
[00:00:00.106,000] <inf> bt_hci_core: LMP: version 5.1 (0x0a) subver 0x0000
[00:00:00.110,000] <inf> bt_adv: Start Advertising as EF:1D:A6:F8:32:0F (random)
Hreat rate: 50
beat time: 1024
Hreat rate: 50
beat time: 1024
......
4.2 电量检测¶
如果需要打开并电量检测并上报,则修改sdk_config.h
中的如下宏为1即可
/* Battery power detection enable */
#define HRM_BATTERY_POWER_ENABLE 1
5 开发者说明¶
启用ANT模块,需要在
prj.conf
文件中添加”CONFIG_USE_PANPLAT_ANT=y”和”CONFIG_USE_BLE_PRF_DUAL_MODE=y”CONFIG_USE_PANPLAT_ANT=y CONFIG_USE_BLE_PRF_DUAL_MODE=y
启用BLE模块以及心率服务,需要在
prj.conf
文件中添加以下宏定义CONFIG_BT=y CONFIG_BT_SMP=n CONFIG_BT_PERIPHERAL=y CONFIG_BT_DIS=y CONFIG_BT_DIS_PNP=n CONFIG_BT_BAS=y CONFIG_BT_HRS=y #BLE hreat rate service CONFIG_BT_DEVICE_NAME="Panchip_HRM" #BLE broadcast name CONFIG_BT_DEVICE_APPEARANCE=833 CONFIG_USE_BLE_PRF_DUAL_MODE=y CONFIG_BT_AUTO_PHY_UPDATE=n CONFIG_BT_USER_DEFINED_PUBLIC_MAC=y CONFIG_BT_DEBUG_LOG=y
启用日志功能,将
prj.conf
文件中的下面4个宏定义注释,即可开启日志打印功能# Disable Serial Uart & Log. CONFIG_SERIAL=n CONFIG_UART_INTERRUPT_DRIVEN=n CONFIG_CONSOLE=n CONFIG_UART_CONSOLE=n
初始化ANT
通道配置
ANT通信是基于通道的,所以配置通道是必不可少的步骤。下列是通道配置的参数
ant_channel_config_t channel_cfg = { .channel_num = HRM_CHANNEL_NUMBER, // 通道号,默认为0 .channel_type = HRM_CHANNEL_TYPE, // 通道类型,Master or slave .ext_assign = 0, // 暂不支持,填0即可 .rf_frequency = HRM_RF_FREQ, // 通信频率,ANT+固定为2457 .transmission_type = HRM_TRANSMISSION_TYPE, // 传输类型,按照协议规定设置 .device_type = HRM_DEVICE_TYPE, // 设备类型,按照协议规定设置 .device_num = HRM_DEVICE_NUMBER, // 设备编号 16bit,自定义 .channel_period = HRM_MSG_PERIOD, // 通道周期,按照协议固定设置 .network_number = HRM_NETWORK_NUMBER // 网络号,必须设置为0,不支持其他网络号 .scan_timeout = 60000, // 扫描超时时间ms,仅SLAVE有效 .connect_timeout = 2000, // 连接超时时间ms,仅SLAVE有效 .priority = 0, // 通道优先级,数字越小优先级越高,范围0-5 };
设置网络
下列接口实现设置ANT+网络
ant_plus_key_set(channel_cfg.channel_num);
启动ANT
下列接口实现启动ANT协议
ant_stack_init(channel_cfg.channel_type);
初始化profile
下列接口实现心率传感器的初始化
err_code = ant_hrm_sensor_init(&hrm_profile, &channel_cfg);
下列接口实现打开心率传感器
err_code = ant_hrm_sensor_open(&hrm_profile);
下列接口实现心率显示器的初始化
err_code = ant_hrm_disp_init(&hrm_profile, &channel_cfg);
下列接口实现打开心率显示器
err_code = ant_hrm_disp_open(&hrm_profile);
下列接口实现注册HRM的handler函数,handler函数需要处理ANT栈返回的一些消息,比如发送成功消息,发送失败消息,接收到数据的消息等等。
ant_evt_handle_register(&evt, channel_number);
下列接口实现获取channel id。当通道是SLAVE时,调用此接口可以获取当前配对的MASTER的Channel ID。
ant_get_channel_id(CHANNEL_NUMBER, &channel_cfg);
初始化BLE
ble_init();
重要
注:接口调用顺序必须严格按照sample中的调用顺序,否则可能会有错误!
初始化simulator
SDK为HRM提供了一个simulator,以便于实例程序可以模拟实际数据进行测试。
下列接口实现初始化hrm simulator。参数HRM_SIMULATOR_AUTO_UPDATE为1表示simulator自动改变发送数据,为0表示需要人工按键改变发送数据。
ant_hrm_simulator_init(&hrm_profile, HRM_SIMULATOR_AUTO_UPDATE);
更新数据
下列接口实现更新发送数据。实际使用根据需要可以实现自己的更新函数
ant_hrm_update_simulator(&hrm_profile, 0);
发送数据
下列接口实现推送发送数据的事件。实际使用中根据是否需要更新发送数据的情况调用
ant_hrm_sensor_evt_handler(&ant_evt, &hrm_profile);
BLE发送数据接口
ble_send(hreat_rate);
OTA
此例程支持OTA,如需OTA需要选择
prj_ota.conf
进行编译版本号由下面的宏定义
注意事项
为保证OTA的顺利进行,在OTA的过程中,ANT+通信会被关闭。OTA成功后ANT+通信将重新启动。
CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS="--version 1.0.16"
ANT+和BLE的参数获取
我们在实际应用中,如果需要自行设置每个芯片的BLE广播名称和MAC地址以及ANT+的设备编号等等参数,目前我们支持使用PanLink烧录这些参数,sample中演示了读取这些参数的方法,如未烧录参数则使用系统默认的参数。
目前支持烧录的参数如下所示:
/* BLE广播名称 BLE MAC地址 ANT+设备编号 ANT+序列号 ANT+拓展设备编号 ANT+制造商编号 ANT+软件版本号 ANT+硬件版本号 ANT+设备型号 */ /* 此接口实现了获取参数 */ uint8_t load_info_config(uint8_t *data);
小技巧
更多BLE开发指南请参考BLE相关文档。
6 RAM/Flash资源使用情况¶
hrm_tx做发送,资源情况如下:
Memory region Used Size Region Size %age Used
FLASH: 100324 B 256 KB 38.27%
SRAM: 41240 B 50 KB 80.55%
hrm_rx做接收,资源情况如下:
Memory region Used Size Region Size %age Used
FLASH: 63836 B 256 KB 24.35%
SRAM: 38408 B 50 KB 75.02%