ESP32和ESP8266的WIFI的136個問題與答案

ESP32和ESP8266的WIFI的136個問題與答案

ESP32和ESP8266 WIFI相關問題與答案,具有一定的參考價值。

ESP32-S3模塊

ESP32-S3模塊

1. ESP32 和 ESP8266 是否支持中文 SSID?

ESP32 和 ESP8266 均支持中文 SSID,但需要使用相應的庫和設置。需要注意的是,由于中文字符占用的字節數不同,因此使用中文 SSID 時需要特殊處理。

對于 ESP32,可以使用 ESP-IDF 提供的 Wi-Fi 相關 API。在連接 AP 時,可以使用 esp_wifi_set_config() 函數設置 Wi-Fi 配置,其中的 ssid 參數可以設置為中文字符串。例如:

wifi_config_t wifi_config = {
.sta = {
.ssid = “你好,世界”,
.password = “password123”,
},
};
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));

2. [Scan] ESP32 掃描?次需要花多長時間?

掃描花費的總時間取決于:

是被動掃描還是主動掃描,默認為主動掃描。

每個信道停留的時間,默認主動掃描為 120 ms,被動掃描為 360 ms。

國家碼與配置的信道范圍,默認為 1~13 信道。

是快速掃描還是全信道掃描,默認為快速掃描。

Station 模式還是 Station-AP 模式,當前是否有連接。

默認情況下,1~11 信道為主動掃描,12?13 信道為被動掃描。

在 Station 模式沒有連接的情況下,全信道掃描總時間為:11120 + 2360 = 2040 ms;

在 Station 模式有連接,或者 Station-AP 模式下,全信道掃描總時間為:11120 + 2360 + 13*30 = 2430 ms。

3. [Scan] 樂鑫是否支持 boundary scans(邊界掃描)?

ESP32 不?持 boundary scan。

4. Wi-Fi 信道是什么?可以自行選擇信道嗎?

信道指的是 Wi-Fi 使用的指定頻段中特定頻率的波段。不同國家地區使用的信道數是不同的。例如在北美,Wi-Fi 信道范圍是 1 到 11,而在歐洲,Wi-Fi 信道范圍是 1 到 13。?戶可以參考 ESP8266 Wi-Fi 信道選擇指南。

5. [LWIP] 使用 ESP-IDF v4.1,ESP32 用作 SoftAP 模式時如何設置 IP 地址?

由于 ESP-IDF v4.1 以及以上版本會摒棄掉 TCP/IP 的接口,推薦使用 ESP-NETIF 的接口.

參考示例代碼如下:

{

esp_netif_t ap_netif = esp_netif_create_default_wifi_ap();
char
ip= “192.168.5.241”;
char* gateway = “192.168.5.1”;
char* netmask = “255.255.255.0”;
esp_netif_ip_info_t info_t;
memset(&info_t, 0, sizeof(esp_netif_ip_info_t));

if (ap_netif)
{ESP_ERROR_CHECK(esp_netif_dhcps_stop(ap_netif));info_t.ip.addr = esp_ip4addr_aton((const char *)ip);info_t.netmask.addr = esp_ip4addr_aton((const char *)netmask);info_t.gw.addr = esp_ip4addr_aton((const char *)gateway);esp_netif_set_ip_info(ap_netif, &info_t);ESP_ERROR_CHECK(esp_netif_dhcps_start(ap_netif));
}
...

}

6. [LWIP] ESP32 Station 模式,如何設置靜態 IP?

由于 v4.2 以及以上版本會摒棄掉 TCP/IP 的接口,推薦使用 ESP-NETIF 的接口.參考示例代碼如下:

esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
if (sta_netif)
{
esp_netif_ip_info_t info_t = {0};
esp_netif_dhcpc_stop(sta_netif);

info_t.ip.addr = ESP_IP4TOADDR(192, 168, 3, 23);
info_t.gw.addr = ESP_IP4TOADDR(192, 168, 3, 1);
info_t.netmask.addr = ESP_IP4TOADDR(255, 255, 255, 0);
esp_netif_set_ip_info(sta_netif, &info_t);

}
esp_netif_dns_info_t dns_info = {0};

7. [LWIP] ESP-IDF 里如何設置 DHCP Server 的 Option 內容?

由于 v4.1 以及以上版本會摒棄掉 tcp/ip 的接口,推薦使用 ESP-NETIF 的接口。DHCP Client 設置方法也可以參考本示例。參考示例代碼如下:

// 創建 softap 的 netif 句柄
esp_netif_t *ap_netif = esp_netif_create_default_wifi_ap();

// ESP_NETIF_IP_ADDRESS_LEASE_TIME, DHCP Option 51, 設置分發的 IP 地址有效時間
uint32_t dhcps_lease_time = 60; // 單位是分鐘
ESP_ERROR_CHECK(esp_netif_dhcps_option(ap_netif,ESP_NETIF_OP_SET,ESP_NETIF_IP_ADDRESS_LEASE_TIME,&dhcps_lease_time,sizeof(dhcps_lease_time)));

// ESP_NETIF_DOMAIN_NAME_SERVER , DHCP Option 6, 設置 DNS SERVER
// 設置 DNS 之前先要設置本地主 DNS
esp_netif_dns_info_t dns_info = {0};
dns_info.ip.u_addr.ip4.addr = ESP_IP4TOADDR(8,8,8,8);
ESP_ERROR_CHECK(esp_netif_set_dns_info(ap_netif,ESP_NETIF_DNS_MAIN,&dns_info));

uint8_t dns_offer = 1; // 傳入 1 使修改的 DNS 生效,如果是 0,那么用 softap 的 gw ip 作為 DNS server (默認是 0)
ESP_ERROR_CHECK(esp_netif_dhcps_option(ap_netif,ESP_NETIF_OP_SET,ESP_NETIF_DOMAIN_NAME_SERVER,&dns_offer,sizeof(dns_offer)));

// ESP_NETIF_ROUTER_SOLICITATION_ADDRESS, DHCP Option 3 Router, 傳入 0 使 DHCP Option 3(Router) 不出現(默認為 1)
uint8_t router_enable = 0;
ESP_ERROR_CHECK(esp_netif_dhcps_option(ap_netif,ESP_NETIF_OP_SET,ESP_NETIF_ROUTER_SOLICITATION_ADDRESS,&router_enable, sizeof(router_enable)));

// ESP_NETIF_SUBNET_MASK, DHCP Option 1, 設置子網掩碼
// 通過 ESP_NETIF_SUBNET_MASK 設置子網掩碼無效, 請通過 esp_netif_set_ip_info 修改

8. [Performance] 如何測試 Wi-Fi 模組的通信速率?

可以使? ESP-IDF 里的 iperf 示例 進?測試。

9. [LWIP] ESP8266 SoftAP 默認使用哪個網段?

ESP8266 SoftAP 默認使用網段 192.168.4.*。

10. ESP8266 SoftAP + Station 模式下,連接的 192.168.4.X ?段時,為什么會失敗?

ESP8266 SoftAP 默認使用網段 192.168.4.*,IP 地址是 192.168.4.1。ESP8266 如果要連接 192.168.4.X 的路由時,不能分辨是要連接??本身的 SoftAp 還是外部路由,所以會造成錯誤。

11. [Connect] ESP8266 SoftAP 模式支持幾個設備?

ESP8266 SoftAP 模式最多可以支持八個設備連接。這是由于 ESP8266 芯片在 SoftAP 模式下使用的 NAT(網絡地址轉換)機制只支持最多八個設備的連接。 但需要注意的是,每個連接的設備會占用一定的帶寬和資源,因此我們推薦連接四個設備,因為連接過多設備可能會影響 Wi-Fi 模組的性能和穩定性。

12. ESP8266/ESP32/ESP32-S2/S3/C2/C3 是否支持 web/softAP 配網?

支持。

ESP8266 請參考此示例 ESP8266 softap_prov;

ESP32/ESP32-S2/S3/C2/C3 請參考此示例 ESP32/ESP32-S2/S3/C2/C3 wifi_prov_mgr。

13. [Connect] ESP8266 和 ESP32 作為 softap 模式如何隱藏 SSID?

要隱藏 ESP8266 或 ESP32 作為 SoftAP 模式下的 SSID,可以通過以下方法實現:

調用 esp_wifi_set_config() 來配置 SoftAP 模式下的 SSID,密碼以及是否隱藏。例如,以下代碼設置 SSID 為 “MySoftAP”,密碼為 “MyPassword”,函數中使用 .ssid_hidden = 1 選項來隱藏 SSID:

wifi_config_t config = {
.ap = {
.ssid = “MySoftAP”,
.ssid_len = strlen(“MySoftAP”),
.password = “MyPassword”,
.max_connection = 4,
.authmode = WIFI_AUTH_WPA_WPA2_PSK
.ssid_hidden = 1
},
};
esp_wifi_set_config(WIFI_IF_AP, &config);
配置完后調用 esp_wifi_start() 啟動 Wi-Fi。

14. esp_wifi_802.11_tx 接口中的 buffer 參數中包括 FCS 嗎?

不包括, FCS 幀是硬件自動生成的。

