CI231X系列芯片-BLE蓝牙功能开发¶
一. CI231X系列芯片工作模式配置¶
通过**CIAS_BLE_ENABLE**和**CIAS_RF_24G_ENABLE**这两个宏控制芯片射频部分的工作模式。
- CIAS_BLE_ENABLE = 1: 设置芯片为BLE蓝牙工作模式,芯片工作在蓝牙ble模式,芯片作为蓝牙设备从端,手机作为主端,可以通过手机微信小程序或APP和芯片进行数据交互
- CIAS_RF_24G_ENABLE = 1:设置芯片为2.4G工作模式
注意:蓝牙ble模式和2.4G收发模式是互斥的,芯片只能开启一种工作模式;蓝牙为ble模式时,收发数据最大长度固定为20字节,2.4G模式最大长度为31字节。
二 . CI231X系列芯片配置为BLE模式,配合启英物联小程序进行产品开发¶
SDK开启CIAS_BLE_ENABLE宏使能BLE模式后,可开启对应的产品ID控制宏(仅适用于”启英物联”小程序和设备端的交互协议),实现和启英物联小程序进行不同产品类型进行数据交互,宏定义在user_config.h和ble_user_config.h,如下:
#define DEV_DRIVER_EN_ID DEV_HEATTABLE_MAIN_ID //取暖桌
三. RF收发数据接口函数(用户最关注的2个函数接口)¶
- 在SDK中,定义了设备和手机进行数据交互的回调函数结构体rf_cb_funcs;结构体定义如下:
typedef struct {
void (*rf_recv)(uint8_t* recv_data, uint8_t len);
void (*rf_send)(uint8_t* send_data, uint8_t len);
} rf_cb_funcs_t;
rf_cb_funcs_t rf_cb_funcs; //射频发送和接收的回调函数
- 设备接收手机端发送的数据,SDK中已经定义好了接收函数,需要根据需求在main.c中的task_init函数中进行注册即可,注册方式如下:
register_rf_callback(custom_rf_recv_data_handle); //使用自定义协议进行接收数据处理
register_rf_callback(ci_rf_recv_data_handle); //使用"启英物联"小程序和设备端进行交互的协议,带加密功能
/**
* @brief 处理蓝牙/2.4G接收到的消息-适用于用户自定义协议
* @param send_data 芯片接收到的数据;
* @param len 接收数据长度;
*/
void custom_rf_recv_data_handle(uint8_t* recv_data, uint8_t len);
/**
* @brief 处理蓝牙/2.4G接收到的消息-适用于启英物联小程序交互协议
* @param send_data 芯片接收到的数据;
* @param len 接收数据长度;
*/
void ci_rf_recv_data_handle(uint8_t* recv_data, uint8_t len);
- 设备发送数据到手机端,用户只需要调用发送回调函数(注意:register_rf_callback函数中默认已注册)。
rf_cb_funcs.rf_send = deal_rf_send_data;
四. 设备参数注册接口函数¶
初始化设备信息接口函数 在SDK代码rf_msg_deal.h文件中,定义了函数供用户调用,用于初始化蓝牙ble模式下的广播数据和服务UUID。
通过宏CIAS_BLE_USE_DEFAULT_ADV_DATA控制广播数据的格式。
- CIAS_BLE_USE_DEFAULT_ADV_DATA置为1:广播数据段包含自定义的设备类型和名字。
- CIAS_BLE_USE_DEFAULT_ADV_DATA置为0:广播数据有效载荷完全由用户通过ble_adv_data_init函数自定义。
函数定义如下:
/**
* @brief 初始化BLE设备服务UUID
* @param service_uuid 主服务uuid
* @param write_uuid 写服务uuid,用于手机向设备传输数据
* @param service_uuid 通知服务uuid,用于设备向手机传输数据
*/
void ble_uuid_init(uint16_t service_uuid, uint16_t write_uuid, uint16_t notify_uuid);
/**
* @brief 设备类型初始化-匹配启英泰伦小程序
* @param main_type_id 设备主类型ID
* @param sub_type_id 设备次类型ID,缺省值为0,
* @param config_type 配置配网模式,缺省值为0,
*/
void user_dev_init(uint8_t main_type_id, uint8_t sub_type_id, uint8_t config_type);
bool ble_name_init(uint8_t* name); //设备初始化广播名字,最长不能超过18字节
void ble_mac_init(uint8_t mac[6]) //用户一般不用关注该函数,mac地址芯片出厂已经烧录
bool ble_adv_data_init(char *adv_data)//设备初始化广播数据有效载荷,超过30字节会返回失败
注意:以上初始化函数必须在蓝牙协议栈任务ble_exec_loop启动之前调用,否则BLE初始化会失败。
五. 定时器(重要)¶
由于蓝牙ble模式需要一个高精度的tick,所以SDK会将硬件timer3作为蓝牙协议栈的tick功能,用户不能使用硬件timer3。