ESP-32 笔记(2) 蓝牙篇 广播包自定义设置和默认设置

esp32 蓝牙广播包能够发送的最大字节为37个,但是其中Mac占用了6个字节,最后供用户使用的只有31字节。这个31字节需按照蓝牙广播包中的ad格式:len + type 。

其中esp32有两种方式设置广播包:一种是通过esp_ble_adv_data_t结构体,使用接口api,设置广播数据;另一种是通过uint8_t的数据流写进入广播包,但是两者都不能超过31字节。

如果用户自定义广播包需要超过31字节,就需要进行广播分包设置。
esp32广播包分包设置支持:通过先发送第一个广播消息包(例如:原始数据raw_adv_data),然后通过被扫描再次发送扫描响应数据(例如:saoraw_scan_rsp_data),实现发送2个广播包。

*广播数据用于向周围的设备发送广播消息,而扫描响应数据是在其他设备请求扫描响应时发送的数据。
BLE设备可以使用扫描响应数据来提供更多信息,例如设备名称、服务UUID等。当其他设备执行扫描操作时,它们会收到广播数据和扫描响应数据,从而获取设备的相关信息。*

通过设置扫描响应数据,其他设备在扫描的过程中可以获得更多关于你的设备的信息。

请注意,扫描响应数据是可选的,你可以根据需要决定是否需要设置扫描响应数据。

下面是esp32中gatts 回调中的相关广播包数据设置代码

包含了:自定义广播包方式和使用结构体配置方式

static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param)
{
    switch (event) {
        case ESP_GATTS_REG_EVT:{
            esp_err_t set_dev_name_ret = esp_ble_gap_set_device_name(SAMPLE_DEVICE_NAME);
            if (set_dev_name_ret){
                ESP_LOGE(GATTS_TABLE_TAG, "set device name failed, error code = %x", set_dev_name_ret);
            }
			
    #ifdef CONFIG_SET_RAW_ADV_DATA
            esp_err_t raw_adv_ret = esp_ble_gap_config_adv_data_raw(raw_adv_data, sizeof(raw_adv_data));
            if (raw_adv_ret){
                ESP_LOGE(GATTS_TABLE_TAG, "config raw adv data failed, error code = %x ", raw_adv_ret);
            }
            adv_config_done |= ADV_CONFIG_FLAG;
            esp_err_t raw_scan_ret = esp_ble_gap_config_scan_rsp_data_raw(raw_scan_rsp_data, sizeof(raw_scan_rsp_data));
            if (raw_scan_ret){
                ESP_LOGE(GATTS_TABLE_TAG, "config raw scan rsp data failed, error code = %x", raw_scan_ret);
            }
            adv_config_done |= SCAN_RSP_CONFIG_FLAG;
    #else
            //config adv data
            esp_err_t ret = esp_ble_gap_config_adv_data(&adv_data);
            if (ret){
                ESP_LOGE(GATTS_TABLE_TAG, "config adv data failed, error code = %x", ret);
            }
            adv_config_done |= ADV_CONFIG_FLAG;
            //config scan response data
            ret = esp_ble_gap_config_adv_data(&scan_rsp_data);
            if (ret){
                ESP_LOGE(GATTS_TABLE_TAG, "config scan response data failed, error code = %x", ret);
            }
            adv_config_done |= SCAN_RSP_CONFIG_FLAG;
    #endif
            esp_err_t create_attr_ret = esp_ble_gatts_create_attr_tab(gatt_db, gatts_if, HRS_IDX_NB, SVC_INST_ID);
            if (create_attr_ret){
                ESP_LOGE(GATTS_TABLE_TAG, "create attr table failed, error code = %x", create_attr_ret);
            }
        }
       	    break;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值