ESP32 WiFi 使用玄学
supakeen 的主页
ESP32 是一款流行的微控制器,常用于 DIY 家庭自动化、传感器以及各种你可能想在家中处理的小玩意儿。 它是备受推崇的 ESP8266 的继任者,后者已经进入了我们许多 WiFi 连接的设备中(认真地,打开一个设备,你很有可能会发现它)。
在使用 Arduino 和 esp-idf 框架完成了相当多的基于 ESP32 的项目后,我开始注意到已部署设备的一些特殊性(用花哨的措辞来说,就是我电气柜里的那个,它_应该_将用电数据发送到某个地方,以及房子周围的各种传感器板,主要是 Sebastius 制作的 优秀 的 Snuffelaar,固件由 Juerd 编写)。
似乎我的一些基于 ESP32 的板经常失去连接。 最初,我认为这是由于我使用的糟糕的电源(最便宜的 USB 电源,来自我家周围的各种配件)。 在将这些电源换成更容易获得且质量可能更好的 Ikea chargers 后,问题仍然存在。
在我的本地黑客空间 RevSpace 向其他人询问经验时,似乎表明人们在他们的基于 ESP32 的项目中也看到了类似的情况。 但并非每个人都有这些问题。 渐渐地,我开始收集越来越多关于如何保持这些微控制器连接到互联网的“玄学”。 以下是我最喜欢的几个,我已经应用了所有这些,虽然我没有逐一测试它们,但它们的组合确保了我的 SSID 上的稳定连接。
虽然这些解决方法与在你 ESP32 周围放置一个 CR2023 电池的六边形,同时对着它吟唱 802.11ax 规范相去甚远,但它们没有任何基于我所做的任何_实际_研究的基础。 将这些视为 ESP32 失去 WiFi 连接的传闻解决方法。
关闭 ESP32 上的省电功能
ESP8266 的 WiFi 调制解调器堆栈从来没有任何省电功能,但 ESP32 有。 对我来说,这很可能是罪魁祸首,因为在某些网络配置中,或许与某些无线电结合使用,省电功能会做一些使其停止与网络交互的事情。
在您个人手工制作的固件中,您可以使用以下代码,它应该在 esp-idf 和 Arduino 中工作(据我所知):
esp_wifi_set_ps(WIFI_PS_NONE)
对于基于 ESPHome 的项目,您可以添加:
wifi:
power_save_mode: NONE
将您的 AP 设置为使用 20 Mhz 宽的信道
如果您有花哨的网络硬件,那么您很可能可以配置为您的 ESP32 服务的网络的信道宽度。 根据人们和互联网告诉我的,您_应该_将您的板使用的 2.4 Ghz 网络的带宽设置为 20 Mhz,而不是 40,不是 60,绝对不是自动。
将您的 ESP32 绑定到单个 AP
似乎当 ESP32 连接时,它会直接连接到它看到的第一个接入点。 无论该接入点是否是您将其绑定的那个。 这可能会导致连接不良,特别是因为我没有真正观察到 ESP32 移动到其他接入点。 如果您的网络硬件允许,您应该将设备绑定到最近的那个。
到目前为止,这些都市传说似乎让我的问题成为了过去。 大约一两周内,我没有设备从网络中掉线,而它们过去每天都会掉线多次。 我计划放弃我的应用程序级别的 keep-alives(仍然是个好主意,我将在另一篇文章中介绍它们),因为它们似乎根本不再必要了。
我希望这些对任何人都有帮助,并希望 ESP32 的精神也认为您的网络值得。
版权所有 2025 年。保留所有权利。