15. ESP-WROOM-32D 支持的 Wi-Fi 頻段信息和功率表分別是什么?

Wi-Fi 頻段是 2412 ~ 2484 MHz,軟件里可配置可用信道和對應的工作頻率。功率表有默認值,也可支持軟件配置。詳細指導請參考 《ESP32 Phy Init Bin 重要參數配置說明》。

16. ESP32 Wi-Fi RF 功率最高值是多少?

ESP32 的 Wi-Fi RF(無線電頻率)功率輸出最高可以配置為 20 dBm。 請注意,最大功率輸出水平可能會因不同的國家/地區和規定而有所不同。在使用 ESP32 時,請確保您遵守當地的規定和法規,以確保合法和安全使用。另外,高功率輸出也會對電池壽命和 Wi-Fi 信號穩定性產生影響,因此在選擇功率輸出水平時,需要根據具體的應用場景和要求進行權衡和選擇。

17. ESP32 如何調整 Wi-Fi 的發射功率?

可通過 menuconfig 配置 Component config > PHY > Max Wi-Fi TX power(dBm) 來調整 Wi-Fi 的發射功率,最大是 20 dBm。

或者使用 API esp_err_t esp_wifi_set_max_tx_power(int8_t power); 設置調整。

18. [Connect] ESP32 AP 模式最多支持多少設備連接?

ESP32 AP 模式,最多可配置為支持 10 個設備連接,默認配置為支持 4 設備。

19. [Connect] Wi-Fi 模組如何通過 RSSI 數值劃分信號強度等級?

我們沒有對 RSSI 信號強度進行等級劃分。如果您需要標準進行劃分,可以參考安卓系統的計算方法。

@UnsupportedAppUsage
private static final int MIN_RSSI = -100;

/** Anything better than or equal to this will show the max bars. */
@UnsupportedAppUsage
private static final int MAX_RSSI = -55;

public static int calculateSignalLevel(int rssi, int numLevels) {
if(rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
float inputRange = (MAX_RSSI -MIN_RSSI);
float outputRange = (numLevels - 1);
return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
}
}

20. [Connect] ESP32 做 soft-AP 時為什么會把 STA 踢掉?

默認情況下連續 5 min 收不到 STA 發過來的數據包就會把 STA 踢掉。該時間可以通過 esp_wifi_set_inactive_time 進行修改。

注: esp_wifi_set_inactive_time 新增的 API。

master commit: 63b566eb27da187c13f9b6ef707ab3315da24c9d

4.2 commit: d0dae5426380f771b0e192d8ccb051ce5308485e

4.1 commit: 445635fe45b7205497ad81289c5a808156a43539

4.0 commit: 0a8abf6ffececa37538f7293063dc0b50c72082a

3.3 commit: 908938bc3cd917edec2ed37a709a153182d511da

21. [Connect] ESP32 進行 Wi-Fi 連接時,如何通過錯誤碼判斷失敗原因?

ESP-IDF v4.0 及以上版本可參考如下代碼獲取 Wi-Fi 連接失敗的原因:

if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
wifi_event_sta_disconnected_t sta_disconnect_evt = (wifi_event_sta_disconnected_t)event_data;
ESP_LOGI(TAG, “wifi disconnect reason:%d”, sta_disconnect_evt->reason);
esp_wifi_connect();
xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);
}
當回調函數接收到 WIFI_EVENT_STA_DISCONNECTED 事件時,可以通過結構體 wifi_event_sta_disconnected_t 的變量 reason 獲取到失敗原因。

WIFI_REASON_AUTH_EXPIRE 在連接的 auth 階段,STA 發送了 auth,但在規定時間內未收到 AP 的 auth 回復,有較低概率會出現。

WIFI_REASON_AUTH_LEAVE 通常是由 AP 因為某種原因斷開了 STA 連接,reason code 是由 AP 發過來的。

WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT 或者 WIFI_REASON_HANDSHAKE_TIMEOUT 失敗原因為密碼錯誤。

其中,WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT 為標準通用的錯誤碼,而 WIFI_REASON_HANDSHAKE_TIMEOUT 為自定義錯誤碼。兩者區別在于 WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT 為路由器在密碼錯誤時告知設備,產生的錯誤,WIFI_REASON_HANDSHAKE_TIMEOUT 為路由器在密碼錯誤時不告知設備,由設備本身超時機制產生的錯誤。

WIFI_REASON_CONNECTION_FAIL 掃描階段返回的錯誤碼,主要是由于 STA 掃描到了匹配的 AP,但是這個 AP 在黑名單里。AP 在黑名單里面的原因是上次 AP 主動踢掉了 STA,或者 STA 連接 AP 的過程中失敗了。

22. ESP32 系列芯片每次連接服務器都會執行域名解析嗎?

在協議棧內,域名會通過 DNS 進行解析,解析后的數據會在時效內進行緩存。緩存時間基于從 DNS 服務器獲取的 TTL 數據,該數據是配置域名時填入的參數,通常為 10 分鐘。

23. [Connect] Wi-Fi Log 中狀態機切換后面數字的含義?

eg: run -> init (fc0),fc0 含義為 STA 收到了 deauth 幀,reason 為密碼錯誤。

c0 代表收到的幀類型(00 代表超時)

f 代表 reason

幀類型: [a0 disassoc]、[b0 auth]、[c0 deauth]。

24. [Connect] bcn_timeout, ap_probe_send_start 是什么意思?

在規定時間內(ESP32 默認 6 s,即 60 個 Beacon Interval),STA 未收到 Beacon 幀。 造成該現象可能有:

內存不足。”ESP32_WIFI_MGMT_SBUF_NUM” 不夠 (log 中會打出 “esf_buf: t=8, l=beacon_len, …” 這樣的 Error)。內存不夠,可在收到 disconnect event 時打出 heap 大小來排查。

AP 未發出 beacon。可通過抓包 AP 的 beacon 來排查。

Rssi 值太低。在復雜環境下 Rssi 值較低時,可能導致 STA 收不到 beacon,可通過調用 esp_wifi_sta_get_ap_info 獲取 Rssi 值來排查。

硬件原因。收包性能差。

出現 bcn_timeout 時,STA 會嘗試發送 5 次 Probe Request,如果 AP 回 Probe Reponse,就保持連接;如果 AP 未回復,STA 發送 Disconnect 事件,并斷開連接。

25. [Connect] Wi-Fi 連接斷開后如何重連?

收到 WIFI_EVENT_STA_DISCONNECTED 之后調用 esp_wifi_connect。

26. [Connect] ESP32 作為 station 時什么時候會把 SoftAP 踢掉?

默認情況下 6 s 未收到 AP 的 beacon 就會把 AP 踢掉。該時間可以通過 esp_wifi_set_inactive_time 進行修改。

27. [Scan] 為什么有時候掃描不到 AP?

ESP32 和 ESP8266 掃描不到 AP 的原因可能有很多,以下是一些常見的原因和解決方法:

AP 距離過遠或信號質量差:ESP32 和 ESP8266 的 Wi-Fi 功能只能在一定范圍內工作。如果 AP 距離過遠或 Wi-Fi 信號質量太差,ESP32 和 ESP8266 可能無法掃描到 AP。可以嘗試將 ESP32 或 ESP8266 靠近 AP,或者使用信號增強器來增強 AP 信號強度。

AP 的 SSID 隱藏:一些 AP 可能隱藏其 SSID,這意味著它不會被廣播到附近的設備。在這種情況下,ESP32 和 ESP8266 無法掃描到 AP。要解決這個問題,您可以手動輸入 AP 的 SSID 和密碼進行連接。

AP 已滿載或故障:如果 AP 已滿載或故障,它可能無法處理新的連接請求,這會導致 ESP32 和 ESP8266 無法連接到 AP。您可以嘗試等待一段時間,然后再次掃描 AP。

ESP32 或 ESP8266 的軟件問題:有時候,ESP32 或 ESP8266 的軟件可能會出現問題,導致無法正確掃描 AP。在這種情況下,您可以嘗試重置 ESP32 或 ESP8266,并重新啟動 Wi-Fi 功能。如果問題仍然存在,您可能需要更新 ESP32 或 ESP8266 的固件。

其他因素:其他因素,如無線干擾、安全設置、網絡配置等,也可能會影響 ESP32 或 ESP8266 的 Wi-Fi 功能。在這種情況下,您需要仔細檢查 Wi-Fi 環境并進行相應的設置。

28. [Scan] 最多能夠掃描多少個 AP?

能夠掃描到的 AP 最大個數沒有限制,取決于掃描時周邊 AP 的數目與掃描參數的配置,比如每個信道停留的時間,停留時間越長越可能找到全部的 AP。

29. [Scan] 連接時周圍存在多個相同 ssid/password 時能否選出最佳 AP 連接?

默認情況下為 WIFI_FAST_SCAN, 總是連接第一個掃描到的 AP。如果要連接最佳AP,需要在設置 station 時將 scan_method 配置成 WIFI_ALL_CHANNEL_SCAN,同時配置 sort_method 來決定選擇 RSSI 最強或者是最安全的 AP。

