ESP32动态配置WiFi SSID问题:如何用变量设置SSID
ESP32 动态配置WiFi AP SSID(基于UUID)
ESP-IDF中wifi_config_t结构体的.ap.ssid是固定长度的字符数组(类型为uint8_t ssid[32]),并非指针,因此不能直接通过=将char数组变量赋值给它,必须用字符串拷贝的方式填充内容。以下是实现动态SSID(结合设备UUID)的正确步骤:
实现步骤
- 生成包含UUID的动态SSID字符串(注意长度不超过32字符,符合WiFi协议限制)
- 使用字符串拷贝函数将动态SSID写入配置结构体的
ssid数组 - 正确设置
ssid_len为SSID的实际长度
完整代码示例
#include <string.h> #include "esp_wifi.h" #include "esp_efuse.h" // 获取设备UUID(以ESP32内置MAC地址片段为例) void get_device_uuid(char *uuid_str, size_t max_len) { uint8_t mac[6]; esp_efuse_mac_get_default(mac); // 取MAC地址后4字节作为UUID标识 snprintf(uuid_str, max_len, "%02X%02X%02X%02X", mac[2], mac[3], mac[4], mac[5]); } void setup_wifi_ap() { // 1. 构建带UUID的动态SSID char dynamic_ssid[32]; char uuid_str[10]; get_device_uuid(uuid_str, sizeof(uuid_str)); // 拼接前缀与UUID,确保不超过32字符 snprintf(dynamic_ssid, sizeof(dynamic_ssid), "ESP32-%s", uuid_str); // 2. 初始化WiFi AP配置 wifi_config_t ap_config = { .ap = { .password = WIFI_AP_PASSWORD, .channel = WIFI_AP_CHANNEL, .ssid_hidden = WIFI_AP_SSID_HIDDEN, .authmode = WIFI_AUTH_WPA2_PSK, .max_connection = WIFI_AP_MAX_CONNECTIONS, .beacon_interval = WIFI_AP_BEACON_INTERVAL, } }; // 3. 拷贝动态SSID到配置结构体 strncpy((char *)ap_config.ap.ssid, dynamic_ssid, sizeof(ap_config.ap.ssid) - 1); // 手动添加字符串结束符,避免溢出问题 ap_config.ap.ssid[sizeof(ap_config.ap.ssid) - 1] = '\0'; // 设置SSID实际长度 ap_config.ap.ssid_len = strlen(dynamic_ssid); // 启动WiFi AP esp_wifi_set_mode(WIFI_MODE_AP); esp_wifi_set_config(WIFI_IF_AP, &ap_config); esp_wifi_start(); }
注意事项
- WiFi SSID最大长度为32字符,使用
snprintf可自动截断过长内容,避免数组溢出 - 若无需密码,可将
.password设为空字符串,并将.authmode改为WIFI_AUTH_OPEN - 可替换
get_device_uuid函数实现自定义UUID生成逻辑(如芯片唯一ID、自定义标识等)
内容的提问来源于stack exchange,提问作者Jaeseo Lee
相关产品推荐
相关产品推荐

