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 它是独立的
这是一个循环 有没有别的 永不停止的烧苗呢?
答案是可以的
当 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);
随后火车轰轰轰启动了
优化建议
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---参数
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;1---https://mp.weixin.qq.com/s/J1MZGaGqlTXR9aeaUFuBRg 丢弃重复的