N32WB031广播数据更新
硬件我们采用官方的开发板,可以从如下地址进行购买,价格比较实惠https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-24884886751.32.60de6a4eHrSBGy&id=718540374563
实现软件基于官方SDK工程中的rdtss工程,实现流程如下:
SDK默认的广播数据 0x03,0x16,0x0A,0x18.用手机APP对广播数据进行查看:
0x02,0x01,0x06---------------蓝牙BLE标识0x03,0x16,0x0A,0x18-------------------广播数据对于0x02,0x01,0x06可以用设置广播ibeacon方式进行去除:
ibeacon模式修改
手机测试
定义需要更新广播数据的新内容
新广播数据内容为0x0A,0xff,0xff,0xff,0x55,0x11,0x22,0x33,0x44,0x66,0x55
配置消息定时器:创建定时器消息标识符 定时器标识符对应的处理函数
在广播开启函数中开启消息定时器,消息定时器的使用受睡眠影响,故需要禁止睡眠进入
main函数处理
广播更新定时器处理: 更新广播数据的函数
测试验证.串口打印信息
上电之后10s进行广播数据的更新,
SDK测试代码
谢谢分享,学习了 谢谢分享,有个疑问:SDK中beacon中例子,每5秒钟改变广播消息,感觉没有走这样的流程。我把代码贴出来了:
/* Private functions ---------------------------------------------------------*/
void app_ble_connected(void);
void app_ble_disconnected(void);
void app_printf_ibeacon(uint8_t* uuid, uint16_t major, uint16_t minor, int8_t rssi)
{
NS_LOG_INFO("\r\nUUID(hex):");
for(uint8_t i=0;i<16;i++)
{
NS_LOG_INFO(" %02X",uuid);
}
NS_LOG_INFO("\r\nMajor: %d",major );
NS_LOG_INFO("\r\nMinor: %d",minor );
NS_LOG_INFO("\r\nRSSI at 1m: %d dBm\r\n",rssi );
}
void app_update_ibeacon(uint8_t* uuid, uint16_t major, uint16_t minor, int8_t rssi)
{
uint8_t ibc_data =
{0x1a,0xff,
0x4c,0x00,0x02,
0x15,
0x10,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,
0x12,0x34,
0x56,0x78,
0xCE};
memcpy(&ibc_data,uuid,16);
memcpy(&ibc_data, &major, 2);
memcpy(&ibc_data, &minor, 2);
ibc_data = rssi;
ns_ble_adv_data_set(ibc_data,27);
}
/**
* @briefuser message handler
* @param
* @return
* @NOTE
*/
void app_user_msg_handler(ke_msg_id_t const msgid, void const *p_param)
{
switch (msgid)
{
case APP_CUSTS_TEST_EVT:
{
major = rand(); //random
minor = rand(); //random
app_update_ibeacon(uuid,major,minor,rssi);
app_printf_ibeacon(uuid,major,minor,rssi);
//repeat timer
ke_timer_set(APP_CUSTS_TEST_EVT,TASK_APP,5000);
}
break;
default:
break;
}
}
/**
* @briefble message handler
* @param
* @return
* @note
*/
void app_ble_msg_handler(struct ble_msg_t const *p_ble_msg)
{
switch (p_ble_msg->msg_id)
{
case APP_BLE_OS_READY:
NS_LOG_INFO("APP_BLE_OS_READY\r\n");
ke_timer_set(APP_CUSTS_TEST_EVT,TASK_APP,5000);
break;
case APP_BLE_GAP_CONNECTED:
app_ble_connected();
break;
case APP_BLE_GAP_DISCONNECTED:
app_ble_disconnected();
break;
default:
break;
}
}
直接在协议栈初始化完成后创建一个定时器来修改广播参数。 马克 请问有低功耗运行的例子吗 HORSE7812 发表于 2023-10-13 17:55
谢谢分享,有个疑问:SDK中beacon中例子,每5秒钟改变广播消息,感觉没有走这样的流程。我把代码贴出来了: ...
您好 我想问一下 这个五秒改变广播信息的例子是在哪个文件里面的我在官方给的N32WB031的例子里面找了半天 没看到这个例子麻烦您回复一下谢谢您了
页:
[1]
2