我正在尝试用ESP32动态设置WIFI的配置。
取决于UUID的设备ID,我想设置SSID。
我试着把角色变量。然而,我失败了
// Original code
wifi_config_t ap_config =
{
.ap = {
.ssid = 'WIFI_SSID', // I would like to change .ssid as variable
.ssid_len = strlen(WIFI_AP_SSID),
.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,
},
};
// For example, I would like to set SSID name by using another variable
char ssid[10] = "anoter_ssid_name";
wifi_config_t ap_config =
{
.ap = {
.ssid = ssid, // I would like to change .ssid as variable
.ssid_len = strlen(WIFI_AP_SSID),
},
};发布于 2022-10-14 10:57:05
这绝对是错误的:
.ssid = 'WIFI_SSID', 下一步:基本上,您不能在静态存储持续时间初始化器中使用not const表达式。你需要在函数中这样做。
wifi_config_t ap_config =
{
.ap = {
.ssid = "WIFI_SSID", // I would like to change .ssid as variable
.ssid_len = sizeof("WIFI_SSID") - 1,
.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,
},
};
wifi_config_t *setSSID(wifi_config_t *cfg, const char *ssid)
{
strcpy(cfg -> ssid, ssid);
cfg -> ssid_len = strlen(ssid);
rerutn cfg;
}发布于 2022-10-14 09:28:21
您需要复制ssid字符串,因为struct的ssid字段被声明为uint8_t [10],因此已经分配了空间。如果将上面的尝试声明为指针,您的尝试就会奏效。
strcpy(ap_config.ap.ssid, ssid);
ap_config.ap.ssid_len = strlen(ssid);发布于 2022-10-14 09:30:31
如果您想初始化:
wifi_config_t ap_config =
{
.ap = {
.ssid = { ssid[0], ssid[1], ssid[2], ssid[3], ssid[4], ssid[5], ssid[6], ssid[7], ssid[8], ssid[9] },
.ssid_len = strlen(WIFI_AP_SSID),
},
};您可以将每个元素初始化封装在针对长度的检查中,以防止溢出:
.ssid = {
strlen(ssid) > 0 ? ssid[0] : 0,
strlen(ssid) > 1 ? ssid[1] : 0,
strlen(ssid) > 2 ? ssid[2] : 0,
strlen(ssid) > 3 ? ssid[3] : 0,
// etc...但是这样的代码并不是最优的。最简单的听起来像是你真的很想复制:
wifi_config_t ap_config;
strncpy(ap_config.ap.ssid, ssid, sizeof(ap_config.ap.ssid));
ap_config.ap.ssid_len = strlen(ssid);https://stackoverflow.com/questions/74066947
复制相似问题