controller中,Failed to Initialize. Reason: TimeOut虚拟用花初始化超时

本文详细介绍了如何通过调整Runtime设置和tools-options-timeout来延长HTTP请求的超时时间,从而解决初始化超时的问题。具体步骤包括调整HTTP-requestconnecttimeout、requestreceivetimeout和Stepdownloadtimeout等参数,以及在controller-tools-timeout中修改commandtimeout(seconds)。通过这些调整,可以有效避免因超时导致的应用崩溃或延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.调整 Run-timesetting->Internet Protocol->references->Advaanced->Options

将HTTP-request connect timeout,request receive timeout,和Step download timeout的时间都调成了最大1000s.

 

2.除了运行时设置里的首选项高级外,还有tools-options-timeout

可以在controller-tools-timeout,修改command timeout(seconds), 可以解决初始化超时问题。

 

/* * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ /**************************************************************************** * This is a demo for bluetooth config wifi connection to ap. You can config ESP32 to connect a softap * or config ESP32 as a softap to be connected by other device. APP can be downloaded from github * android source code: https://github.com/EspressifApp/EspBlufi * iOS source code: https://github.com/EspressifApp/EspBlufiForiOS ****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" #include "esp_system.h" #include "esp_mac.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_sntp.h" #include "time.h" #include "esp_log.h" #include "nvs_flash.h" #if CONFIG_BT_CONTROLLER_ENABLED || !CONFIG_BT_NIMBLE_ENABLED #include "esp_bt.h" #endif #include "esp_blufi_api.h" #include "blufi_example.h" #include "esp_blufi.h" #include "wifi-bt.h" #include "esp_wifi.h" #include "esp_bt_main.h" #include "esp_bt_device.h" #define EXAMPLE_WIFI_CONNECTION_MAXIMUM_RETRY CONFIG_EXAMPLE_WIFI_CONNECTION_MAXIMUM_RETRY #define EXAMPLE_INVALID_REASON 255 #define EXAMPLE_INVALID_RSSI -128 #if CONFIG_ESP_WIFI_AUTH_OPEN #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_OPEN #elif CONFIG_ESP_WIFI_AUTH_WEP #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WEP #elif CONFIG_ESP_WIFI_AUTH_WPA_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_PSK #elif CONFIG_ESP_WIFI_AUTH_WPA2_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK #elif CONFIG_ESP_WIFI_AUTH_WPA_WPA2_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_WPA2_PSK #elif CONFIG_ESP_WIFI_AUTH_WPA3_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA3_PSK #elif CONFIG_ESP_WIFI_AUTH_WPA2_WPA3_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_WPA3_PSK #elif CONFIG_ESP_WIFI_AUTH_WAPI_PSK #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WAPI_PSK #endif #define EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_param_t *param); #define WIFI_LIST_NUM 10 static wifi_config_t sta_config; static wifi_config_t ap_config; /* FreeRTOS event group to signal when we are connected & ready to make a request */ static EventGroupHandle_t wifi_event_group; /* The event group allows multiple bits for each event, but we only care about one event - are we connected to the AP with an IP? */ const int CONNECTED_BIT = BIT0; static uint8_t example_wifi_retry = 0; TaskHandle_t scan_task_handle = NULL; /* store the station info for send back to phone */ static bool gl_sta_connected = false; static bool gl_sta_got_ip = false; static bool ble_is_connected = false; static uint8_t gl_sta_bssid[6]; static uint8_t gl_sta_ssid[32]; static int gl_sta_ssid_len; static wifi_sta_list_t gl_sta_list; static bool gl_sta_is_connecting = false; static esp_blufi_extra_info_t gl_sta_conn_info; static void example_record_wifi_conn_info(int rssi, uint8_t reason) { memset(&gl_sta_conn_info, 0, sizeof(esp_blufi_extra_info_t)); if (gl_sta_is_connecting) { gl_sta_conn_info.sta_max_conn_retry_set = true; gl_sta_conn_info.sta_max_conn_retry = EXAMPLE_WIFI_CONNECTION_MAXIMUM_RETRY; } else { gl_sta_conn_info.sta_conn_rssi_set = true; gl_sta_conn_info.sta_conn_rssi = rssi; gl_sta_conn_info.sta_conn_end_reason_set = true; gl_sta_conn_info.sta_conn_end_reason = reason; } } static void example_wifi_connect(void) { example_wifi_retry = 0; gl_sta_is_connecting = (esp_wifi_connect() == ESP_OK); example_record_wifi_conn_info(EXAMPLE_INVALID_RSSI, EXAMPLE_INVALID_REASON); } static bool example_wifi_reconnect(void) { bool ret; if (gl_sta_is_connecting && example_wifi_retry++ < EXAMPLE_WIFI_CONNECTION_MAXIMUM_RETRY) { BLUFI_INFO("BLUFI WiFi starts reconnection\n"); gl_sta_is_connecting = (esp_wifi_connect() == ESP_OK); example_record_wifi_conn_info(EXAMPLE_INVALID_RSSI, EXAMPLE_INVALID_REASON); ret = true; } else { ret = false; } return ret; } static int softap_get_current_connection_number(void) { esp_err_t ret; ret = esp_wifi_ap_get_sta_list(&gl_sta_list); if (ret == ESP_OK) { return gl_sta_list.num; } return 0; } static void ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { wifi_mode_t mode; switch (event_id) { case IP_EVENT_STA_GOT_IP: { esp_blufi_extra_info_t info; xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); esp_wifi_get_mode(&mode); memset(&info, 0, sizeof(esp_blufi_extra_info_t)); memcpy(info.sta_bssid, gl_sta_bssid, 6); info.sta_bssid_set = true; info.sta_ssid = gl_sta_ssid; info.sta_ssid_len = gl_sta_ssid_len; gl_sta_got_ip = true; if (ble_is_connected == true) { esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_SUCCESS, softap_get_current_connection_number(), &info); } else { BLUFI_INFO("BLUFI BLE is not connected yet\n"); } break; } default: break; } return; } static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { wifi_event_sta_connected_t *event; wifi_event_sta_disconnected_t *disconnected_event; wifi_mode_t mode; switch (event_id) { case WIFI_EVENT_STA_START: example_wifi_connect(); break; case WIFI_EVENT_STA_CONNECTED: gl_sta_connected = true; gl_sta_is_connecting = false; net_status = true; event = (wifi_event_sta_connected_t*) event_data; memcpy(gl_sta_bssid, event->bssid, 6); memcpy(gl_sta_ssid, event->ssid, event->ssid_len); gl_sta_ssid_len = event->ssid_len; break; case WIFI_EVENT_STA_DISCONNECTED: /* Only handle reconnection during connecting */ if (gl_sta_connected == false && example_wifi_reconnect() == false) { gl_sta_is_connecting = false; disconnected_event = (wifi_event_sta_disconnected_t*) event_data; example_record_wifi_conn_info(disconnected_event->rssi, disconnected_event->reason); } /* This is a workaround as ESP32 WiFi libs don't currently auto-reassociate. */ gl_sta_connected = false; gl_sta_got_ip = false; memset(gl_sta_ssid, 0, 32); memset(gl_sta_bssid, 0, 6); gl_sta_ssid_len = 0; xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); break; case WIFI_EVENT_AP_START: esp_wifi_get_mode(&mode); /* TODO: get config or information of softap, then set to report extra_info */ if (ble_is_connected == true) { if (gl_sta_connected) { esp_blufi_extra_info_t info; memset(&info, 0, sizeof(esp_blufi_extra_info_t)); memcpy(info.sta_bssid, gl_sta_bssid, 6); info.sta_bssid_set = true; info.sta_ssid = gl_sta_ssid; info.sta_ssid_len = gl_sta_ssid_len; esp_blufi_send_wifi_conn_report(mode, gl_sta_got_ip ? ESP_BLUFI_STA_CONN_SUCCESS : ESP_BLUFI_STA_NO_IP, softap_get_current_connection_number(), &info); } else if (gl_sta_is_connecting) { esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONNECTING, softap_get_current_connection_number(), &gl_sta_conn_info); } else { esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, softap_get_current_connection_number(), &gl_sta_conn_info); } } else { BLUFI_INFO("BLUFI BLE is not connected yet\n"); } break; case WIFI_EVENT_SCAN_DONE: { uint16_t apCount = 0; esp_wifi_scan_get_ap_num(&apCount); if (apCount == 0) { BLUFI_INFO("Nothing AP found"); break; } wifi_ap_record_t *ap_list = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * apCount); if (!ap_list) { BLUFI_ERROR("malloc error, ap_list is NULL"); esp_wifi_clear_ap_list(); break; } ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&apCount, ap_list)); esp_blufi_ap_record_t * blufi_ap_list = (esp_blufi_ap_record_t *)malloc(apCount * sizeof(esp_blufi_ap_record_t)); if (!blufi_ap_list) { if (ap_list) { free(ap_list); } BLUFI_ERROR("malloc error, blufi_ap_list is NULL"); break; } for (int i = 0; i < apCount; ++i) { blufi_ap_list[i].rssi = ap_list[i].rssi; memcpy(blufi_ap_list[i].ssid, ap_list[i].ssid, sizeof(ap_list[i].ssid)); } if (ble_is_connected == true) { esp_blufi_send_wifi_list(apCount, blufi_ap_list); } else { BLUFI_INFO("BLUFI BLE is not connected yet\n"); } esp_wifi_scan_stop(); free(ap_list); free(blufi_ap_list); break; } case WIFI_EVENT_AP_STACONNECTED: { wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data; BLUFI_INFO("station "MACSTR" join, AID=%d", MAC2STR(event->mac), event->aid); break; } case WIFI_EVENT_AP_STADISCONNECTED: { wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data; BLUFI_INFO("station "MACSTR" leave, AID=%d, reason=%d", MAC2STR(event->mac), event->aid, event->reason); break; } default: break; } return; } static void initialise_wifi(void) { ESP_ERROR_CHECK(esp_netif_init()); wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); assert(sta_netif); esp_netif_t *ap_netif = esp_netif_create_default_wifi_ap(); assert(ap_netif); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL)); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); example_record_wifi_conn_info(EXAMPLE_INVALID_RSSI, EXAMPLE_INVALID_REASON); ESP_ERROR_CHECK( esp_wifi_start() ); } static esp_blufi_callbacks_t example_callbacks = { .event_cb = example_event_callback, .negotiate_data_handler = blufi_dh_negotiate_data_handler, .encrypt_func = blufi_aes_encrypt, .decrypt_func = blufi_aes_decrypt, .checksum_func = blufi_crc_checksum, }; // 获取当前STA模式的IP地址 static char* get_sta_ip_string(void) { static char ip_str[16] = {0}; esp_netif_ip_info_t ip_info; esp_netif_t* netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); if (netif && esp_netif_get_ip_info(netif, &ip_info) == ESP_OK) { snprintf(ip_str, sizeof(ip_str), IPSTR, IP2STR(&ip_info.ip)); return ip_str; } return "0.0.0.0"; } static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_param_t *param) { /* actually, should post to blufi_task handle the procedure, * now, as a example, we do it more simply */ switch (event) { case ESP_BLUFI_EVENT_INIT_FINISH: BLUFI_INFO("BLUFI init finish\n"); esp_blufi_adv_start(); break; case ESP_BLUFI_EVENT_DEINIT_FINISH: BLUFI_INFO("BLUFI deinit finish\n"); break; case ESP_BLUFI_EVENT_BLE_CONNECT: BLUFI_INFO("BLUFI ble connect\n"); ble_is_connected = true; esp_blufi_adv_stop(); blufi_security_init(); break; case ESP_BLUFI_EVENT_BLE_DISCONNECT: BLUFI_INFO("BLUFI ble disconnect\n"); ble_is_connected = false; blufi_security_deinit(); esp_blufi_adv_start(); break; case ESP_BLUFI_EVENT_SET_WIFI_OPMODE: BLUFI_INFO("BLUFI Set WIFI opmode %d\n", param->wifi_mode.op_mode); ESP_ERROR_CHECK( esp_wifi_set_mode(param->wifi_mode.op_mode) ); break; case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP: BLUFI_INFO("BLUFI request wifi connect to AP\n"); /* there is no wifi callback when the device has already connected to this wifi so disconnect wifi before connection. */ esp_wifi_disconnect(); example_wifi_connect(); break; case ESP_BLUFI_EVENT_REQ_DISCONNECT_FROM_AP: BLUFI_INFO("BLUFI request wifi disconnect from AP\n"); esp_wifi_disconnect(); break; case ESP_BLUFI_EVENT_REPORT_ERROR: BLUFI_ERROR("BLUFI report error, error code %d\n", param->report_error.state); esp_blufi_send_error_info(param->report_error.state); break; case ESP_BLUFI_EVENT_GET_WIFI_STATUS: { wifi_mode_t mode; esp_blufi_extra_info_t info; esp_wifi_get_mode(&mode); if (gl_sta_connected) { memset(&info, 0, sizeof(esp_blufi_extra_info_t)); memcpy(info.sta_bssid, gl_sta_bssid, 6); info.sta_bssid_set = true; info.sta_ssid = gl_sta_ssid; info.sta_ssid_len = gl_sta_ssid_len; esp_blufi_send_wifi_conn_report(mode, gl_sta_got_ip ? ESP_BLUFI_STA_CONN_SUCCESS : ESP_BLUFI_STA_NO_IP, softap_get_current_connection_number(), &info); // 新增IP地址上报 if (gl_sta_got_ip) { const char *ip = get_sta_ip_string(); // 格式: "IP:192.168.1.100" char ip_report[20]; snprintf(ip_report, sizeof(ip_report), "IP:%s", ip); esp_blufi_send_custom_data((uint8_t*)ip_report, strlen(ip_report)); BLUFI_INFO("Reported IP: %s\n", ip); } } else if (gl_sta_is_connecting) { esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONNECTING, softap_get_current_connection_number(), &gl_sta_conn_info); } else { net_status = false; esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, softap_get_current_connection_number(), &gl_sta_conn_info); } BLUFI_INFO("BLUFI get wifi status from AP\n"); break; } case ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE: BLUFI_INFO("blufi close a gatt connection"); esp_blufi_disconnect(); break; case ESP_BLUFI_EVENT_DEAUTHENTICATE_STA: /* TODO */ break; case ESP_BLUFI_EVENT_RECV_STA_BSSID: memcpy(sta_config.sta.bssid, param->sta_bssid.bssid, 6); sta_config.sta.bssid_set = 1; esp_wifi_set_config(WIFI_IF_STA, &sta_config); BLUFI_INFO("Recv STA BSSID %s\n", sta_config.sta.ssid); break; case ESP_BLUFI_EVENT_RECV_STA_SSID: if (param->sta_ssid.ssid_len >= sizeof(sta_config.sta.ssid)/sizeof(sta_config.sta.ssid[0])) { esp_blufi_send_error_info(ESP_BLUFI_DATA_FORMAT_ERROR); BLUFI_INFO("Invalid STA SSID\n"); break; } strncpy((char *)sta_config.sta.ssid, (char *)param->sta_ssid.ssid, param->sta_ssid.ssid_len); sta_config.sta.ssid[param->sta_ssid.ssid_len] = '\0'; esp_wifi_set_config(WIFI_IF_STA, &sta_config); BLUFI_INFO("Recv STA SSID %s\n", sta_config.sta.ssid); break; case ESP_BLUFI_EVENT_RECV_STA_PASSWD: if (param->sta_passwd.passwd_len >= sizeof(sta_config.sta.password)/sizeof(sta_config.sta.password[0])) { esp_blufi_send_error_info(ESP_BLUFI_DATA_FORMAT_ERROR); BLUFI_INFO("Invalid STA PASSWORD\n"); break; } strncpy((char *)sta_config.sta.password, (char *)param->sta_passwd.passwd, param->sta_passwd.passwd_len); sta_config.sta.password[param->sta_passwd.passwd_len] = '\0'; sta_config.sta.threshold.authmode = EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD; esp_wifi_set_config(WIFI_IF_STA, &sta_config); BLUFI_INFO("Recv STA PASSWORD %s\n", sta_config.sta.password); break; case ESP_BLUFI_EVENT_RECV_SOFTAP_SSID: if (param->softap_ssid.ssid_len >= sizeof(ap_config.ap.ssid)/sizeof(ap_config.ap.ssid[0])) { esp_blufi_send_error_info(ESP_BLUFI_DATA_FORMAT_ERROR); BLUFI_INFO("Invalid SOFTAP SSID\n"); break; } strncpy((char *)ap_config.ap.ssid, (char *)param->softap_ssid.ssid, param->softap_ssid.ssid_len); ap_config.ap.ssid[param->softap_ssid.ssid_len] = '\0'; ap_config.ap.ssid_len = param->softap_ssid.ssid_len; esp_wifi_set_config(WIFI_IF_AP, &ap_config); BLUFI_INFO("Recv SOFTAP SSID %s, ssid len %d\n", ap_config.ap.ssid, ap_config.ap.ssid_len); break; case ESP_BLUFI_EVENT_RECV_SOFTAP_PASSWD: if (param->softap_passwd.passwd_len >= sizeof(ap_config.ap.password)/sizeof(ap_config.ap.password[0])) { esp_blufi_send_error_info(ESP_BLUFI_DATA_FORMAT_ERROR); BLUFI_INFO("Invalid SOFTAP PASSWD\n"); break; } strncpy((char *)ap_config.ap.password, (char *)param->softap_passwd.passwd, param->softap_passwd.passwd_len); ap_config.ap.password[param->softap_passwd.passwd_len] = '\0'; esp_wifi_set_config(WIFI_IF_AP, &ap_config); BLUFI_INFO("Recv SOFTAP PASSWORD %s len = %d\n", ap_config.ap.password, param->softap_passwd.passwd_len); break; case ESP_BLUFI_EVENT_RECV_SOFTAP_MAX_CONN_NUM: if (param->softap_max_conn_num.max_conn_num > 4) { return; } ap_config.ap.max_connection = param->softap_max_conn_num.max_conn_num; esp_wifi_set_config(WIFI_IF_AP, &ap_config); BLUFI_INFO("Recv SOFTAP MAX CONN NUM %d\n", ap_config.ap.max_connection); break; case ESP_BLUFI_EVENT_RECV_SOFTAP_AUTH_MODE: if (param->softap_auth_mode.auth_mode >= WIFI_AUTH_MAX) { return; } ap_config.ap.authmode = param->softap_auth_mode.auth_mode; esp_wifi_set_config(WIFI_IF_AP, &ap_config); BLUFI_INFO("Recv SOFTAP AUTH MODE %d\n", ap_config.ap.authmode); break; case ESP_BLUFI_EVENT_RECV_SOFTAP_CHANNEL: if (param->softap_channel.channel > 13) { return; } ap_config.ap.channel = param->softap_channel.channel; esp_wifi_set_config(WIFI_IF_AP, &ap_config); BLUFI_INFO("Recv SOFTAP CHANNEL %d\n", ap_config.ap.channel); break; case ESP_BLUFI_EVENT_GET_WIFI_LIST:{ wifi_scan_config_t scanConf = { .ssid = NULL, .bssid = NULL, .channel = 0, .show_hidden = false }; esp_err_t ret = esp_wifi_scan_start(&scanConf, true); ESP_LOGI("esp-wifi", "start wifi scan"); if (ret != ESP_OK) { esp_blufi_send_error_info(ESP_BLUFI_WIFI_SCAN_FAIL); } break; } case ESP_BLUFI_EVENT_RECV_CUSTOM_DATA: BLUFI_INFO("Recv Custom Data %" PRIu32 "\n", param->custom_data.data_len); ESP_LOG_BUFFER_HEX("Custom Data", param->custom_data.data, param->custom_data.data_len); break; case ESP_BLUFI_EVENT_RECV_USERNAME: /* Not handle currently */ break; case ESP_BLUFI_EVENT_RECV_CA_CERT: /* Not handle currently */ break; case ESP_BLUFI_EVENT_RECV_CLIENT_CERT: /* Not handle currently */ break; case ESP_BLUFI_EVENT_RECV_SERVER_CERT: /* Not handle currently */ break; case ESP_BLUFI_EVENT_RECV_CLIENT_PRIV_KEY: /* Not handle currently */ break;; case ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY: /* Not handle currently */ break; default: break; } } void blufi_wifi_config_init(void) { esp_err_t ret; // Initialize NVS ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); // Initialize WiFi initialise_wifi(); // Initialize BLUFI controller and callback functions #if CONFIG_BT_CONTROLLER_ENABLED || !CONFIG_BT_NIMBLE_ENABLED ret = esp_blufi_controller_init(); if (ret) { BLUFI_ERROR("%s BLUFI controller init failed: %s\n", __func__, esp_err_to_name(ret)); return; } #endif ret = esp_blufi_host_and_cb_init(&example_callbacks); if (ret) { BLUFI_ERROR("%s initialise failed: %s\n", __func__, esp_err_to_name(ret)); return; } BLUFI_INFO("BLUFI VERSION %04x\n", esp_blufi_get_version()); } void get_wifi_ip_adress(void) { // 获取 IP 地址 esp_netif_t* esp_netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); esp_netif_ip_info_t ip_info; if (esp_netif_get_ip_info(esp_netif, &ip_info) == ESP_OK) { ESP_LOGI("wifi_info", "IP Address: " IPSTR, IP2STR(&ip_info.ip)); ESP_LOGI("wifi_info", "Netmask: " IPSTR, IP2STR(&ip_info.netmask)); ESP_LOGI("wifi_info", "Gateway: " IPSTR, IP2STR(&ip_info.gw)); } else { ESP_LOGE("wifi_info", "Failed to get IP info"); } } // 初始化 NTP 客户端并同步时间 bool initialize_sntp_and_sync_time(void) { ESP_LOGI("app_main", "Initializing SNTP"); esp_sntp_setoperatingmode(SNTP_OPMODE_POLL); esp_sntp_setservername(0, "pool.ntp.org"); esp_sntp_set_time_sync_notification_cb(NULL); esp_sntp_init(); // 设置时区为东八区(北京时间) setenv("TZ", "Asia/Shanghai", 1); tzset(); // 等待时间同步 int retry = 0; const int retry_count = 10; while (esp_sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET && ++retry < retry_count) { ESP_LOGI("NTP", "Waiting for time sync... %d", retry); vTaskDelay(pdMS_TO_TICKS(750)); } if (retry == retry_count) { ESP_LOGE("NTP", "Could not sync time with NTP server"); return false; } // 获取当前时间 struct tm timeinfo; time_t now = time(NULL); localtime_r(&now, &timeinfo); // 格式化日期和时间 char datetime_str[30]; strftime(datetime_str, sizeof(datetime_str), "%Y-%m-%d %H:%M:%S", &timeinfo); // 打印当前时间 ESP_LOGI("NTP", "Current time: %s", datetime_str); return true; } char FW_version[] = "Deskbooking(ESP32-C3)_SDK_v0.1_20250801"; void task_function(void *pvParameter) { uint8_t CPU_RunInfo[400]; while (1) { memset(CPU_RunInfo, 0, 400); vTaskGetRunTimeStats((char *)&CPU_RunInfo); printf("task_name run_cnt usage_rate \r\n"); printf("%s", CPU_RunInfo); printf("----------------------------------------------------\r\n"); vTaskDelay(500 / portTICK_PERIOD_MS); } } void print_wifi_and_bt_macAdress(){ uint8_t mac[6]; esp_wifi_get_mac(WIFI_IF_STA, mac); // 获取 STA 接口的 MAC 地址 ESP_LOGI("MAC", "Station MAC address: %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); ESP_LOGI("app_main", "FW version: %s",FW_version); const uint8_t *bd_addr = esp_bt_dev_get_address(); // 打印蓝牙地址 char addr_str[18]; sprintf(addr_str, "%02x:%02x:%02x:%02x:%02x:%02x", bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], bd_addr[4], bd_addr[5]); ESP_LOGI("app_main", "Bluetooth Address: %s", addr_str); } #define TAG "BLE_SCANNER" static bool ble_scanning = false; // 运行标志位 static esp_ble_scan_params_t ble_scan_params = { .scan_type = BLE_SCAN_TYPE_ACTIVE, .own_addr_type = BLE_ADDR_TYPE_PUBLIC, .scan_filter_policy = BLE_SCAN_FILTER_ALLOW_ALL, .scan_interval = 0x50, .scan_window = 0x30, .scan_duplicate = BLE_SCAN_DUPLICATE_DISABLE }; ble_random_device_t g_random_dev = {0}; /* 供 REST 接口读取 */ const ble_random_device_t *gap_get_random_device(void) { return &g_random_dev; } static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) { switch (event) { case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: if (ble_scanning) { esp_ble_gap_start_scanning(2); // 2 秒 } break; case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT: if (param->scan_start_cmpl.status == ESP_BT_STATUS_SUCCESS) { ESP_LOGI(TAG, "Scan started"); ble_scanning = true; } else { ESP_LOGE(TAG, "Scan start failed"); ble_scanning = false; } break; case ESP_GAP_BLE_SCAN_RESULT_EVT: { if (param->scan_rst.search_evt != ESP_GAP_SEARCH_INQ_RES_EVT) break; /* 打印设备信息 */ ESP_LOGI(TAG, "Device found: " ESP_BD_ADDR_STR, ESP_BD_ADDR_HEX(param->scan_rst.bda)); uint8_t *adv_name = NULL; uint8_t adv_name_len = 0; adv_name = esp_ble_resolve_adv_data_by_type( param->scan_rst.ble_adv, param->scan_rst.adv_data_len + param->scan_rst.scan_rsp_len, ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len); if (adv_name) { ESP_LOGI(TAG, " Name: %.*s", adv_name_len, adv_name); } else { ESP_LOGI(TAG, " Name: <unknown>"); } ESP_LOGI(TAG, " RSSI: %d", param->scan_rst.rssi); /* 25% 概率随机保存到全局变量 */ if ((esp_random() & 0x3) == 0) { memcpy(g_random_dev.bda, param->scan_rst.bda, 6); g_random_dev.rssi = param->scan_rst.rssi; if (adv_name && adv_name_len < sizeof(g_random_dev.name)) { memcpy(g_random_dev.name, adv_name, adv_name_len); g_random_dev.name[adv_name_len] = '\0'; } else { strcpy(g_random_dev.name, "<unknown>"); } } break; } case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT: ESP_LOGI(TAG, "Scan stopped"); if (scan_task_handle) { xTaskNotifyGive(scan_task_handle); } ble_scanning = false; vTaskDelay(pdMS_TO_TICKS(500)); esp_blufi_adv_start(); break; default: break; } } int ble_scan = 0; void ble_scan_task(void *param) { scan_task_handle = xTaskGetCurrentTaskHandle(); /* 1. 注册回调(只需一次,也可放在初始化里) */ static bool once = false; if (!once) { esp_ble_gap_register_callback(gap_event_handler); ESP_LOGE(TAG, "ble_scanner_init!"); once = true; } /* 2. 开始扫描 */ esp_ble_gap_set_scan_params(&ble_scan_params); esp_ble_gap_start_scanning(2); // 扫 5 秒 /* 3. 等扫描结束事件 */ ulTaskNotifyTake(pdTRUE, portMAX_DELAY); /* 4. 任务结束,自动销毁 */ ESP_LOGI(TAG, "One-shot BLE scan task exit"); scan_task_handle = NULL; // 任务退出前清理句柄 vTaskDelete(NULL); }为什么我的代码在蓝牙扫描task结束后log不会打印scan stop
最新发布
08-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值