30. [Scan] wifi_sta_config_t 中 scan_method 怎么配置?全信道掃描和快速掃描的區別在哪里?

全信道掃描和快速掃描是用在連接前尋找合適 AP 所需要的,scan_method 設定了 fast_scan,可以配合 threshold 來過濾信號或加密方式不強的 AP。

選擇了 fast_scan 會在掃描到第一個匹配的 AP 的情況下停止掃描,然后進行連接,節省連接的時間。

選擇了 all_channel_scan 的時候掃描會進行全信道掃描,然后根據 sort_method 中設定的排序方法,存儲四個信號最好或者加密方式最安全的 AP,等到掃描結束后選擇其中信號最好或者加密方式最安全的 AP 進行連接。

31. [LWIP] 如何獲取 socket 的錯誤碼?

ESP-IDF v4.0 版本以上(含v4.0) 標準的做法是 socket API 返回失敗后直接通過 errno 的值來獲取錯誤碼。

ESP-IDF v4.0 版本以下標準的做法是 socket API 返回失敗后調用 getsockopt(sockfd, SOL_SOCKET, SO_ERROR, …) 的方式獲取錯誤碼,否則當多個 socket 并行操作的時候可能會獲取到不正確的錯誤碼。

32. [LWIP] 默認 TCP keep-alive 時間為多少?

默認情況下,如果連續兩個小時收不到任何 TCP 報文,會每隔 75 秒發送一個 TCP keep-alive 報文,連續發送 9 個 tcp keep-alive 報文,如果依然收不到對方發過來的任何報文 LWIP 會斷開 TCP 連接。

Keep-alive 可通過 socket option 進行配置。

33. [LWIP] TCP 重傳間隔?

ESP32 作為發送方時,TCP 協議的重傳間隔初始值為 3 秒,如果接收方沒有發送 ACK 消息,則會依據 Jacoboson 算法決定下次重傳間隔,即指數級地增加重傳間隔時間,一般是按照 2、4、8、16、32 秒逐漸增加。這個重傳間隔時間不是固定的,TCP 協議的實現者可以通過調整一些參數,如超時時間、滑動窗口大小等來影響重傳間隔的計算。

34. [LWIP] 最多能夠創建多少個 socket ?

最多 16 個,默認為 10 個。

35. [Sleep] ESP32 有哪幾種休眠方式及其區別是什么?

一共有三種休眠方式: Modem sleep, Light sleep 和 Deep sleep。

Modem sleep: WiFi 協議規定的 station WMM 休眠方式(station 發送 NULL 數據幀通知 AP 休眠或醒來),station 連接上 AP 之后自動開啟,進入休眠狀態后關閉射頻模塊,休眠期間保持和 AP 的連接,station 斷開連接后 modem sleep 不工作。ESP32 modem sleep 進入休眠狀態后還可以選擇降低 CPU 時鐘頻率,進一步降低電流。

Light sleep: 基于 modem sleep 的 station 休眠方式,和 modem sleep 的不同之處在于進入休眠狀態后不僅關閉射頻模塊,還暫停 CPU,退出休眠狀態后 CPU 從斷點處繼續運行。

Deep sleep: 非 WiFi 協議規定的休眠方式,進入休眠狀態后關閉除 RTC 模塊外的所有其他模塊,退出休眠狀態后整個系統重新運行(類似于系統重啟),休眠期間不能保持和 AP 的連接。

36. [Sleep] ESP32 modem sleep 動態調頻功能在哪打開?

在 menuconfig > Component Config > Power Management > Support for power management > Enable dynamic frequency scaling (DFS) at startup 中打開。

37. [Sleep] ESP32 modem sleep 降頻功能最低能降到多少?

目前 CPU 時鐘最低能降到 40 MHz。

38. [Sleep] ESP32 modem sleep 平均電流大小影響因素?

ESP32 的 modem sleep 是通過設定一個喚醒周期,每個周期開始時打開芯片的射頻進行通信其余時間關閉射頻來降低功耗。

該模式下平均電流的大小受多種因素影響,下面列舉了一些主要的影響因素:

喚醒周期:如果設定的喚醒周期越短,則單位時間內芯片喚醒的越頻繁,平均電流也會相應增大。

信號質量:如果 Wi-Fi 信號質量較差,芯片會不斷嘗試重新連接或發送數據,或者改用較大發射功率的通信協議進行數據通信,這些都會導致平均電流增大。

硬件配置:芯片的硬件配置也會對功耗產生影響,如 CPU 單核還是雙核、CPU 時鐘頻率、CPU 空閑時間比、電源電壓、是否外接晶振等因素都會對平均電流大小產生影響。

其他因素:例如測試路由器發送 beacon 時間點是否準確,是否發送過多的廣播包,芯片本身是否有外設模塊工作等

39. [Sleep] 為什么測到的 modem sleep 平均電流偏高?

測試過程中有較多的 Wi-Fi 數據收發。數據收發越多,進入休眠狀態的機會越少,平均電流就越高。

測試用的路由器發送 beacon 時間點不準確。Station 需要定時醒來監聽 beacon,若 beacon 時間點不準確,station 會等待較長時間,進入休眠狀態的時間就越少,平均電流就越高。

測試過程中有外設模塊在工作,請關閉外設模塊再進行測試。

開啟了 station + softap 模式,modem sleep 只在 station only 模式下才會降低電流。

40. [Sleep] 為什么測到的 light sleep 平均電流偏高?

除了上述四個原因之外還可能是:

應用層代碼在不停地運行,CPU 沒有機會暫停。

應用層使用了 ets timer 或者 esp timer,且 timer 的超時時間間隔較短,CPU 沒有機會暫停。

41. [Sleep] ESP32 有哪幾種 Wi-Fi 節能模式及其區別?

ESP32 的節能模式一共有三種類型:modem 最小節能模式、modem 最大節能模式、以及不節能模式。

modem 最小節能模式:該模式為默認模式。在該模式下,ESP32 從 Light-sleep 中醒來收 beacon 的時間間隔由路由器端的 DTIM 決定,為 (DTIM * 102.4) ms,即假如路由器的 DTIM 為 1,則每隔 100 ms ESP32 會醒來進行一次收包。

modem 最大節能模式:在該模式下,ESP32 從 Light-sleep 中醒來收 beacon 的時間間隔由 wifi_sta_config_t 這個結構體中的 listen_interval 參數決定,為 (listen interval * 102.4) ms,即假如路由器的 DTIM 為 1,而 listen_interval = 10,則每隔 1 s ESP32 會醒來進行一次收包。

不節能模式:不進行節能處理。

42. ESP8266 是否支持 802.11k/v/r 協議?

當前只支持 802.11k 和 802.11v,可參考示例 roaming。

43. ESP32 Wi-Fi 支持相同的 SSID 不同的 AP 之間漫游嗎?

支持,當前支持 802.11k 和 802.11v 協議,請參考示例 roaming。

44. [Connect] NONOS_SDK 2.1.0 升級到 2.2.2 后,連接時間變長?

請升級到 NONOS_SDK master 版本,該版本中解決了 CCMP 加密與某些 AP 不兼容的問題。

45. ESP32 如何收發 Wi-Fi 802.11 數據包?

可以通過如下 API 進行 802.11 數據包收發:

esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
esp_wifi_set_promiscuous_rx_cb(wifi_sniffer_cb);
上述 API 在 MDF 項目中有用到,可以參考:mconfig_chain。

46. [Connect] ESP32 系列 & ESP8266 路由器連接失敗有哪些可能原因?

檢查配置中的 SSID 與 Password 是否正確。

不建議使用中文 SSID,可能存在不同中文編碼帶來的異常。

需要注意 bssid_set 的設置,如果不需要指定路由的 MAC 地址,那么需配置 stationConf.bssid_set = 0。

wifi_config_t wifi_config 建議使用靜態變量 static 來定義。

47. [Connect] ESP8266 有那些配網方式?

SmartConfig 模式:?鍵配置?式,設備在 sniffer 模式掃描特征包的?式。

SoftAP 模式:設備開啟 SoftAP, ?機連接 SoftAP 后建?穩定的 TCP/UDP 連接后,發送 SSID 和密碼。

WPS 模式:此?式需要設備中增加按鍵;或連接到設備的 SoftAP 后使??機軟件控制開啟 WPS。

48. [Connect] SmartConfig 配? Wi-Fi 參數信息有哪些要求?

SmartConfig 是一種通過局域網廣播方式配置 Wi-Fi 參數的方案,用戶可以通過使用配套的 APP 將 Wi-Fi 賬號和密碼發送給設備。下面是 SmartConfig 配網 Wi-Fi 參數信息的要求:

SSID 名稱:支持中英文和數字字符,長度不超過 32 個字節。

Wi-Fi 密碼:8-64 個字符,區分大小寫。

Wi-Fi 安全加密方式:目前 SmartConfig 支持的加密方式有:WPA、WPA2 和 WEP,不支持開放式無加密方式。

49. [Connect] ESP8266 Wi-Fi 是否支持 WPA2 企業級加密?

支持。請參考示例 wpa2_enterprise。

