当前文档版本为 v0.8.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

ANT&BLE: ANT BLE BPWR

重要

此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。

1 功能概述

ant_ble_bpwr演示了ANT+ Bicycle power profile和ble双模在PAN1081 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例程:<PAN1080-DK>\01_SDK\zephyr\samples_panchip\ant_plus\ant_ble_bpwr\bpwr_tx

​ RX例程:<PAN1080-DK>\01_SDK\zephyr\samples_panchip\ant_plus\ant_ble_bpwr\bpwr_rx

编译时Board选择pan108xxb1_evb,Config选择prj.conf(如需OTA功能则选择prj_ota.conf)

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

TX例程中:

  1. 例程开启一个MASTER通道,并且按照ANT+协议上报功率数据。

  2. 例程同时支持蓝牙功能,并且按照BLE协议上报功率数据。

  3. 例程自带的模拟器支持手动模式和自动模式改变发送数据

    手动和自动模式切换需要在sdk_config.h文件修改以下宏,1代表自动模式,0代表手动模式

    #define BPWR_SIMULATOR_AUTO_UPDATE          1
    
    • 自动模式

      自动模式下心率数据会自动变化并上报,此时观察码表或其他接收设备会看到功率项的显示在变化。

    • 手动模式

      手动模式需要按键控制数据的变化,EVB板的Key1实现功率值增加,Key2实现功率值数减少。

RX例程中:

  • 例程开启一个SLAVE通道,通道会首先进入扫描模式,扫描到设备后会自动进行配对

  • 配对后将按照设置的周期持续上报RX事件

​ 可以把TX例程和RX例程分别烧录到两块PAN1081的EVB板上,烧录成功后可以看到RX端开始接收TX端发来的数 据。

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 Bicycle power 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)
instant power: 1000
accumul power: 1000

instant power: 1000
accumul power: 2000
......

4.2 三种模式切换

本例程支持standard、wheel torque、Crank torque三种模式,切换模式需要在sdk_config.h文件修改以下宏

/* <0=> Power Only Sensor    */
/* <1=> Wheel Torque Sensor  */
/* <2=> Crank Torque Sensor  */
#define SENSOR_TYPE                      0

4.3 电量检测

如果需要打开电量检测并上报,则修改sdk_config.h中的如下宏为1即可

/* Battery power detection enable */
#define BPWR_BATTERY_POWER_ENABLE        1

5 开发者说明

  1. 启用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
    
  2. 启用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_DEVICE_NAME="bpwr peripheral"
    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
    
  3. 启用日志功能,将prj.conf文件中的下面4个宏定义注释,即可开启日志打印功能

    # Disable Serial Uart & Log.
    CONFIG_SERIAL=n
    CONFIG_UART_INTERRUPT_DRIVEN=n
    CONFIG_CONSOLE=n
    CONFIG_UART_CONSOLE=n
    
  4. 初始化ANT

    • 通道配置

      ANT通信是基于通道的,所以配置通道是必不可少的步骤。下列是通道配置的参数

      ant_channel_config_t channel_cfg = {
      	.channel_num = BPWR_CHANNEL_NUMBER,           // 通道号,默认为0
      	.channel_type = BPWR_CHANNEL_TYPE,            // 通道类型,Master or slave
      	.ext_assign = 0,                              // 暂不支持,填0即可
      	.rf_frequency = BPWR_RF_FREQ,                 // 通信频率,ANT+固定为2457
      	.transmission_type = BPWR_TRANSMISSION_TYPE,  // 传输类型,按照协议规定设置
      	.device_type = BPWR_DEVICE_TYPE,              // 设备类型,按照协议规定设置
      	.device_num = BPWR_DEVICE_NUMBER,             // 设备编号 16bit,自定义
      	.channel_period = BPWR_MSG_PERIOD,            // 通道周期,按照协议固定设置
      	.network_number = BPWR_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();
        
  5. 初始化profile

    • 下列接口实现功率传感器的初始化

    err_code = ant_bpwr_sensor_init(&bpwr_profile, &channel_cfg);
    
    • 下列接口实现打开功率传感器

    err_code = ant_bpwr_sensor_open(&bpwr_profile);
    
    • 下列接口实现功率显示器的初始化

    err_code = ant_bpwr_disp_init(&bpwr_profile, &channel_cfg);
    
    • 下列接口实现打开功率显示器

    err_code = ant_bpwr_disp_open(&bpwr_profile);
    
    • 下列接口实现注册bpwr的handler函数,handler函数需要处理ANT栈返回的一些消息,比如发送成功消息,发送失败消息,接收到数据的消息等等

    ant_evt_handle_register(&evt, channel_number);
    
  6. 下列接口实现获取channel id。当通道是SLAVE时,调用此接口可以获取当前配对的MASTER的Channel ID。

    ant_get_channel_id(CHANNEL_NUMBER, &channel_cfg);
    
  7. 初始化BLE

    ble_init();
    

​ :::{important} ​ 注:接口调用顺序必须严格按照sample中的调用顺序,否则可能会有错误! ​ :::

  1. 初始化simulator

    SDK为bpwr提供了一个simulator,以便于实例程序可以模拟实际数据进行测试。

    下列接口实现初始化bpwr simulator。参数BPWR_SIMULATOR_AUTO_UPDATE为1表示simulator自动改变发送数据,为0表示需要人工按键改变发送数据。

    ant_bpwr_simulator_init(&bpwr_profile, BPWR_SIMULATOR_AUTO_UPDATE);
    
  2. 更新数据

    下列接口实现更新发送数据。实际使用根据需要可以实现自己的更新函数

    ant_bpwr_update_simulator(&bpwr_profile, 0);
    
  3. 发送数据

    下列接口实现推送发送数据的事件。实际使用中根据是否需要更新发送数据的情况调用

    ant_bpwr_sensor_evt_handler(&ant_evt, &bpwr_profile);
    
  4. BLE发送数据接口

    ble_send(power);
    
  5. OTA

    此例程支持OTA,如需OTA需要选择prj_ota.conf进行编译

    版本号由下面的宏定义

    注意事项

    为保证OTA的顺利进行,在OTA的过程中,ANT+通信会被关闭。OTA成功后ANT+通信将重新启动。

    CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS="--version 1.0.16"
    
  6. 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资源使用情况

bpwr_tx做发送,资源情况如下:

Memory region         Used Size  Region Size  %age Used
FLASH:      102708 B       256 KB     39.18%
SRAM:       41704 B        50 KB     81.45%

bpwr_rx做接收,资源情况如下:

Memory region         Used Size  Region Size  %age Used
FLASH:      60700 B       256 KB     23.16%
SRAM:       38048 B        50 KB     74.31%