跳到主要内容

OTA 固件升级使用指南

about

OTA 固件升级是任何物联网系统中最重要的功能之一。它有助于为现场设备添加新功能和修复漏洞。ESP RainMaker 提供了功能丰富、灵活性高的 OTA 升级接口,支持多种选项和配置。

  • 要了解更多关于 OTA 固件升级的信息,请点击这里
  • 关于如何在管理面板 (上传、启动或监控) OTA 升级,请点击这里

使用指南

在固件中启用 OTA 升级

推荐的启用 OTA 功能的 API 是调用如下单一接口:

esp_rmaker_ota_enable_default();

该接口内部映射为“通过主题进行 OTA”,使用 ESP x509 证书包进行服务器认证,并设置默认的 OTA 回调。

信息

如需了解更多 OTA C API 详情,请点击这里


配置 OTA 升级镜像

编译 OTA 升级固件镜像时,操作与常规固件编译一致,但需确保:

  • 项目名称应与已烧录到节点上的固件一致。
  • 固件版本应与节点当前固件不同(可在示例的 CMakeLists.txt 文件中检查 set(PROJECT_VER "1.0"))。
disclaimer

如未满足上述任一条件,OTA 升级将失败。

绕过版本和项目名称检查(不推荐)

可通过如下配置选项实现。
再次强调,不推荐这样做。

CONFIG_ESP_RMAKER_SKIP_VERSION_CHECK=y
CONFIG_ESP_RMAKER_SKIP_PROJECT_NAME_CHECK=y

自动拉取配置

  • 大多数情况下,建议分批将 OTA 升级推送到节点,以避免服务器同时收到过多镜像下载请求。
  • 此外,节点可能在云端推送 node/<node_id>/otaurl 时处于离线状态,因此需要其他方式重新获取升级信息。
  • 当设置 CONFIG_ESP_RMAKER_OTA_AUTOFETCH=y 时,节点会根据 CONFIG_ESP_RMAKER_OTA_AUTOFETCH_PERIOD 指定的间隔周期性地尝试拉取 OTA 升级。具体做法是向 node/<node_id>/otafetch 发布如下数据:
{
“node_id": “<node_id>",
“fw_version": “<fw_version>"
}
tip
  • 如果云服务检测到该节点有待处理的 OTA 任务,将如上所述发布到 node/<node_id>/otaurl,并启动升级任务。

  • CONFIG_ESP_RMAKER_OTA_AUTOFETCH_PERIOD 默认值为 0,表示仅在节点首次启动并连接云端时发送一次请求。
    取值范围为 0 到 168(小时)。


服务器验证

  • OTA 框架使用 ESP x509 证书包进行服务器验证。
  • 这使其能够从多种不同服务器获取 OTA 镜像,包括 RainMaker 后端(默认)。
  • OTA 配置可选地接受服务器证书(server_cert),如需使用特定服务器证书,可将相应的 server.crt 文件复制到示例的 main/ 目录,并在 main/CMakeLists.txt 中添加如下行嵌入到二进制文件:
target_add_binary_data(${COMPONENT_TARGET} "server.crt" TEXT)

可通过如下方式在代码中访问:

extern const uint8_t ota_server_cert[] asm("_binary_server_crt_start");

{
...
esp_rmaker_ota_config_t ota_config = {
.server_cert = (char *)ota_server_cert,
};
esp_rmaker_ota_enable(&ota_config, OTA_USING_PARAMS);
...
跳过服务器认证(不推荐)

如需跳过服务器认证,或使用 HTTP 服务器而非 HTTPS(不推荐),请在 sdkconfig 中设置 CONFIG_OTA_ALLOW_HTTP=y


管理面板 OTA 操作

关于如何在管理面板 (上传、启动或监控) OTA 升级,请点击这里

On this page