可使用 FreeRADIUS 服務搭建 RADIUS 服務器,請參考 FreeRADIUS。

50. [Connect] ESP32 保持 Wi-Fi 連接的低功耗模式有哪些?

在保存 Wi-Fi 連接的場景中,芯片會在 Active 和 Modem-sleep 模式之間自動切換,功耗也會在兩種模式間變化。

ESP32 支持在 light sleep 下 Wi-Fi 保活,自動喚醒間隔由 DTIM 參數決定。

例程參見:ESP-IDF - > examples - > wifi - > power_save。

51. 樂鑫芯片是否支持 WPA3?

ESP32 系列:esp-idf 從 release/v4.1 版本開始支持 WPA3,默認使能,可在 menuconfig > Component config > Wi-Fi 中配置。

ESP8266:ESP8266_RTOS_SDK 的 release/v3.4 分支開始支持 WPA3,默認使能,可在 menuconfig > Component config > Wi-Fi 中配置。

52. [Connect] 當環境內存在多個相同 SSID 時,設備如何連接 ?

設備會連接優先掃描到的 AP 設備。

如果想要根據信號質量等排序,可以使用 Scan 方法自主篩選。

如果想要連接指定 AP, 可以在連接參數中填入 BSSID 信息。

53. [Connect] ESP8266 有中繼器方案嗎?

樂鑫官方未推出中繼類應用方案。

社區中有相關中繼的應用,可以在 github 中查詢,中繼速率建議基于實際測試。

54. ESP32 數據幀和管理幀的重傳次數是多少?是否可以配置?

重傳次數是 31 次,不可以配置。

55. ESP32 如何自定義 hostname?

以 ESP-IDF v4.2 為例,可以在 menuconfig > Component Config > LWIP > Local netif hostname,然后輸入指定的 hostname 即可。

不同的版本在命名上可能略有區別。

56. 如何獲取 802.11 無線數據包?

可以參考 ESP-IDF 編程文檔中的 Wireshark 使用指南 。

需要注意的是,所使用的無線網卡需要支持 Monitor 模式。

57. ESP32 Wi-Fi 支持 PMF(Protected Management Frames) 和 PFS(Perfect Forward Secrecy) 嗎?

WPA2/WPA3 中均支持 PMF, WPA3 中支持 PFS。

58. ESP8266 在使用 esptouch v2 出現 AES PN 錯誤 log?

ESP8266 收到路由器重傳了好幾次的包會報這個錯誤,但是不影響使用。

59. ESP32 WFA 認證支持多播嗎?

不支持,建議參考 ASD-1148 方式測試。

60. 使用 ESP32,是否可以在建立熱點之前,先掃描所有的 AP 以及所占用的信道,從中選擇一個占用最小最干凈的信道來建立自己的 AP 呢?

可以在建立熱點之前,先掃描所有的 AP 以及所占用的信道,參考 API esp_wifi_scan_get_ap_records。

不能自動選擇最干凈的信道來建立自己的 AP,需要自定義信道選擇算法。

61. 使用 ESP32,ESP-IDF 版本為 release/v3.3,Wi-Fi Scan 時,當有多個相同的 SSID 時,獲取的列表中有多個重復的 SSID,是否有 API 進行過濾,只保留一個 SSID?

不能對重復 SSID 進行過濾。因為 SSID 重復不代表是同一個路由器,掃描到的 SSID 相同的路由器的 BSSID 是不同的。

62. ESP8266 是否支持 EDCF (AC) 方案?

當前最新 master 版本的 ESP8266-RTOS-SDK 支持 EDCF (AC) 應用,但沒有應用實例。您可以在 menuconfig > Component config -> Wi-Fi 配置中開啟 Wi-Fi QoS 配置,以獲得支持。

63. 使用 master 版本的 ESP8266-RTOS-SDK,開啟 Wi-Fi Qos 應用獲得 EDCF 的支持,請問 ESP8266 是如何決定哪個數據包應該分配到 EDCF AC 類別的?

可以通過設置 IPH_TOS_SET(iphdr, tos) 來確定。

64. 使用 ESP32,在不考慮內存與功耗的情況下,如何配置最大 Wi-Fi 傳輸速度與穩定性呢?

如需配置最大 Wi-Fi 傳輸速度與穩定性,請參考 ESP-IDF 編程指南中 如何提高 Wi-Fi 性能,在 menuconfig 中設置相關配置參數即可。配置選項路徑可在 menuconfig 界面中,通過 “/” 來搜索。最優配置參數需根據實際當前的環境進行測試。

65. ESP8266 作為 Wi-Fi SoftAP 模式,最多支持多少個 Station 設備連接?

ESP8266 最多支持 8 個 Station 設備連接。

66. 使用 ESP32 設備作為 Station 模式,如何獲取 CSI 數據?

通過調用 “esp_wifi_set_csi_rx_cb()” 可獲取 CSI 數據。參見 API 說明。

具體使用方法參見 Espressif CSI 示例

67. ESP32 在 AP + STA 模式連接 Wi-Fi 后,任意開啟關閉 AP 模式是否會影響 Wi-Fi 連接?

ESP32 在 AP + STA 雙模式下進行 Wi-Fi 連接后,可以任意開啟關閉 AP 模式,不影響 Wi-Fi 連接。

68. ESP32 使用 release/v3.3 版本的 ESP-IDF 進行開發,只需要藍牙功能,如何通過軟件關閉 Wi-Fi 功能?

調用 esp_wifi_stop() 可關閉 Wi-Fi 功能。API 說明參見 esp_err_t esp_wifi_stop(void)。

若需要回收 Wi-Fi 占用的資源,則還需要調用 esp_wifi_deinit(),API 說明請參見 esp_err_t esp_wifi_deinit(void)。

以下是一個簡單的示例代碼:

#include “esp_wifi.h”
#include “esp_bt.h”

void app_main()
{
// 關閉 Wi-Fi 功能
esp_wifi_stop();

// 初始化藍牙功能
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
esp_bt_controller_init(&bt_cfg);
esp_bt_controller_enable(ESP_BT_MODE_BTDM);

// …
}
在這個示例中,先調用 esp_wifi_stop() 函數關閉 Wi-Fi,然后再初始化藍牙功能。需要注意的是,一旦關閉了 Wi-Fi 功能,就無法再使用 Wi-Fi 相關的 API 了。

69. 使用 ESP-IDF 開發,esp_wifi_80211_tx() 接口只能發送數據包,是否有對應的接收函數接口?

接收數據包是使用回調的方法, 如下:

esp_wifi_set_promiscuous_rx_cb(wifi_sniffer_cb);
esp_wifi_set_promiscuous(true);
另一個開源項目中有用到該方法,可參考 esp-mdf。

70. esptouch 配網失敗概率較高的原因有哪些?

CHIP: ESP32, ESP32S2, ESP32S3, ESP32C3, ESP8266
手機連接的熱點使用人數較多。

手機連接的熱點信號質量較差。

路由器不轉發組播數據。

路由器開啟了雙頻合一,手機連接到 5G 頻段。

71. ESP32 使用 Wi-Fi 時 IRAM 不足,如何優化?

可以在 menuconfig 里關閉 WIFI_IRAM_OPT、WIFI_RX_IRAM_OPT 以及 LWIP_IRAM_OPTIMIZATION 來優化 IRAM 空間,但這樣會降低 Wi-Fi 的性能。

72. ESP32 如何測試 Wi-Fi 傳輸距離?

可以使用 iperf 示例 并配置為 iperf UDP 模式,然后不斷地拉開 ESP 設備,檢測在怎樣的距離 Wi-Fi 數據傳輸速率會降至 0。

73. ESP32 使用 Wi-Fi 通信時 MTU 的長度最大能設置多大,需要在哪進行設置?

利用 Wi-Fi 通信時,MTU 的長度最大只能設置為 1500。可通過 LwIP 組件中的 netif > mtu 來修改該數值,不過不建議進行修改。

74. ESP32 模組掛機測試有時會打印類似如下 log,代表什么含義?

log 信息如下:

[21-01-27_14:53:56]I (81447377) wifi🆕<7,0>, old:<7,2>, ap:<255,255>, sta:<7,0>, prof:1
[21-01-27_14:53:57]I (81448397) wifi🆕<7,2>, old:<7,0>, ap:<255,255>, sta:<7,2>, prof:1
[21-01-27_14:53:58]I (81449417) wifi🆕<7,0>, old:<7,2>, ap:<255,255>, sta:<7,0>, prof:1
[21-01-27_14:53:59]I (81450337) wifi🆕<7,2>, old:<7,0>, ap:<255,255>, sta:<7,2>, prof:1
其中,new 后的數值表示當前主次信道;old 后的數值表示上次主次信道;ap 后的數值表示當前 ESP32 AP 的主次信道,若沒有使能 softAP 對應的值就是 255;sta 后的數值表示當前 ESP32 sta 的主次信道;prof 是 nvs 里面存儲的 ESP32 softAP 的信道。

有關次信道代表的數值,請參考 wifi_second_chan_t。

上述 log 信息表示路由器在 HT20 和 HT40 minus 之間切換,可以檢查下路由器的 Wi-Fi 頻寬設置。

