esp32s3-idf链接wifi
·
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();
}
更多推荐


所有评论(0)