将esp32s3单片机作为AP热点,需要配置网关和静态IP地址,系统默认是192.168.4.1,
为了实现自定义可以如下配置,并且根据MAC地址自定义SSID。
static void wifi_init_softap(void)
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_t*mynetif = esp_netif_create_default_wifi_ap();
/**
* 设置本地IP和网关
* */
esp_netif_ip_info_t ipInfo;
IP4_ADDR(&ipInfo.ip, 192,168,100,1);
IP4_ADDR(&ipInfo.gw, 192,168,100,1);
IP4_ADDR(&ipInfo.netmask, 255,255,255,0);
esp_netif_dhcps_stop(mynetif);
esp_netif_set_ip_info(mynetif, &ipInfo);
esp_netif_dhcps_start(mynetif);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
NULL));
//这个是默认mac base,比如softap是+1等等.
//本地无线网卡地址
uint8_t local_mac[6];
//esp_efuse_mac_get_default(mac);
esp_read_mac(local_mac,ESP_MAC_WIFI_SOFTAP);
//for(int i=0;i<sizeof(mac);i++)
// printf("%2X ",mac[i]);
//printf("\n");
uint8_t buf[32] = {0};
sprintf((char*)buf,"%s-%02X%02X%02X",EXAMPLE_ESP_WIFI_SSID_PREFIX,local_mac[3],local_mac[4],local_mac[5]);
wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID_PREFIX,//此处只能常量
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID_PREFIX),
.channel = EXAMPLE_ESP_WIFI_CHANNEL,
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
#ifdef CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT
.authmode = WIFI_AUTH_WPA3_PSK,
.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,
#else /* CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT */
.authmode = WIFI_AUTH_WPA2_PSK,
#endif
.pmf_cfg = {
.required = true,
},
},
};
//wifi_config.ap.pairwise_cipher
wifi_config.ap.ssid_len = strlen((char*)buf);
memcpy(wifi_config.ap.ssid,buf,wifi_config.ap.ssid_len);
wifi_config.ap.channel = sta_wifi_get_best_channel();
if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
//禁止modem休眠,降低延迟
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d",
buf, EXAMPLE_ESP_WIFI_PASS, wifi_config.ap.channel);
}