75. ESP32 在 AP + STA 模式下,如何關閉 AP 模式?

關閉 AP 模式通過 esp_wifi_set_mode(wifi_mode_t mode); 函數來設置。

調用 esp_wifi_set_mode(WIFI_MODE_STA); 即可。

76. ESP32 使用 Wi-Fi 的功能后,是否 ADC2 的所有通道都不能使用了?

ESP32 在使用 Wi-Fi 的情況下,沒有被 Wi-Fi 占用的 ADC2 的引腳可以做普通 GPIO 使用。可參考官方 ADC 說明。

77. Wi-Fi 模塊如何設置國家碼?

CHIP: ESP8266 | ESP32 | ESP32 | ESP32-C3
可以通過調用 esp_wifi_set_country 接口設置國家碼。

78. 當 ESP32 用作 SoftAP 連接蘋果手機時,手機提示”低安全性 WPA/WPA2(TKIP) 并不安全。如果這是您的無線局域網,請配置路由器以使用 WPA2(AES) 或 WPA3 安全類型“,該如何解決?

IDF: release/v4.0 及以上
可以參考下面的代碼進行設置:

wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.channel = EXAMPLE_ESP_WIFI_CHANNEL,
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
.authmode = WIFI_AUTH_WPA2_PSK,
.pairwise_cipher = WIFI_CIPHER_TYPE_CCMP
},
};
WIFI_AUTH_WPA2_PSK 是 AES,也叫 CCMP。 WIFI_AUTH_WPA_PSK 是 TKIP。WIFI_AUTH_WPA_WPA2_PSK 是 TKIP+CCMP。

79. ESP32 的 Wi-Fi 模塊僅支持 2.4 GHz 頻率的帶寬,如果在進行連網配置時使用 2.4G 和 5G 多頻合一的路由器,Wi-Fi 能否配網成功?

路由器設置為多頻合一的模式(一個 Wi-Fi 賬號同時支持 2.4 GHz 和 5 GHz),ESP32 設備可以正常連接 Wi-Fi。

80. ESP32 用作 AP 模式時如何獲取連接進來的 station 的 RSSI?

可以調用接口 esp_wifi_ap_get_sta_list,參考如下代碼:

{
wifi_sta_list_t wifi_sta_list;
esp_wifi_ap_get_sta_list(&wifi_sta_list);
for (int i = 0; i < wifi_sta_list.num; i++) {
printf(“mac address: %02x:%02x:%02x:%02x:%02x:%02x\t rssi:%d\n”,wifi_sta_list.sta[i].mac[0], wifi_sta_list.sta[i].mac[1],wifi_sta_list.sta[i].mac[2],
wifi_sta_list.sta[i].mac[3],wifi_sta_list.sta[i].mac[4],wifi_sta_list.sta[i].mac[5],wifi_sta_list.sta[i].rssi);
}
}
esp_wifi_ap_get_sta_list API 獲取到的 RSSI 為一段時間內的平均值,不是實時的 RSSI。之前的 RSSI 權重為 13,新的 RSSI 的權重為 3。在 >= 100ms 時更新 RSSI,更新時需要使用舊的 rssi_avg:rssi_avg = rssi_avg*13/16 + new_rssi * 3/16。

81. ESP32 支持 FTM(Fine Timing Measurement) 嗎?

不支持,FTM 需要硬件支持,ESP32 沒有對應的硬件。

當前 ESP32-S2 和 ESP32-C3 在硬件上支持 FTM。

ESP-IDF v4.3-beta1 開始支持 FTM。

關于 FTM 的更多內容以及例程,請參考 FTM。

82. 當 ESP32 設置為 STA+AP 共存時,能否指定通過 STA 或者 AP 接口發送數據?

問題背景:

ESP32 作為 AP 默認的網段是 192.168.4.x,作為 STA 連接的路由器網段也在 192.168.4.x,PC 連接到該 ESP32 AP 并創建 tcp server,此時 ESP32 作 tcp client 無法建立到 PC 的 tcp 連接。

解決方案:

ESP32 可以指定通過 STA 或者 AP 接口發送數據,可參考例程 tcp_client_multi_net。該例程中同時使用了 Ethernet 接口和 STA 接口,可以指定接口發送數據。

有兩種方式將 socket 綁定到某個接口:

使用 netif name (使用 socket 選項 SO_BINDTODEVICE)

使用 netif local IP address (通過 esp_netif_get_ip_info() 獲取接口 IP,調用 bind() 綁定)

備注

綁定 STA 接口可以建立 ESP32 和 PC 的 tcp 連接,綁定 AP 接口無法建立 ESP32 和 PC 的 tcp 連接;

默認情況下可以建立 ESP32 到手機的 tcp 連接(手機作為 STA 接入 ESP32)。

83. ESP8266 wpa2_enterprise 如何開啟 Wi-Fi 調試功能?

使用 idf.py menuconfig 開啟 menuconfig 配置,然后配置以下參數:

menuconfig==>Component config ==>Wi-Fi ==>
[]Enable WiFi debug log ==>The DEBUG level is enabled (Verbose)
[
]WiFi debug log submodule
[] scan
[
] NET80211
[] wpa
[
] wpa2_enterprise

menuconfig==>Component config ==>Supplicant ==>
[*] Print debug messages from WPA Supplicant

84. Wi-Fi 信號格數有對應標準嗎?

CHIP: ESP8266 | ESP32 | ESP32 | ESP32-C3
對于 Wi-Fi 信號格數并沒有對應的標準,可以根據接收到的 RSSI 進行折算,比如接收到的 RSSI 范圍是 [0,-96],如果要求信號強度的格數為 5 格,那 [0~-20] 就為滿格,以此類推。

85. WFA 漏洞修復最新情況?

CHIP: ESP32 | ESP32-S2 | ESP32-C3 | ESP8266
詳情請參考樂鑫官網上 Wi-Fi 安全公告。

86. Wi-Fi 連接失敗時產生的錯誤碼代表什么?

CHIP: ESP32
Wi-Fi 連接過程中出錯都會讓狀態轉移到 init,并且 log 里會有 16 進制數表示,例如 wifi:state, auth-> init(200)。前兩位表示原因,后兩位表示收到或者發送的管理幀的類型代碼。常見的幀類型代碼有 00 (什么都沒收到,表示超時)、A0(disassoc)、B0(auth)和 C0(deauth)。

前兩位表示的原因可以從 WiFi Reason Code 里查看。后兩位可以直接從管理幀代碼里查看。

87. 使用 ESP32 Release/v3.3 版本的 SDK 下載 Station 例程,無法連接不加密的 Wi-Fi,是什么原因?

例程下默認是連接加密模式的 AP,如下設置:

.threshold.authmode = WIFI_AUTH_WPA2_PSK,
若連接不加密的 AP,需將以下參數改為 0,

.threshold.authmode = 0,
AP 模式選擇說明可參見 esp_wifi_types。

88. ESP32-S2 芯片,Wi-Fi 通信的物理層最大速率是多少?

ESP32-S2 Wi-Fi 通信的物理層最大速率為 150 Mbps。

89. ESP 模塊是否支持 EAP-FAST?

:CHIP: ESP32 | ESP32-S2 | ESP32-C3 :

支持,請參考 wifi_eap_fast demo。

90. ESP 模塊支持 WiFi NAN (Neighbor Awareness Networking) 協議嗎?

CHIP: ESP8266 | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3
不支持。

91. 使用 ESP32,ESP-IDF 版本為 release/v3.3, 配置路由器時,是否有 API 可以直接判斷輸入的密碼不正確?

沒有 API 可直接判斷密碼錯誤,依據 Wi-Fi 協議標準,當密碼出錯時,路由器并不會明確告訴 station 四次握手是由于密碼出錯了。正常情況下獲取密碼是 4 個包(1/4 幀、2/4 幀、3/4 幀、4/4 幀),當密碼正確時 AP 會發送 3/4 幀,而當密碼錯誤時 AP 不會發送 3/4 幀而是會重發 1/4 幀。 但是當 AP 發送了 3/4 幀,但由于某種原因而在空氣中丟掉時,AP 也會重發 1/4 幀。 因此,對于 station 來說,無法準確區分這兩種情況,最終都是上報 204 錯誤,或者 14 錯誤。

可參考 Wi-Fi 原因代碼。

92. 基于 ESP-IDF v4.4 版本的 SDK 測試 ESP32 的 Station 例程,如何支持 WPA3 加密模式?

開啟 menuconfig → Component config → Wi-Fi → Enable WPA3-Personal 的配置;

在應用程序中設置 pmf_cfg 里 capable = true ;

可參考 Wi-Fi Security 說明。

93. ESP32 如何加快 Wi-Fi 的連接速度?

如下措施均可以加快 ESP32 的 Wi-Fi 連接速度:

設置 CPU 頻率到最大,可以加快密鑰計算速度。除此外還可以設置 FLASH 參數為 QIO、80 MHz,代價是增加功耗。

關閉 CONFIG_LWIP_DHCP_DOES_ARP_CHECK,可以大幅降低獲取 IP 的時間,代價是不檢查局域網中是否有 IP 地址沖突。

