nrf52832 低功耗蓝牙5.x
文章目录
广播
广播是低功耗蓝牙通信的基础,向外广播信息,等待被连接;
广播包含了设备的信息,如(广播名称,服务UUID 等)
主机搜索到广播后发起连接请求。
广播的特点:
广播结构
广播信道
广播间隔
广播事件分类
一、修改代码演示
广播初始化
c
/**@brief Function for initializing the Advertising functionality.
*/
static void advertising_init(void)
{
uint32_t err_code;
ble_advertising_init_t init;
memset(&init, 0, sizeof(init));
//显示完整的广播名称
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
//显示图标: false 不显示 ; true 显示
init.advdata.include_appearance = false;
//低功耗蓝牙模式,不支持有限可发现模式和BR/EDR
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;
//服务UUID数
init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.srdata.uuids_complete.p_uuids = m_adv_uuids;
init.config.ble_adv_fast_enabled = true;
//广播间隔
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
//广播超时时间
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
//广播事件的回调函数
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
修改 广播名称
修改宏定义修改名称
c
#define DEVICE_NAME "ble name" /**< Name of device. Will be included in the advertising data. */
修改广播时间
当广播超时后进入慢广播模式
c
/**@brief Function for initializing the Advertising functionality.
*/
static void advertising_init(void)
{
uint32_t err_code;
ble_advertising_init_t init;
memset(&init, 0, sizeof(init));
//显示完整的广播名称
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
//显示图标: false 不显示 ; true 显示
init.advdata.include_appearance = false;
//一般可发现模式
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE ;
//服务UUID数
init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.srdata.uuids_complete.p_uuids = m_adv_uuids;
init.config.ble_adv_fast_enabled = true;
//广播间隔
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
//广播超时时间
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;//设置为0可一直保持广播模式
init.config.ble_adv_slow_enabled =true; //增加慢广播
init.config.ble_adv_slow_interval = 1600;// 广播间隔1s
init.config.ble_adv_slow_timeout =0; //无超时时间
//广播事件的回调函数
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
修改广播内容和参数
c
/**@brief Function for initializing the Advertising functionality.
*/
static void advertising_init(void)
{
uint32_t err_code;
ble_advertising_init_t init;
ble_advdata_manuf_data_t my_advdata_manuf_data_t;
static uint8_t my_advdata_data[27]={0x00,0x11,0x22,0x33,0x44};
memset(&init, 0, sizeof(init));
//显示完整的广播名称
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
//显示图标: false 不显示 ; true 显示
init.advdata.include_appearance = false;
//一般可发现模式
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE ;
//服务UUID数
init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.srdata.uuids_complete.p_uuids = m_adv_uuids;
//添加厂商数据
my_advdata_manuf_data_t.company_identifier =0x5257;
my_advdata_manuf_data_t.data.p_data=my_advdata_data;
my_advdata_manuf_data_t.data.size=5;
init.advdata.p_manuf_specific_data = & my_advdata_manuf_data_t;
init.config.ble_adv_fast_enabled = true;
//广播间隔
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
//广播超时时间
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
init.config.ble_adv_slow_enabled =true; //增加慢广播
init.config.ble_adv_slow_interval = 1600;// 广播间隔1s
init.config.ble_adv_slow_timeout =0; //无超时时间
//广播事件的回调函数
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
手动停止广播和开启广播
c
err_code = sd_ble_gap_adv_stop(m_advertising.adv_handle);
APP_ERROR_CHECK(err_code);
c
err_code =ble_advertising_start(&m_advertising,BLE_ADV_MODE_FAST);
APP_ERROR_CHECK(err_code);
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了广播的实现使用,而Nordic提供了大量能使我们快速便捷地处理数据的函数和方法。