这里写目录标题
- 1.DA14531简介
- 2.蓝牙传感器开发
- 3.主要用户应用代码
- 3.1.传感器数据结构体
- 3.2.配置广播间隔
- 3.3.主要用户代码说明
- 3.3.1.主要函数接口
- 3.3.2.打印MAC地址
- 3.3.3.低功耗模式
- 3.3.4.广播数据底层配置
- 3.3.5.刷新传感器数据
1.DA14531简介
DA14531是基于全球尺寸最小、功耗最低的蓝牙5.1系统级芯片(SOC),最小尺寸1.7X2.05x0.5mm,功耗23.75uA/MHz且TX发射电流3.5 mA,所属行业最低,它应用范围广泛,特别是在功耗和封装都要求比较高的场合。
2.蓝牙传感器开发
工程路径:\Source\DA14531\projects\target_apps\ble_examples\ble_app_peripheral
固件输出路径:Source\DA14531\projects\target_apps\ble_examples\ble_app_peripheral\Keil_5\out_DA14531\Output\ DA14531_Sensor.bin
传感器特性:
名称 | 范围 默认参数 |
---|---|
系统 | ①低功耗系统 ②非低功耗系统 |
功耗 | 不广播状态 1uA |
广播状态200ms | 0.14mA |
广播间隔时间: | 间隔广播(20ms-2000ms) |
广播数据: | 设备名称 “Sensor” |
制造商数据: | FF |
前两字节公司ID | FFC1 |
A数据(uint16_t) | 1001 |
B数据(uint16_t) | 2001 |
C数据(uint16_t) | 3001 |
D数据(uint16_t) | 4001 |
E数据(uint16_t) | 5001 |
F数据(uint16_t) | 6001 |
G数据(uint16_t) | 7001 |
3.主要用户应用代码
3.1.传感器数据结构体
typedef struct
{
uint16_t SensorA;
uint16_t SensorB;
uint16_t SensorC;
uint16_t SensorD;
uint16_t SensorE;
uint16_t SensorF;
uint16_t SensorG;
}Sensor_Data_t;
3.2.配置广播间隔
1)#include “user_config.h” 中
/// Minimum interval for advertising
.intv_min = MS_TO_BLESLOTS(200), // 200ms
/// Maximum interval for advertising
.intv_max = MS_TO_BLESLOTS(200), // 200ms
2)配置设备名称:#define USER_DEVICE_NAME “Sensor”
配置公司ID #define USER_COMPANY_ID 0xFFC1
3.3.主要用户代码说明
3.3.1.主要函数接口
函数接口 说明
user_app_adv_undirect_complete() 广播完成回调函数
user_app_on_db_init_complete() BLE数据库初始化完成回调函数
user_app_adv_start() 开启广播函数
user_app_adv_stop() 关闭广播函数
app_easy_gap_undirected_advertise_start_create_msg 广播数据接口
user_RsfreshSensorData() 传感器数据刷新
user_app_before_sleep() 睡眠前回调函数
user_app_resume_from_sleep() 唤醒时回调函数
3.3.2.打印MAC地址
#if defined (DA14531)
extern struct bd_addr dev_bdaddr;
uint8_t bd_address[6] = CFG_NVDS_TAG_BD_ADDRESS;
arch_printf("OTP addr: %02x %02x %02x %02x %02x %02x\r\n",dev_bdaddr.addr[0],dev_bdaddr.addr[1],dev_bdaddr.addr[2],dev_bdaddr.addr[3],dev_bdaddr.addr[4],dev_bdaddr.addr[5]);arch_printf("nvds addr: %02x %02x %02x %02x %02x %02x\r\n",bd_address[0],bd_address[1],bd_address[2],bd_address[3],bd_address[4],bd_address[5]);
#endif
arch_printf(“main_loop\r\n”);
3.3.3.低功耗模式
设置为低功耗模式:
arch_set_sleep_mode(ARCH_EXT_SLEEP_ON);
设置为正常模式:
arch_set_sleep_mode(ARCH_SLEEP_OFF);
3.3.4.广播数据底层配置
uint8_t dev_name_len = 0;uint8_t dev_manu_len = 0;uint8_t adv_data_len = 0;uint8_t scan_rsp_data_len = 0;uint8_t adv_data[31];uint8_t scan_rsp_data[31];// Device Namedev_name_len = strlen(USER_DEVICE_NAME);dev_manu_len = sizeof(device_info.manu);arch_printf("adv_name:%s\r\n",USER_DEVICE_NAME);adv_data_len = 0;if(dev_name_len){adv_data[adv_data_len + 0] = dev_name_len + 1;adv_data[adv_data_len + 1] = GAP_AD_TYPE_COMPLETE_NAME;memcpy(&adv_data[adv_data_len +2],USER_DEVICE_NAME,dev_name_len);adv_data_len += dev_name_len + 2;}if(dev_manu_len){adv_data[adv_data_len + 0] = dev_manu_len + 1;adv_data[adv_data_len + 1] = GAP_AD_TYPE_MANU_SPECIFIC_DATA;memcpy(&adv_data[adv_data_len +2],device_info.manu,dev_manu_len);adv_data_len += dev_manu_len + 2;}adv_cmd->info.host.adv_data_len = adv_data_len;memcpy(&(cmd->info.host.adv_data[0]), adv_data, adv_data_len);arch_printf("adv_data_len:%d\r\n",adv_data_len);show_reg(adv_data,adv_data_len,1);adv_cmd->info.host.scan_rsp_data_len = scan_rsp_data_len;memcpy(&(cmd->info.host.scan_rsp_data[0]), scan_rsp_data, scan_rsp_data_len);//arch_printf("scan_rsp_data_len:%d\r\n",scan_rsp_data_len);//show_reg(scan_rsp_data,scan_rsp_data_len,1);
3.3.5.刷新传感器数据
static void user_RsfreshSensorData(void)
{
///arch_printf(“Rsf\r\n”);
// 获取传感器信息
Sensor.SensorA++;
Sensor.SensorB++;
Sensor.SensorC++;
Sensor.SensorD++;
Sensor.SensorE++;
Sensor.SensorF++;
Sensor.SensorG++;// 更新数据
User_data.CycleTime++;
if(User_data.CycleTime>=5)
{User_data.CycleTime = 0;if(memcmp(&Sensor,&bacSensor,sizeof(Sensor))){device_info.manu[0] =(uint8_t)USER_COMPANY_ID;device_info.manu[1] =(uint8_t)(USER_COMPANY_ID>>8);device_info.manu[2] =Sensor.SensorA;device_info.manu[3] =Sensor.SensorA;device_info.manu[4] =Sensor.SensorB;device_info.manu[5] =Sensor.SensorB;device_info.manu[6] =Sensor.SensorC;device_info.manu[7] =Sensor.SensorC;device_info.manu[8] =Sensor.SensorD;device_info.manu[9] =Sensor.SensorD;device_info.manu[10] =Sensor.SensorE;device_info.manu[11] =Sensor.SensorE;device_info.manu[12] =Sensor.SensorF;device_info.manu[13] =Sensor.SensorF;device_info.manu[14] =Sensor.SensorG;device_info.manu[15] =Sensor.SensorG;user_app_adv_stop(); // 停止广播后,会重新开启广播 请看}
}
}