打開 CONFIG_LWIP_DHCP_RESTORE_LAST_IP,保存上次獲得的 IP 地址,dhcp start 時直接發送 dhcp request,省去 dhcp discover 過程。

固定掃描信道。

94. ESP32 WPA2 企業級認證是否支持 Cisco CCKM 模式?

目前不支持該模式,雖然 esp_wifi_driver.h 中的枚舉有 WPA2_AUTH_CCKM,但是目前不支持。

95. 使用 wpa2_enterprise(EAP-TLS 方式),客戶端證書最大支持長度是多少?

最大支持 4 KB。

96. ESP8089 是否支持 Wi-Fi Direct 模式?

ESP8089 支持 Wi-Fi Direct 模式,但 ESP8089 只能使用默認的固定的程序,無法進行二次開發。

97. 環境中有很多 AP,ESP32 如何連接 RSSI 不低于配置閾值的 AP?

在 ESP32 staion 模式下,有一個 wifi_sta_config_t 的結構體,下面有 2 個變量,分別是 sort_method 和 threshold 變量,通過給這兩個變量賦值來設置 RSSI 閾值。

98. ESP32 Wi-Fi 出現信標丟失 (beacon lost) 且在 6 秒鐘之后給 AP 發 5 個探測請求 (probe request),此時 AP 沒回應就會導致斷開連接,這個 6 秒鐘可以配置嗎?

用 API esp_wifi_set_inactive_time 即可配置。

99. ESP32 Wi-Fi 可以使用 PSRAM 嗎?

關于 Wi-Fi 使用 PSRAM 的信息,請參考 使用 PSRAM。

100. [Connect] ESP32 系列產品如何從軟件、硬件方面來排查 Wi-Fi 連不上路由器的問題?

可以按以下步驟來排查問題:

首先通過 Wi-Fi 錯誤碼 判斷可能的失敗原因。

然后,當在 ESP32 連接不上路由器時,嘗試連接其他設備到該路由器來定位是路由器還是 ESP32 問題:

如手機也無法連上路由器,請排查路由器是否存在問題。

如手機可以正常連上路由器,請排查 ESP32 是否存在問題。

排查路由器問題的步驟:

查看路由器是否處于斷電重啟的階段,在此階段將無法正常連接此路由器,需要等待一段時間至路由器初始化完成后才能正常連接。

查看配置的 SSID 和密碼是否與路由器一致。

查看在配置路由器為 OPEN 模式后是否能正常連上。

查看是否能正常連上其他路由器。

排查 ESP32 問題的步驟:

排查 ESP32 硬件部分:

查看是否是特定的 ESP32 才會出現此問題,如僅有固定的少許 ESP32 出現此問題,統計出現問題的 ESP32 的概率并比較它們和正常 ESP32 的硬件差異。

排查 ESP32 軟件部分:

查看使用 ESP-IDF 里的 station 示例 是否能正常連上 Wi-Fi,此處示例里默認存在重連機制,可以同步觀察在幾次重連后是否能正常連上 Wi-Fi。

查看配置的 SSID 和密碼是否與路由器一致。

查看在配置路由器為 OPEN 模式后是否能正常連上。

查看在 Wi-Fi 連接前的代碼邏輯里額外調用 API esp_wifi_set_ps(WIFI_PS_NONE) 后是否能正常連上 Wi-Fi。

如進行上述所有步驟仍然沒有定位到問題,建議進行 Wi-Fi 抓包來進一步分析,可參考 樂鑫 Wireshark 使用指南。

101. ESP32 連上路由器后會每 5 分鐘會反復打印幾次 W (798209) wifi:idx:0 (ifx:0, f0:2f:74:9b:20:78), tid:0, ssn:154, winSize:64 與 W (798216) wifi:idx 并明顯發現 ESP32 的功耗增大,這是什么原因?

首先此日志往往沒有問題,這里是 Wi-Fi 塊確認機制的相關日志,ba-add 表示 ESP32 收到路由器的添加塊確認請求幀, ba-del 表示 ESP32 收到路由器的刪除塊確認請求幀。打印頻繁說明路由器一直在發包。

如果是每五分鐘定期觀察到此日志,往往是路由器在進行組秘鑰更新,可以通過以下步驟來進一步驗證:

在 wpa_supplicant_process_1_of_2() 里進行日志打印來確認是不是每 5 分鐘調用了此函數來配合路由器每五分鐘進行組秘鑰更新。

查看路由器的 Wi-Fi 配置界面是否存在 組秘鑰更新時間 選項并被配置為 5 分鐘。

102. ESP32 使用函數 esp_wifi_config_80211_tx_rate() 為何無法固定 Wi-Fi 發送速率來保持穩定傳輸?

esp_wifi_config_80211_tx_rate() 函數用來配置 esp_wifi_80211_tx() 這個函數的發送速率。

如要設置并固定 Wi-Fi 的發送速率,請使用函數 esp_wifi_internal_set_fix_rate。

103. ESP32 做 station 連接路由器時發現沒有正常獲取到 IP,如何調試?

打開 lwIP 里 DHCP 的調試日志,在 ESP-IDF menuconfig 配置 Component config > LWIP > Enable LWIP Debug(Y) 和 Component config -> LWIP > Enable DHCP debug messages(Y)。

早期 IDF 版本沒有上述選項時,請參考 lwipopts.h 里的 806 到 807 行,將這兩行代碼里的 LWIP_DBG_OFF 都改成 LWIP_DBG_ON,如下所示。

#define DHCP_DEBUG LWIP_DBG_ON
#define LWIP_DEBUG LWIP_DBG_ON

104. ESP32 做 softAP 時發現連接它的 station 沒有正常獲取到 IP,如何調試?

請將 dhcpserver.c 中的 #define DHCPS_DEBUG 0 修改為 #define DHCPS_DEBUG 1,即可打開 lwIP 里 DHCP 的調試日志進調試。

105. 在 ESP-IDF menuconfig 配置 Component config > PHY > Max Wi-Fi TX power(dBm) 來調整 Wi-Fi 發射功率后實際功率如何?比如設置 17 dBm 時實際最大發射功率是多少?

對于 ESP32,此時的實際最大發射功率為 16 dbm,具體請參考 esp_wifi_set_max_tx_power() 函數描述的映射規則。

對于 ESP32-C3,在 menuconfig 中配置的最大發射功率值即為實際最大功率值。

106. ESP-IDF 目前支持連接 UTF-8 編碼的中文 SSID 路由器,是否有方法連接到編碼為 GB2312 的中文 SSID 路由器?

此時讓 ESP 設備端的編碼方式和路由器保持一致即可,比如這種情況下讓 ESP 設備端也采用基于 GB2312 編碼的中文 SSID。

107. ESP32 在連接上路由器后發現在空閑狀態下功耗偏高,大約有 60 mA 的平均電流,如何排查?

此時建議進行 Wi-Fi 抓包來進一步分析,可參考 樂鑫 Wireshark 使用指南。抓包后查看設備發送的 NULL data 包里是否包含 NULL(1),其中若每 10 秒發送一次 NULL(1) 則說明是和路由器在進行保活交互。

也可以查看 Wi-Fi 抓包結果里的 beacon 包中 TIM(Traffic Indication Map) 字段,如果 Traffic Indication 等于 1,說明存在廣播包緩存 (Group Frames Buffered),ESP32 在此時會打開 RF,導致功耗增高。

108. 當 ESP 終端產品需要銷往全球時,對應的 Wi-Fi 國家碼要如何配置?

需要在不同國家的產品中,設置不同的 Wi-Fi 國家碼。

默認的國家碼配置可以用于大多數國家,但不能兼容一些特殊情況。默認的國家碼為 CHINA {.cc=“CN”, .schan=1, .nchan=13, policy=WIFI_COUNTRY_POLICY_AUTO},在 ESP-IDF v5.0 后,默認為 “01” (world safe mode) {.cc=“01”, .schan=1, .nchan=11, .policy=WIFI_COUNTRY_POLICY_AUTO})。由于 12 和 13 信道默認為被動掃描,所以不會違反大多數國家的法規。同時 ESP 終端產品連上路由器后國家碼會自動根據路由器改變。斷開路由器后,會自動配置為默認的國家碼。

備注

此時可能存在一個問題:如果路由器隱藏了 SSID,且于 12 或 13 信道,ESP 終端產品就掃描不到路由器。此時需要設置 policy=WIFI_COUNTRY_POLICY_MANUAL 來讓 ESP 終端產品在 12、13 信道進行主動掃描。

對于其他特殊的國家,比如日本支持 1-14 信道,14 信道只支持 802.11b。ESP 終端產品在默認配置下,無法連接 14 信道的路由器。

109. 進行 iperf 測試時發現一段時間后速率會下降甚至中斷發射,這是什么原因,需要如何解決?

可能原因:

網絡環境不好

電腦或手機與 ESP32-S2 或 ESP32-S3 softAP 的兼容性問題,導致斷線或者吞吐速率下降。

解決方法:

針對第一種情況,嘗試更換網絡環境或者在屏蔽箱里進行測試。

