【问题标题】:How to update code OTA on ESP8266 keeping configuration如何在 ESP8266 上更新代码 OTA 保持配置
【发布时间】:2019-03-01 23:46:33
【问题描述】:

我有 3 个基于 ESP8266 的自制设备。它们中的每一个都是针对不同的应用程序而设计的,而且它们都只是为了爱好。

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

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

问题是,当代码更改时,ID(在代码上定义)丢失了,我不想手动编译 3 个不同的二进制文件,每个板一个,ID 是唯一的区别它们之间。当然,我必须在我第一次编写这个板时就这样做,但我不想每次更新都这样做。

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

【问题讨论】:

  • 您在什么框架或开发环境中工作?阿杜诺?微蟒?卢阿?免费RTOS?还有什么?
  • 我正在使用 Arduino 环境

标签: arduino esp8266 ota


【解决方案1】:

您的ESP8266 has flash memory,即使没有电源也会持续存在。这是存储 ESP8266 固件的地方。

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

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

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

【讨论】:

  • 看起来很像我需要的。我会看看它是如何为我工作的,然后回到这里并说出结果。
  • 工作得很好,这正是我所需要的。非常感谢!
  • 这个解决方案很好并且经过测试。您唯一需要担心的是 EEPROM 没有无限重写。我保留了第一次不存在的签名,所以我写入 EEPROM,而所有其他时间只读取设备 ID,因为 sigmature 存在。另一种解决方案是在写入之前从 EEPROM 中读取特定字节,如果相等则忽略。
【解决方案2】:

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

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

【讨论】:

  • 我可能想从我的 LAN 网络之外的地方更新电路板
  • MAC 地址是永久的硬件地址。当您在不同的网络上时,它不会改变。 IP 地址将。
  • 我记得在代码上设置了 MAC 地址,然后随机放了一些东西。我应该从硬件中找出真正的MAC地址然后使用它吗?
  • 除非您有非常具体的原因要更改主板的 MAC 地址(而不是 IP 地址),否则您几乎可以肯定地让主板使用其硬件 MAC 地址而不是更改它。
  • 我确实从代码中删除了新的 MAC 地址语句。我从示例草图中带来了它并且没有质疑。谢谢。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 2019-07-16
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多