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

相关推荐
光子物联单片机8 小时前
STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战
stm32·单片机·嵌入式硬件·mcu
凉、介8 小时前
ARM 总线技术 —— AMBA 入门
arm开发·笔记·学习
DIY机器人工房8 小时前
【嵌入式面试题】STM32F103C8T6 完整元器件解析 + 面试问题答案
stm32·单片机·面试·嵌入式·面试题·diy机器人工房
日更嵌入式的打工仔8 小时前
嵌入式入门:APP+BSP+HAL 三层分级架构浅析
笔记·单片机·嵌入式硬件·学习
长桥夜波8 小时前
【第十八周】机器学习笔记07
人工智能·笔记·机器学习
摇滚侠8 小时前
Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
spring boot·redis·笔记
摇滚侠9 小时前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
大白的编程日记.9 小时前
【Linux学习笔记】线程同步与互斥之生产者消费者模型
linux·笔记·学习
新子y9 小时前
【小白笔记】strip的含义
笔记·python
摇滚侠9 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商 接口返回 YAML 格式的数据 笔记35
spring boot·笔记·后端