針對第二種情況,關閉 menuconfig > Component config > Wi-Fi > WiFi AMPDU RX 選項,如果還存在斷線現象,關閉 menuconfig > Component config > Wi-Fi > WiFi AMPDU TX 選項。

備注

AMPDU 代表聚合 MAC 協議數據單元,是 IEEE 802.11n 標準中用來提高網絡吞吐量的技術。

關閉 WiFi AMPDU RX 表示不支持接收 AMPDU 包,此時會影響設備的 RX 性能。

關閉 WiFi AMPDU TX 表示不支持發送 AMPDU 包,此時會影響設備的 TX 性能。

110. 基于 ESP-IDF v5.0 版本的 SDK 創建 ESP32-S3 設備作為 Wi-Fi AP 模式,當手機連接上 AP 后,會頻繁打印如下日志,是什么原因?

? (13964) wifi:idx
? (13964) wifi:idx:2 (ifx:1, 48:2c:a0:7b:4e:ba), tid:0, ssn:5, winSize:64
打印此日志是因為一直在創建、刪除 A-MPDU,此打印只是輔助作用,不影響通信。若需要屏蔽該日志,可以在 Wi-Fi 初始化程序之前加上如下代碼進行測試:

esp_log_level_set(“wifi”, ESP_LOG_ERROR);

111. ESP32 的網口 (LAN8720) 與 Wi-Fi (Wifi-AP) 能否共存?

可以共存的。將兩個連接的檢測事件寫成一個就可以實現共存。

112. ESP32 在弱網環境或干擾環境下,Wi-Fi 連上以后獲取 IP 地址比較慢如何優化?

可以在 Wi-Fi start 之后先關閉 Modem-sleep esp_wifi_set_ps(WIFI_PS_NONE);, 在獲取到 IP_EVENT_STA_GOT_IP 事件后再開啟 Modem-sleep。

對于斷開重連情況,可以在連接之前先主動關閉 Modem-sleep, 獲取到 IP_EVENT_STA_GOT_IP 事件后再開啟 Modem-sleep。

注意:該優化對于 Wi-Fi/BT 共存場景不適用。

113. ESP32/ESP32-S2/ESP32-S3 工作在 SoftAP 模式時,與其他廠商手機、PC 等進行通信時容易出現斷連該如何優化?

建議關閉 menuconfig 里的 WiFi AMPDU RX 和 WiFi AMPDU TX 選項。

114. ESP32 Wi-Fi TX power 的取值范圍是多少?

ESP32 Wi-Fi TX power 的取值范圍為 2-20 dBm。在 ESP-IDF 中,可以使用函數 esp_wifi_set_max_tx_power() 設置 TX power 的最大值,同時也可以使用 esp_wifi_get_max_tx_power() 函數獲取當前系統所支持的最大 TX power 值。

需要注意的是,設置 TX power 過高可能會影響系統的穩定性和電池壽命,同時也可能違反國家和地區的無線電規定,因此應該謹慎使用。詳細請參考 esp_wifi_set_max_tx_power API。

115. 使用 ESP32 時如何獲取 Wi-Fi RSSI 值?

在 ESP-IDF release/v4.1 中,當 ESP32 作為 station 使用時,要獲取連接到的 AP 的 RSSI,可以使用以下代碼示例:

wifi_ap_record_t ap_info;
if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
int rssi = ap_info.rssi;
// 處理 rssi
}
wifi_ap_record_t 結構體中包含了連接到的AP的信息,包括 SSID 、BSSID 、頻道、加密方式等, RSSI 字段則表示 AP 的RSSI 值。調用 esp_wifi_sta_get_ap_info() 函數即可獲取該結構體信息。 API 說明參見 esp_err_t esp_wifi_sta_get_ap_info(wifi_ap_record_t *ap_info)。

116. ESP32 支持 WPA3 企業版嗎?

ESP32 支持 WPA/WPA2/WPA3/WPA2-Enterprise/WPA3-Enterprise/WAPI/WPS 和 DPP Wi-Fi 功能。有關信息,請參考ESP32 Wi-Fi 功能列表 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html#esp32-wi-fi-feature-list>__。

在 esp-idf release/v5.0 版本 SDK 中,我們提供了 wifi_enterprise 示例。 在 ESP-IDF 中,支持設置 WPA3-Enterprise 模式進行測試。可通過如下步驟進行配置 idf.py menuconfig > Example Configuration > Enterprise configuration to be used > WPA3_ENT。

117. ESP 模組支持 WAPI (Wireless LAN Authentication and Privacy Infrastructure) 功能嗎?

支持,請參考 Wi-Fi 功能列表。

118. 使用 ESP32 作為 Wi-Fi Station 連接路由器,如何增加掃描路由器的時間?

在 ESP32 中,默認情況下 1 ~ 11 信道為主動掃描,12 ~ 13 信道為被動掃描。主動掃描和被動掃描所需時間不同,詳情可參考 Wi-Fi 掃描配置。主動掃描的默認時間是每個信道 120 ms,被動掃描為每個信道 360 ms。如果希望增加掃描時間,可在 esp_wifi_start() 函數之前,調用如下函數來增加掃描路由器的時間:

extern void scan_set_act_duration(uint32_t min, uint32_t max);
extern void scan_set_pas_duration(uint32_t time);
scan_set_act_duration(50, 500);
scan_set_pas_duration(500);
或者可以直接通過修改 wifi_ap_record_t 結構體里的值修改主動掃描和被動掃描的時間

備注

由于一個 beacon 的時間間隔一般在 102.4 ms,主動掃描的時間不宜小于這個時間,盡量在 120 ms 及以上。

119. ESP32 是否支持 LDPC?

支持。ESP32 已經在驅動中實現 LDPC,無需額外配置或調用。

120. ESP 模組支持 WAPI AS 嗎?

不支持。WAPI 有兩種鑒別方式,即證書鑒別方式和預共享密鑰鑒別方式。目前,ESP 模組只支持預共享密鑰鑒別方式 (WAPI-PSK),而 WAPI AS 則是用于證書鑒別方式。

121. 當基于 UDP 進行傳輸測試時,出現 Error occurred during sending: errno 12 時應該怎么處理?

返回值是 12 表示空間不足,造成這個的原因是上下層處理速度不匹配。上層應用不斷產生大量的數據并發給 UDP 協議進行傳輸,但是底層網絡或接收端的能力無法跟上發送速度,就會導致數據堆積空間不足。

處理這種問題的方法是可以對這個返回值進行處理,比如收到這個返回值后上層進行重發,或者上層添加 delay 來延緩發送速度。

122. ESP 模組支持 Wi-Fi HaLow 功能嗎?

不支持,Wi-Fi HaLow 基于 802.11ah 協議。

123. 在 ESP32 Wi-Fi Scan 模式下如何實現不發送任何射頻波?

使用 esp_wifi_scan_start() API 將 ESP32 設置為被動掃描模式 WIFI_SCAN_TYPE_PASSIVE 即可。

124. ESP32-C6 開啟 Wi-Fi AP 模式時,默認使用的 802.11 Wi-Fi 協議類型是什么?

ESP32-C6 開啟 Wi-Fi AP 模式時,默認使用 802.11b/g/n 混合模式。可通過 esp_wifi_set_protocol() 設置協議類型。

125. ESP32 Wi-Fi Station 無法連接上 2.4 GHz Enhanced Open mode 模式的 Wi-Fi 熱點,是什么原因?

僅在 release/v5.2 及以上版本的 ESP-IDF SDK 上支持連接 2.4 GHz 的 Enhanced Open mode 模式的 Wi-Fi 熱點。并且在軟件上需要開啟 Component config > ``Wi-Fi > Enable OWE STA 配置選項,請參見 Wi-Fi Enhanced Open 說明。

126. 如何判斷連上的 Wi-Fi 是 Wi-Fi 4 還是 Wi-Fi 6?

可以使用 esp_wifi_sta_get_negotiated_phymode(wifi_phy_mode_t *phymode) API 來得到當前連接的 station 的模式。以下是使用示例:

wifi_phy_mode_t phymode;
esp_wifi_sta_get_negotiated_phymode(&phymode);
printf(“111=%d\n”,phymode);
如果打印的值是 3,則表明用 Wi-Fi 4 和 station 建立了連接,如果打印的值為 5,則表明用 Wi-Fi 6 和 station 建立了連接。

127. ESP32-S3 支持 AP 和 STA 同時工作嗎?

支持,參考例程 softap_sta。

128. ESP Wi-Fi 模塊在 SoftAp 模式下支持省電機制嗎?

目前暫不支持該功能。

129. ESP32S3 FTM 支持最大測距帶寬能達到多少呢?

最大測距帶寬支持到 40 MHz。

130. ESP 芯片支持一個 STA 同時和多個 AP 進行 FTM 嗎?

不支持,STA 一次只能對一個 AP 執行 FTM。

131. 在 WiFi Station 模式下,當路由器同時開啟 WiFi 4 和 WiFi 6 模式時,ESP32-C6 將使用哪種 WiFi 模式與路由器建立連接?

ESP32-C6 將優先使用 WiFi 6 與路由器建立連接。

