《ESP32 物联网全栈实战-04》WiFi 连接——让 ESP32 上网
·
第 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 协议——物联网的普通话
更多推荐



所有评论(0)