vscode的ws环境,esp32s3连接wifi

注意大小写,wsl(也就是linux环境)严格区分大小写。有帮助记得订阅专栏+点赞,当前不定期持续更新。

一、文件夹格式

复制代码
oled1/                  # 项目根目录
├─ main/                # 主程序文件夹
│  ├─ main.c            # 主函数文件(包含 app_main)
│  └─ CMakeLists.txt    # main 组件的编译配置
├─ components/          # 自定义组件目录(与 main 同级)
│  └─ WIFI/             # WIFI 组件
│     ├─ WIFI.c         # WIFI 功能实现
│     ├─ WIFI.h         # WIFI 头文件(声明函数、宏等)
│     └─ CMakeLists.txt # WIFI 组件的编译配置
├─ CMakeLists.txt       # 项目根目录编译配置(指定项目名称、依赖等)
├─ sdkconfig            # ESP-IDF 配置文件(由 menuconfig 生成)
└─ partitions.csv       # 分区表配置文件(可选,默认使用 ESP-IDF 自带)

二、WIFI.c

cs 复制代码
#include "WIFI.h"

void my_esp_event(void* event_handler_arg, esp_event_base_t event_base,int32_t event_id, void* event_data)
{
    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
        esp_wifi_connect();  //连接WiFi
        printf("WiFi连接断开,正在重新连接...\n");
    }
    else if(event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
        // WiFi station got IP address
        printf("获取IP地址成功!\n");
        ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;         
        char ip_str[16];
        sprintf(ip_str, IPSTR, IP2STR(&event->ip_info.ip));     //获取ip地址
        printf("IP的地址是: %s\n", ip_str);
    }
}

void init_Wifi()
{
    //一、初始化
    nvs_flash_init();
    esp_netif_init();       //初始化nvs和网络接口
    esp_event_loop_create_default();    //创建事件循环(接收wifi信号变化,获取ip啥的,都需要在事件循环里处理)
    esp_netif_create_default_wifi_sta();    //创建按wifi station(工作站)模式的网络接口
    printf("WIFI初始化结束!\n");
    //二、注册wifi和ip的事件回调
        //wifi事件回调
    esp_event_handler_instance_t wifi_event_handler;
    esp_event_handler_instance_register(WIFI_EVENT,             //wifi事件 
                                        ESP_EVENT_ANY_ID,       //任何wifi事件都触发下面的回调函数
                                        &my_esp_event,          //回调函数
                                        NULL,                   //用户数据
                                        &wifi_event_handler);   //事件回调句柄
        //ip事件回调
    esp_event_handler_instance_t ip_event_handler;
    esp_event_handler_instance_register(IP_EVENT,               //ip事件
                                        IP_EVENT_STA_GOT_IP,    //只关注获取ip的事件
                                        &my_esp_event,          //回调函数
                                        NULL,                   //数据
                                        &ip_event_handler);     //事件回调句柄
    printf("WIFI和IP事件注册回调完成!\n");
    //wifi配置与启动
        //配置
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); //默认配置 cfg-configuration
    esp_wifi_init(&cfg);
    esp_wifi_set_mode(WIFI_MODE_STA);
    wifi_interface_t interface = WIFI_IF_STA; //设置wifi接口为工作站模式
    wifi_config_t wifi_sta_config = {
        .sta = {
            .ssid = User_Wifi_SSID,          //替换为你的WiFi SSID
            .password = User_Wifi_PassWord,  //替换为你的WiFi密码
            .threshold.authmode = WIFI_AUTH_WPA2_PSK, //认证方式
        },
    };
    //wifi配置,wifi_sta_config是工作站模式的配置,sta_config是配置wifi账号、密码,和wifi的认证方式
    esp_wifi_set_config(interface, &wifi_sta_config);   
    esp_wifi_start();   //启动wifi
    printf("WIFI启动完成!\n");
}

三、WIFI.h

cs 复制代码
#pragma once

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "esp_log.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "esp_netif.h"    

#include "OLED.h"

#define User_Wifi_SSID      "QL.ql"       //你的wifi名字(建议英文),建议使用2.4G频段,不然可能连接不上
#define User_Wifi_PassWord  "Ql.qlGood"  //你的wifi密码

void init_Wifi();

四、CMakeList.txt

cs 复制代码
# components/WIFI/CMakeLists.txt
idf_component_register(
    SRCS "WIFI.c"
    INCLUDE_DIRS "."
    REQUIRES 
        esp_wifi 
        esp_event 
        esp_netif
        nvs_flash
        esp_system
        OLED
)

五、说明

①

cs 复制代码
在 C/C++ 中
#pragma once 
和
#ifndef ... #define ... #endif
作用一样。后者兼容性高且通用,前者方便

②需要更改成自己wifi账号密码的去修改WIFI.h的宏定义,有备注

③WIFI用到的官方组件比较多,注意CMakeList.txt的组件依赖声明和WIFI.h的引用头文件。如果直接引用库但是没有包含依赖,会报错。

六、参考

esp32-s3 IDF 连接wifi_哔哩哔哩_bilibili

相关推荐
不爱吃鱼的蔓热莓19 小时前
释放VSCode插件占用系统盘垃圾
ide·vscode·编辑器
2501_915106321 天前
iOS开发之Xcode常用调试技巧总结
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
易知微EasyV数据可视化1 天前
会插卡片的编辑器:在 Agent 输入框里混排文字与结构化内容
人工智能·经验分享·编辑器·agent·设计
打工仔折腾 AI1 天前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 的建表与增删改查手法
数据库·人工智能·后端·python·sql·编辑器·ai agent 实战
志尊宝1 天前
AI原生前端开发(001):Cursor编辑器深度使用从入门到精通
前端·编辑器·ai-native
martindelophy1 天前
开源 AI 视频编辑器实战:用结构化命令连接视频生成、对话剪辑与浏览器导出
人工智能·编辑器·音视频
bing_feilong1 天前
vscode: ssh Got bad result from install script
ide·vscode·ssh
JavaEdge.1 天前
Qodo v.s AI IDE Code Review
ide·人工智能·代码复审
小师兄吃牛肉1 天前
SQL 编辑器异常排查:基于 KStudio 的一次实战记录
java·sql·编辑器
(未雨绸缪)1 天前
VScode中AI补全功能开关
编辑器