当前位置: 首页 > news >正文

ESP32C3连接wifi

文章目录

    • 🔧 一、ESP32-C3 连接 Wi-Fi 的基本原理(STA 模式)
    • ✅ 二、完整代码 + 注释讲解(适配 ESP32-C3)
    • 📌 三、几个关键点解释
    • 🔚 四、小结



🔧 一、ESP32-C3 连接 Wi-Fi 的基本原理(STA 模式)

ESP32-C3 使用 STA(Station)模式连接 Wi-Fi 热点流程如下:

  1. 初始化 NVS 存储:保存 Wi-Fi 参数等。
  2. 初始化网络接口(Netif)与事件循环(Event Loop)
  3. 初始化 Wi-Fi 驱动并设置为 STA 模式
  4. 设置 Wi-Fi SSID 和密码等参数
  5. 注册 Wi-Fi 与 IP 相关事件(启动、断开、获取 IP 等)。
  6. 启动 Wi-Fi 并尝试连接。
  7. 连接成功后会触发 IP 事件,获取 IP 地址。

✅ 二、完整代码 + 注释讲解(适配 ESP32-C3)

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_netif.h"// 设置你的 Wi-Fi 名称和密码
#define WIFI_SSID "P70PRO+"
#define WIFI_PASS "123456789"// 打印日志用的 tag
static const char *TAG = "wifi_main";// 用于标记是否已成功获取 IP
static bool got_ip = false;/*** @brief Wi-Fi 和 IP 事件处理函数*        这里处理连接、断开、获取 IP 等事件*/
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) {// 当 Wi-Fi STA 模式启动后,尝试连接热点esp_wifi_connect();} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {// 如果连接失败或掉线,自动重连ESP_LOGI(TAG, "Disconnected. Reconnecting...");esp_wifi_connect();} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {// 成功连接 Wi-Fi 并获取到 IP 地址ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;ESP_LOGI(TAG, "Got IP: " IPSTR, IP2STR(&event->ip_info.ip));got_ip = true; // 设置标志位表示 Wi-Fi 已连接}
}/*** @brief 主函数入口*        程序从这里开始运行*/
void app_main(void)
{printf("hello world\n");// 1. 初始化 NVS(非易失性存储),用于保存 Wi-Fi 配置等ESP_ERROR_CHECK(nvs_flash_init());// 2. 初始化底层网络接口(如 Wi-Fi STA 接口)ESP_ERROR_CHECK(esp_netif_init());// 3. 创建默认事件循环,用于处理系统事件ESP_ERROR_CHECK(esp_event_loop_create_default());// 4. 创建默认的 Wi-Fi STA 网络接口esp_netif_create_default_wifi_sta();// 5. 初始化 Wi-Fi 驱动wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 6. 注册 Wi-Fi 和 IP 相关事件的处理函数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, &wifi_event_handler, NULL));// 7. 配置 Wi-Fi 参数(SSID 和密码)wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID, // Wi-Fi 名称.password = WIFI_PASS, // Wi-Fi 密码.threshold.authmode = WIFI_AUTH_WPA2_PSK, // 认证方式},};// 8. 设置为 STA(Station)模式ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));// 9. 加载配置好的 Wi-Fi 参数ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));// 10. 启动 Wi-Fi(此时会触发 WIFI_EVENT_STA_START)ESP_ERROR_CHECK(esp_wifi_start());ESP_LOGI(TAG, "Wi-Fi started, waiting for connection...");// 11. 使用轮询等待连接成功(避免使用事件组)while (!got_ip) {vTaskDelay(pdMS_TO_TICKS(500)); // 延迟 500 毫秒}// 12. 成功连接ESP_LOGI(TAG, "Wi-Fi connected successfully!");
}

连接wifi成功:

在这里插入图片描述

📌 三、几个关键点解释

名称说明
esp_wifi_init()初始化 Wi-Fi 驱动
esp_netif_init()初始化底层 TCP/IP 栈
esp_event_loop_create_default()创建默认事件循环(处理回调)
esp_event_handler_register()注册 Wi-Fi 或 IP 事件的处理函数
esp_wifi_connect()尝试连接 Wi-Fi
WIFI_EVENT_STA_DISCONNECTEDWi-Fi 断开时触发
IP_EVENT_STA_GOT_IP成功获取 IP 地址后触发
esp_wifi_set_config()设置 SSID、密码等
esp_wifi_start()启动 Wi-Fi 模块
vTaskDelay()FreeRTOS 中延时函数

🔚 四、小结

你现在写的代码是ESP32-C3 连接 Wi-Fi 的最简方式之一

  • 省略了事件组:适合初学者快速验证功能
  • 直接判断 got_ip 变量:逻辑简单清晰
  • 结构合理:不依赖复杂任务调度、适合单线程程序

相关文章:

  • 【PmHub后端篇】PmHub中基于自定义注解和AOP的服务接口鉴权与内部认证实现
  • 主流高防服务器技术对比与AI防御方案实战
  • Docker常用命令及示例大全
  • 构建你的第一个简单AI助手 - 入门实践
  • #跟着若城学鸿蒙# HarmonyOS NEXT学习之AlphabetIndexer组件详解
  • 【兽医电子处方软件】佳易王宠物医院电子处方管理系统:宠物医院诊所用什么软件?一键导入配方模板软件程序实操教程 #操作简单 #宠物医院软件下载安装
  • Python -将MP4文件转为GIF图片
  • 中国古代史5---隋唐时期
  • JavaScript 模块封装函数
  • 在scala中sparkSQL读入csv文件
  • maven工程跳过@SpringTest
  • Linux干货(一)
  • 需求实现与测试验证脱节,如何确保产品质量
  • 下周,Coinbase将被纳入标普500指数
  • 解锁 CPFR 潜力:电商智能补货优化算法的全链路设计与实战指南
  • 二叉树、红黑树与 B 树的对比
  • arctanx 导数 泰勒展开式证明
  • 代码随想录算法训练营第三十九天
  • 日常学习开发记录-rate评价组件
  • docker-compose部署thingsboard/tb-cassandra
  • 最新研究:新型合成小分子可“精准杀伤”癌细胞
  • 习近平同巴西总统卢拉共同会见记者
  • 马上评丨岂能为流量拿自己的生命开玩笑
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我
  • 十三届全国政协经济委员会副主任张效廉被决定逮捕
  • 竞彩湃|热刺、曼联一周双赛不易,勒沃库森能否欢送阿隆索