esp32-idf链接wifi,主要是建立了一个事件循环监听机制,通过向事件监听里面注册要监听的事件类型,在回调函数里面处理对应的事件,就可以处理wifi的各种连接事件。

#include <stdio.h>
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_err.h"
#include "esp_log.h"
#include <string.h>

#define SSID "Redmi"
#define PASSWORD "123456789"
#define TAG "STA"
#define TAG2 "IP"
void wifi_cb(void* event_handler_arg,esp_event_base_t event_base,int32_t event_id,void* event_data){
    if(event_base==WIFI_EVENT){
        switch (event_id)
        {
        case WIFI_EVENT_STA_START://开启sta模式成功
            esp_wifi_connect();//链接路由器
            break;
        case WIFI_EVENT_STA_CONNECTED://成功连接到路由器
            ESP_LOGI(TAG,"esp32s3 connected wifi");
        case WIFI_EVENT_STA_DISCONNECTED://断开连接
            ESP_LOGI(TAG,"esp32s3 disconnected wifi");
            esp_wifi_connect();
        default:
            break;
        }
    }
    else if (event_base==IP_EVENT)
    {
        switch (event_id)
        {
        case IP_EVENT_GOT_IP6:
            ESP_LOGI(TAG2,"esp32 got ip,connnecet success");
            break;
        
        default:
            break;
        }
    }
    
}

void app_main(void)
{
    //初始化nvs,后续会用来保存wifi的账号密码
    nvs_flash_init();
    //初始化网络接口(TCP/IP 协议栈相关)
    esp_netif_init();
    //创建创建默认事件循环机制
    esp_event_loop_create_default();
    //创建默认的 STA(站点)网络接口对象。
    esp_netif_create_default_wifi_sta();
    //按照默认配置,初始化wifi的操作
    wifi_init_config_t cfg=WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
    //向事件循环里面加入回调函数,有对应事件发生时会自动调用回调函数
    esp_event_handler_register(WIFI_EVENT,ESP_EVENT_ANY_ID,wifi_cb,NULL);//sta,数据链路层·    
    //获取到ip,网络层
    esp_event_handler_register(IP_EVENT,IP_EVENT_GOT_IP6,wifi_cb,NULL);
    //初始化 wifi_config_t,设置安全阈值和 PMF 能力。
    wifi_config_t conf={
        .sta.threshold.authmode=WIFI_AUTH_WPA2_PSK,
        .sta.pmf_cfg.capable=true,
        .sta.pmf_cfg.required=false,
    };
    memset(conf.sta.ssid,0,strlen(SSID));
    memcpy(conf.sta.ssid,SSID,strlen(SSID));

    memset(conf.sta.password,0,strlen(PASSWORD));
    memcpy(conf.sta.password,PASSWORD,strlen(PASSWORD));

    esp_wifi_set_config(WIFI_IF_STA,&conf);

    esp_wifi_set_mode(WIFI_MODE_STA);
    //启动 Wi‑Fi,开始连接流程
    esp_wifi_start();

}

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