第 4 篇:WiFi 连接——让 ESP32 上网


1. WiFi Station 模式

#include "esp_wifi.h"
#include "nvs_flash.h"

#define WIFI_SSID     "your_wifi"
#define WIFI_PASS     "your_password"

void wifi_init_sta(void) {
    nvs_flash_init();  // WiFi 凭据存在 NVS 里
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    // 注册事件回调
    esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, NULL);
    esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, NULL);

    wifi_config_t wifi_cfg = {
        .sta = {
            .ssid = WIFI_SSID,
            .password = WIFI_PASS,
        },
    };
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_set_config(WIFI_IF_STA, &wifi_cfg);
    esp_wifi_start();
}

void wifi_event_handler(void *arg, esp_event_base_t base,
                        int32_t id, void *data) {
    if (base == WIFI_EVENT && id == WIFI_EVENT_STA_DISCONNECTED) {
        esp_wifi_connect();  // 断线自动重连
        printf("WiFi disconnected, reconnecting...\n");
    }
    if (base == IP_EVENT && id == IP_EVENT_STA_GOT_IP) {
        ip_event_got_ip_t *event = (ip_event_got_ip_t *)data;
        printf("WiFi connected! IP: " IPSTR "\n", IP2STR(&event->ip_info.ip));
    }
}

2. 智能配网(SmartConfig)

让用户用手机 App 给 ESP32 配置 WiFi,不用在固件里写死 SSID。

// 上电如果没有保存的 WiFi 凭据,进入配网模式
esp_wifi_set_mode(WIFI_MODE_STA);
esp_smartconfig_set_type(SC_TYPE_ESPTOUCH);    // 微信 AirKiss 协议
esp_smartconfig_start(sc_callback);
// 用户用微信扫码 → 输入密码 → ESP32 自动连接

// 配网成功后,凭据存入 NVS,下次上电直接用

下一篇:MQTT 协议——物联网的普通话

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