我们可以使用 OTA 更新来无线更新固件。但要更新固件,esp32 设备需要位于本地网络上。 有什么方法或来源可以更新不在本地网络上的设备的固件吗?
还有一种通过互联网更新 ESP32 固件的方法,无需任何额外的更新服务器(具有公共和静态 IP 地址),也无需端口转发。它基于 Husarnet p2p VPN 服务。
是的,绝对如此。 OTA 不要求设备位于本地网络上。您只需将固件 .bin 文件托管在 Web 服务器上,然后让 ESP32 连接到服务器并发送 GET 请求。 Espressif 的 OTA 示例项目非常好,但我假设您使用的是 ESP32 Arduino 库,而不是 ESP-IDF。
我猜你正在使用this。我会看一下 AWS OTA 示例,我相信它是标准 ESP32 Arduino 示例之一。它位于示例、SparkFun ESP32 Thing 示例、更新、AWS_S3_OTA_Update 下。看起来它允许您从 Amazon Web Services 托管服务器进行 OTA,这应该完全符合您的要求。
假设 ESP32 OTA 的工作原理与我使用过的 ESP8266 非常相似。 这至少可以通过两种方式来实现。
此链接:http://esp8266.github.io/Arduino/versions/2.1.0/doc/ota_updates/ota_updates.html
提供有关使用浏览器将更新部署到设备的详细信息。 您需要将端口 80 流量从公共 IP 转发到内部设备 IP 地址。 然后您可以通过浏览器和您的公共 IP 地址访问您的 ESP。 更好的选择是将更新的固件发布到外部可用的 HTTP 服务器,并更改 ESP OTA 代码以检查该外部服务器是否有更新。 此方法在上述文档的“HTTP 服务器”部分中有详细介绍。 这只是对您提出的一般问题的一般指导。 我相信上面的解决方案是可行的,但我自己还没有尝试过。
您可以制作一个从互联网或其他地方获取更新文件的应用程序,然后通过 BLE 将文件传输到 ESP32。在这种情况下,ESP32 将需要仅通过 BLE 连接到手机(不需要 WIFI)。
这里是 ESP32 的示例 Arduino 代码和 Android 应用程序 代码