调试ESP32蓝牙

1--一个从机都没有 扫描时间到了 就停止了

        case ESP_GAP_SEARCH_INQ_CMPL_EVT:
            ESP_LOGI(HCI_TAG, "X ESP_GAP_SEARCH_INQ_CMPL_EVT 程序会截至到这里 表示扫描的时间到了 一个满足条件的从机都没有扫到");
            esp_ble_gap_start_scanning(10);//我再次开始扫描 这里是10S 使用串口工具看 就是实打实的10S 如果还是没有满足条件的从机 那就是10S后再次到这里过来 循环 这样维持 永不停止的扫描
            break;
        default:
            ESP_LOGI(HCI_TAG, "YYYYYYYYYYYY????????YYYYYYY%d",event);
            break;
        }
        break;

源码是30S 它是独立的

这是一个循环 有没有别的 永不停止的烧苗呢?

ESP32开发笔记 如何实现 demo gatt client永久扫描_q911997的博客-CSDN博客_esp32 gatt_client

答案是可以的 

当 duration 值为 0 时,将会永久扫描⽽而不不产⽣生超时。

好像也不是很好 有时候需要断开扫描的

------------------

2--MTU

    case ESP_GATTC_CONNECT_EVT:{
        ESP_LOGI(GATTC_TAG, "6 ESP_GATTC_CONNECT_EVT conn_id %d, if %d", p_data->connect.conn_id, gattc_if);
        gl_profile_tab[PROFILE_A_APP_ID].conn_id = p_data->connect.conn_id;
        memcpy(gl_profile_tab[PROFILE_A_APP_ID].remote_bda, p_data->connect.remote_bda, sizeof(esp_bd_addr_t));
        ESP_LOGI(HCI_TAG, "6 准备连接这个MAC的从机 REMOTE BDA:");
        esp_log_buffer_hex(GATTC_TAG, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, sizeof(esp_bd_addr_t));
        //esp_err_t mtu_ret = esp_ble_gattc_send_mtu_req (gattc_if, p_data->connect.conn_id);
        //if (mtu_ret){
        //    ESP_LOGE(GATTC_TAG, "config MTU error, error code = %x", mtu_ret);
        //}
        //ESP_LOGI(HCI_TAG, "6 <KK> 设置MTU");
       /*24日--测试扫描150次 成功100次 失败50次 所以暂时不设置这个试试  优化 1*/
       /*25日--测试如果开启MTU的测试 那么主机收到的消息是每个142 如果不放开的话 不执行的话 那就每包20个*/
        break;

如果没有上面的mtu设置 那么

每次收到从机是20

放开代码 设置MTU那就和树莓派一样 那么树莓派的设置MYU在乃????

 

33333333

排在前面的是
设置扫描参数 
    case ESP_GATTC_REG_EVT:
        esp_ble_gap_set_scan_params(&ble_scan_params);
随后火车轰轰轰启动了


优化建议
https://blog.csdn.net/qq_36347513/article/details/118103231?spm=1001.2014.3001.5506
static esp_ble_scan_params_t ble_scan_params = {
    .scan_type              = BLE_SCAN_TYPE_PASSIVE,
    .own_addr_type          = BLE_ADDR_TYPE_PUBLIC,
    .scan_filter_policy     = BLE_SCAN_FILTER_ALLOW_ALL,
    .scan_interval          = 0x30,
    .scan_window            = 0x20,
    .scan_duplicate         = BLE_SCAN_DUPLICATE_ENABLE
};

参数的意义

BLE_SCAN_TYPE_ACTIVE---主动扫描

BLE_SCAN_TYPE_PASSIVE--被动扫描

主动扫描就可以可以拿到扫描应答包
而被动扫描就没有
看图

实际测试 因为我们dialog的代码是名字放在扫描应答包
如果才有主动扫描 就可以正常扫到 连接
如果用被动扫描 就程序走不下去

扫描策略--目前没有使用

时间 看图


2---参数
https://blog.csdn.net/qq_40537092/article/details/119564866?spm=1001.2014.3001.5506
typedef struct {
    esp_ble_scan_type_t     scan_type;              /*!< 扫描类型 */
    esp_ble_addr_type_t     own_addr_type;          /*!< 主人地址类型 */
    esp_ble_scan_filter_t   scan_filter_policy;     /*!< 扫描过滤政策 */
    uint16_t                scan_interval;          /*!< 扫描间隔。这被定义为从控制器开始其最后一次 LE 扫描到开始后续 LE 扫描的时间间隔*/
    //范围:0x0004 到 0x4000 
    //默认值:0x0010 (10 ms) 
    //时间 = N * 0.625 毫秒
    //时间范围:2.5 毫秒到 10.24 秒
    uint16_t                scan_window;            /*!</* !< 扫描窗口。LE 扫描的持续时间。LE_Scan_Window 应小于或等于 LE_Scan_Interval */ 
    //范围:0x0004 到 0x4000 //默认值:0x0010(10 毫秒)
    //时间 = N * 0.625 毫秒
    //时间范围:2.5 毫秒到 10240 毫秒
    esp_ble_scan_duplicate_t  scan_duplicate;       /*!< Scan_Duplicates参数控制链路层是否应该被过滤复制的广告报告(BLE_SCAN_DUPLICATE_ENABLE)给主机,或者链路层是否应该生成收到的每个包的广告报告 */
} esp_ble_scan_params_t;

https://blog.csdn.net/qq_36347513/article/details/118103231?spm=1001.2014.3001.5506

1---https://mp.weixin.qq.com/s/J1MZGaGqlTXR9aeaUFuBRg 丢弃重复的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值