如何在保持配置的ESP8266上更新代码OTA

How to update code OTA on ESP8266 keeping configuration

我有 3 个基于 ESP8266 的自制设备。它们中的每一个都用于不同的应用程序,并且它们实际上都只是为了业余爱好。

有时我只是想对代码做一个小改动,或者添加一个新功能,所以我一直致力于通过网络进行 OTA 更新。

每个板都有相同的代码,但每个都有一个在代码上定义的唯一 ID 和一些它们可以从 Web 上的数据库访问的唯一配置。理想情况下,我可以更新板 #01 中的代码,该板将在数据库 table 上搜索启动时的先前配置,并且一切正常。

问题是,当代码更改时,ID(在代码中定义)丢失了,我不想手动编译 3 个不同的二进制文件,每个板一个,ID 作为他们之间的唯一区别。当然,我必须在第一次对该板编程时执行此操作,但我不想每次更新都执行此操作。

有什么方法可以更新代码OTA但保留板上的ID?也许是一种在内存的非替换部分写入此 ID(或什至其他标志)的方法。

为什么您不使用 WiFi mac 地址作为唯一 ID?

所以你可以在任何板更新一些代码,这不会丢失ID。

你的 ESP8266 has flash memory,即使没有电源也能坚持。这是存储 ESP8266 固件的地方。

您可以使用 EEPROM library 在闪存中存储少量数据(4 到 4096 字节之间)。 ESP8266 没有真正的 EEPROM——这个库的名称是从真正的 Arduinos 沿袭下来的。在 ESP8266 上,它只使用闪存的一小部分并假装它是一个 EEPROM。

如果您使用 EEPROM 库,请确保在写入数据后调用 EEPROM.commit()EEPROM.end() 以确保它确实存储在闪存中。这与它在 Arduinos 上的使用方式不同,Arduino 示例通常不会这样做。

您还可以使用 SPIFFS library 将文件存储在闪存中 - 您可以将所有配置信息存储在一个文件(或 EEPROM space)中,而不是将其保存在数据库中.

看来您应该使用 NodeMCU 固件...您可以只更新 Lua 脚本 OTA 并更新您的模块,甚至无需重新启动!