65 lines
2.2 KiB
C

#include "esp_wifi.h"
#include "esp_http_client.h"
#include "esp_event.h"
#include "esp_log.h"
#include "wifi.h"
// WiFi事件处理函数
static void wifi_event_handler(void* arg, esp_event_base_t event_base,
int32_t event_id, void* event_data)
{
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
ESP_ERROR_CHECK(esp_wifi_scan_start(NULL, false));
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_SCAN_DONE) {
uint16_t ap_num = 0;
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_num));
if (ap_num == 0) {
ESP_LOGE(TAG, "没有扫描到任何AP");
return;
}
// ap_list = malloc(sizeof(wifi_ap_record_t) * ap_num);
// ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_num, ap_list));
// 打印扫描到的AP信息
// for (int i = 0; i < ap_num; i++) {
// ESP_LOGI(TAGG, "AP %d - SSID: %s, RSSI: %d", i + 1, ap_list[i].ssid, ap_list[i].rssi);
// }
}
}
esp_err_t wifi_scan_start(){
// esp_event_handler_instance_t inst;
// ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
// ESP_EVENT_ANY_ID,
// &wifi_event_handler,
// NULL,
// &inst));
esp_err_t err = esp_wifi_scan_start(NULL, false);
if(err == ESP_OK){
ESP_LOGI("WIFI","开始扫描附近WIFI");
}
return err;
}
esp_err_t wifi_scan_list(uint16_t* num,wifi_ap_record_t** list){
esp_wifi_scan_get_ap_num(num);
*list = malloc(sizeof(wifi_ap_record_t) * *num);
esp_err_t err = esp_wifi_scan_get_ap_records(num, *list);
return err;
}
void wifi_init(){
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();
wifi_init_config_t init_cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&init_cfg));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_start());
}