文章更新版本 | 時間 | 更新說明 | 修訂人 |
---|---|---|---|
V0.1 | 發佈於2020-04-25 | 初始版本 | libo |
一、Wi-Fi 性能
ESP32 Wi-Fi 性能
項目 | 參數 |
---|---|
Mode | Station, AP, Coexistence |
Protocol | IEEE-802.11B, IEEE-802.11G, IEEE802.11N 支持軟件切換 |
Safety | WPA/WPA2/WPA2-Enterprise and WPS |
Keyfeature | AMPDU, HT40, QoS |
Distance | 1 km with Espressif-specific protocol |
Speed | 20 MBit/sec TCP throughput, 30 MBit/sec UDP |
ESP32-S2 Wi-Fi 性能(需要驗證和補充)
項目 | 參數 |
---|---|
Mode | Station, AP, Coexistence |
Protocol | IEEE-802.11B, IEEE-802.11G, IEEE802.11N 支持軟件切換 |
Safety | WPA/WPA2/WPA2-Enterprise and WPS |
Keyfeature | AMPDU, HT40, QoS |
Distance | 1 km with Espressif-specific protocol |
Speed | 20 MBit/sec TCP throughput, 30 MBit/sec UDP |
二、Wi-Fi 編程框架
- 應用層調用 Wi-Fi driver APIs 進行 Wi-Fi 初始化。
- Wi-Fi 可被看成一個獨立工作的黑箱,當事件發生時向默認事件循環 default event loop
發佈event
,應用程序可根據需求編寫handle
程序,進行註冊。 - 網絡接口組件 esp_netif 提供了一系列
handle
程序,與WiFi驅動event
默認關聯,例如 ESP32 作爲 AP,當有用戶接入時,esp_netif 將自動啓動 DHCP 服務。
注意:Wi-Fi 初始化之前應該使用
WIFI_INIT_CONFIG_DEFAULT
獲取初始化配置結構體,對該結構體進行個性化配置,然後進行初始化工作。防止結構體成員未初始化導致的問題,特別是 IDF 更新添加了新的結構體成員的時候。
2.1 menuconfig 可配置項
-
修改 Wi-Fi Buffer 以節約空間
Wi-Fi初始化之後,會靜態分配一部分內存空間,如果用戶對內存比較敏感,可以通過減小Static RX Buffer
節約最大6400 Bytes 空間,通過將Static TX Buffer
修改爲Dynamic TX Buffer
節約 (16 * 1600-32)Bytes左右空間。具體可參考:Wi-Fi Buffer Configure -
將 WiFi 配置信息保持到 NVS 中
通過使能 Wi-Fi NVS Flash,Wi-Fi 驅動將會保存配置信息到 NVS 中,下次啓動可以跳過 WiFi配置階段。用戶也可關閉該選項,自行保存配置信息。 -
開啓 AMPDU 提高網絡吞吐量
AMPDU默認開啓。 802.11n標準中採用A-MPDU聚合幀格式,即將多個MPDU聚合爲一個A-MPDU,只保留一個PHY頭,刪除其餘MPDU的PHY頭,減少了傳輸每個MPDU的PHY頭的附加信息,同時也減少了ACK幀的數目,從而降低了協議的負荷,有效的提高網絡吞吐量。
802.11n協議定義了一個新的MAC特性A-MSDU,該特性實現了將多個MSDU組合成一個MSDU發送,與A-MPDU類似,通過聚合,A-MSDU減少了傳輸每個MSDU的MAC頭的附加信息,提高了MAC層的傳輸效率。802.11n支持在物理層的優化,提供短間隔功能。原11a/g的GI時長800us,而短間隔Short GI時長爲400us,在使用Short GI的情況下,可提高10%的速率。
ESP32-S2 supports receiving AMSDU but doesn’t support transmitting AMSDU. The transmitting AMSDU is not necessary since ESP32-S2 has transmitting AMPDU.
三、Wi-Fi 調試
提升信號質量
- 將默認 HT40 修改爲固定 HT20,可減少外界干擾,但理論傳輸率從 150Mbps 下降爲 72Mbps(raw PHY data rate)。
Wireshark 網絡分析工具
Espressif Wireshark User Guide
錯誤碼監測
錯誤碼定義在
esp_err.h
文件中
ESP-IDF 提供了默認的錯誤碼監測宏 ESP_ERROR_CHECK
可用於監測錯誤位置和信息,但是建議用戶自定義監測宏,用於實現錯誤信息的自動化處理。
錯誤類型 | 處理方法 |
---|---|
ESP_OK | 下一步 |