132. 在 WiFi AP 模式下,ESP32-C2 系列產品最多支持幾個 WiFi Station 設備連接?

由于硬件限制,ESP32-C2 在 WiFi AP 模式下最多支持四個 WiFi Station 連接。

不同型號的芯片在 WiFi AP 模式下支持的最大連接數不一樣,詳情請參閱 esp-idf/components/esp_wifi/include/esp_wifi_types.h。

133. ESP32 支持 WPA3 WiFi AP 模式嗎?

支持。ESP-IDF v5.1 及以上版本支持 WPA3 WiFi AP 模式,參見 ESP-IDF v5.1 Release 中的說明。

134. ESP 芯片在 SoftAP 模式下支持 Short GI 嗎?

目前暫不支持該功能。

135. STA 和 AP 是否需要先建立連接才能執行 FTM?

不需要建立連接,STA 可以直接通過 AP 啟動 FTM。建議先掃描 AP,確認其是否支持 FTM 應答模式。具體操作可以參考 esp-idf/wifi 目錄下的 FTM 示例。

136. ESP 芯片在 SoftAP 模式下支持 uAPSD 嗎?

uAPSD 是一種 Wi-Fi 功能, 可在低周期性滯后時間敏感的通信模式(如 VoIP)中為客戶端節約功耗。ESP 芯片目前不支持該功能。

本文來源為樂鑫網站。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44741.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自定義函數---隨機數系列函數

大家有沒有發現平常在寫隨機數的時候&#xff0c;需要引入很多的頭文件&#xff0c;然后還需要用一些復雜的函數&#xff0c;大家可能不太習慣&#xff0c;于是我就制作了一個頭文件 // random_number.h #ifndef RANDOM_NUMBER_H // 預處理指令&#xff0c;防止頭文件被重復包含…

六款領先的電腦監控軟件系統(哪些電腦軟件可以監控電腦)

在當今信息時代&#xff0c;企業對數據安全和員工生產力的關注度越來越高。電腦監控軟件系統成為企業管理的重要工具&#xff0c;幫助企業確保信息安全、提高工作效率。本文將介紹幾款領先的電腦監控軟件系統&#xff0c;以便企業選擇最適合的解決方案。固信電腦監控軟件 可免費…

如何在SQLServer中更改端口

在SQL Server中更改端口通常涉及SQL Server配置管理器的使用&#xff0c;以下是一個詳細的步驟指南&#xff1a; 一、打開SQL Server配置管理器 通過開始菜單&#xff1a;點擊“開始”菜單&#xff0c;搜索“SQL Server配置管理器”并打開它。通過運行窗口&#xff1a;按Win …

log4j2的日志框架(詳細,springboot和異步日志的實現)

目錄 log4j2的介紹 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的進階--異步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介紹 Apache Log4j 2是對Log4j的升級版&#xff0c;參考了logback的一些優秀的設計&#xff0c;并且修復了一些問題&#xff0c;因此帶 來…

Go-知識測試-測試參數

Go-知識測試-測試參數 1. -args2. -json3. -o4. -bench5. -benchtime6. -cpu7. -count8. -failfast9. -list10. -parallel11. -run12. -timeout13. -v14 -benchmem 1. -args 指示go test 把-args 后面的參數帶到測試中去。具體的測試函數會根據此參數來控制測試流程。 -args后…

主機安全-進程、命令攻擊與檢測

目錄 概述反彈shell原理nc/dev/xxx反彈shell下載不落地反彈Shell各種語言反彈shell linux提權sudosuid提權mysql提權 Dnslog參考 概述 本文更新通過在主機&#xff08;不含容器&#xff09;上直接執行命令或啟動進程來攻擊的場景。檢測方面以字節跳動的開源HIDS elkeid舉例。每…

磁感應強度檢測模塊使用教程

目錄 一、磁感應強度檢測模塊(AT 協議版本、Modbus 協議版本)1、參數2、報警引腳 二、AT版本1、接線說明2、AT 指令 三、Modbus 版本1、接線說明2、Modbus 指令格式3、Modbus 指令 一、磁感應強度檢測模塊(AT 協議版本、Modbus 協議版本) 圖1 正面 圖2 背面 AT 協議版本和 Modb…

Letter Exchange

這道題目看官方題解就好了&#xff0c;這個轉換圖論挺顯然的 證明一下為什么最后一定是 顯然練完貶值后圖只能長成這個樣子 在消掉長度為\(2\)的環后&#xff0c;如果說圖沒邊了&#xff0c; 那么顯然就不用交換了&#xff0c;否則的話我們任取一條邊 那么對于\(2\)號點來說&am…

韋東山嵌入式linux系列-驅動進化之路:總線設備驅動模型

1 驅動編寫的 3 種方法 以 LED 驅動為例 1.1 傳統寫法 使用哪個引腳&#xff0c;怎么操作引腳&#xff0c;都寫死在代碼中。 最簡單&#xff0c;不考慮擴展性&#xff0c;可以快速實現功能。 修改引腳時&#xff0c;需要重新編譯。 應用程序調用open等函數最簡單的方法是驅動…

(深度估計學習)Depth Anything V2 復現

Depth Anything V2 復現 一、配置環境二、準備數據1. 權重文件2. 訓練數據 三、Test四、Train 代碼&#xff1a;https://github.com/DepthAnything/Depth-Anything-V2 一、配置環境 在本機電腦win跑之后依舊爆顯存&#xff0c;放到服務器跑&#xff1a;Ubuntu22.04&#xff0c…

使用Zabbix進行服務監控:構建高效穩定的IT服務管理平臺

使用Zabbix進行服務監控&#xff1a;構建高效穩定的IT服務管理平臺 在當今的數字化時代&#xff0c;IT服務管理&#xff08;ITSM&#xff09;對于確保企業IT系統的穩定性和性能至關重要。服務監控是ITSM的重要組成部分&#xff0c;可以幫助企業實時了解IT系統的運行狀況&#…

微調Qwen2大語言模型加入領域知識

目錄 試用Qwen2做推理安裝LLaMA-Factory使用自有數據集微調Qwen2驗證微調效果 試用Qwen2做推理 參考&#xff1a;https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html from transformers import AutoModelForCausalLM, AutoTokenizer device "cuda…

極速構建的藝術:Kylin中Cube的并行構建實踐

極速構建的藝術&#xff1a;Kylin中Cube的并行構建實踐 引言 Apache Kylin是一款開源的分布式分析引擎&#xff0c;專為處理大規模數據集的即時查詢而設計。Kylin通過構建數據立方體&#xff08;Cube&#xff09;來優化查詢性能。隨著數據量的不斷增長&#xff0c;Cube的構建…

9.6 柵格圖層符號化唯一值著色渲染

文章目錄 前言多波段彩色渲染唯一值著色QGis設置為唯一值著色二次開發代碼實現唯一值著色 總結 前言 介紹柵格圖層數據渲染之唯一值著色渲染說明&#xff1a;文章中的示例代碼均來自開源項目qgis_cpp_api_apps 多波段彩色渲染唯一值著色 以“with_color_table.tif”數據為例…

硅谷甄選4(項目主體)

1.路由配置 1.1路由組件的雛形 src\views\home\index.vue&#xff08;以home組件為例&#xff09; 安裝插件&#xff1a; 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通過vue-router插件實現模板路由配置 import { createRouter, createWebHashHistory } fro…

B站學習Java路線

Java 基礎 【零基礎 快速學Java】韓順平 零基礎30天學會Java JVM 尚硅谷宋紅康JVM全套教程&#xff08;詳解java虛擬機&#xff09; Java 并發 JUC

react-router實現路由攔截,useLocation,useNavigate鉤子

路由攔截 react-router中沒有直接給出攔截路由的方法&#xff0c;需要手動的去監聽路由的變化來攔截路由 路由攔截的要點&#xff1a; 能夠識別出目標路由和原始路由&#xff08;區分跳轉前和跳轉后&#xff09;能夠在跳轉時&#xff08;跳轉前或者跳轉后&#xff09;執行一些…

Python redis獲取的結果是字節不是字符串

Python redis獲取的結果是字節不是字符串 pool redis.ConnectionPool(hostlocalhost,port6379, passwordREDIS_PWD, decode_responsesTrue)需要指明給結果解碼decode_responsesTrue才能返回字符串

圖論基礎概念(詳細講解)

今天&#xff0c;我們講解一下圖論的概念&#xff0c;首先我們知道圖是一個什么東西。 圖你可以理解成一個網絡系統&#xff0c;兩個節點之間可能會有邊&#xff0c;邊鏈接兩個節點&#xff0c;可能是有向&#xff08;就比如說a只能往b,或者b只能往c)&#xff0c;可能是無向&a…

Vulnhub靶場 | DC系列 - DC1

https://www.vulnhub.com/series/dc,199/ 環境搭建 靶機鏡像下載地址&#xff1a;https://www.vulnhub.com/entry/dc-1,292/&#xff1b;需要將靶機和 kali 攻擊機放在同一個局域網里&#xff1b;本實驗kali 的 IP 地址&#xff1a;192.168.10.146。 滲透測試 1. 信息收集 …