supakeen 的主页

ESP32 是一款流行的微控制器,常用于 DIY 家庭自动化、传感器以及各种你可能想在家中处理的小玩意儿。 它是备受推崇的 ESP8266 的继任者,后者已经进入了我们许多 WiFi 连接的设备中(认真地,打开一个设备,你很有可能会发现它)。

在使用 Arduinoesp-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 年。保留所有权利。