nrf52832 低功耗蓝牙 广播

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提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
ZHANG13HAO2 分钟前
基于九轴传感器 + K-means 聚类的振动异常检测实战教程
单片机
不会聊天真君64717 分钟前
pgsql笔记
数据库·笔记
Yu_Lijing18 分钟前
基于C++的《Head First设计模式》笔记——MVC模式
c++·笔记·设计模式
BUG_yechiyu20 分钟前
STM32CubeMX使用9 配置Time4 PWM(DMA)输出
stm32·单片机·嵌入式硬件
学嵌入式的小杨同学21 分钟前
STM32 进阶封神之路(三十五):TFT LCD 工程化实战 ——FSMC 高速驱动、多图层界面、中英文显示与图形引擎(完整可落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
网易独家音乐人Mike Zhou25 分钟前
【Python】TXT、BIN文件的十六进制相互转换小程序
python·单片机·mcu·小程序·嵌入式·ti毫米波雷达
如雨随行202028 分钟前
【Vim】学习笔记(10)tips-3
笔记·学习·vim
周周不一样40 分钟前
Android基础笔记1
android·笔记·gitee
星川皆无恙42 分钟前
Transformer学习笔记:从 Attention 核心理论到机器翻译代码项目学习实战
大数据·pytorch·笔记·深度学习·神经网络·自然语言处理·transformer
421!44 分钟前
C语言学习笔记——10(结构体)
c语言·开发语言·笔记·stm32·学习·算法