OTA Updates
介绍 Introduction
OTA(空中)更新是使用Wi-Fi连接而不是串行端口将固件加载到ESP模块的过程。在对模块进行有限或无物理访问的情况下,这种功能变得非常有用。
OTA需要一下几个方面的支持:
- Arduino IDE
- Web Browser
- HTTP Server
Arduino IDE选项主要用于软件开发阶段。 另外两个选项将在部署后更有用,通过Web浏览器手动提供应用程序更新模块,或者自动使用http服务器。 在任何情况下,必须通过串行端口完成第一个固件上传。 如果OTA例程在草图中正确实现,则所有后续上传都可以在空中完成。
OTA进程没有强加的安全性被黑客入侵。确保开发人员只能从合法/受信任的来源获得更新。更新完成后,模块将重新启动,并执行新的代码。开发人员应确保在模块上运行的应用程序以安全的方式关闭并重新启动。以下章节提供有关OTA过程的安全性和安全性的其他信息。
保密性 Security
模块必须以无线方式显示,以便通过新的草图进行更新。 这使得模块被强行入侵并加载了其他代码。 为了减少被黑客入侵的可能性,请考虑使用密码保护您的上传,选择某些OTA端口等。
检查可以提高安全性的ArduinoOTA库提供的功能:
void setPort(uint16_t port); void setHostname(const char* hostname); void setPassword(const char* password);
已经内置了某些保护功能,不需要开发人员进行任何其他编码。ArduinoOTA和espota.py使用Digest-MD5来验证上传。使用MD5校验和,在ESP端验证传输数据的完整性。
进行自己的风险分析,并根据应用决定什么库功能来实现。如果需要,请考虑实施其他保护手段被黑客入侵。仅根据具体时间安排上传的模块,触发OTA只能按用户专用的“更新”按钮连接到ESP等。
安全性 Safety
OTA过程在上传过程中采用ESP的资源和带宽。然后重新启动模块并执行新的草图。分析和测试它如何影响现有和新草图的功能。
如果将ESP放置在远程位置并控制某些设备,则应该额外注意如果本设备的操作突然被更新过程中断,会发生什么。因此,在开始更新之前,请决定如何将本设备置于安全状态。例如,您的模块可能会按顺序控制花园浇水系统。如果这个顺序没有正确关闭并且水阀打开,你的花园可能会被淹没。
ArduinoOTA库提供以下功能,旨在处理OTA特定阶段应用程序的功能或OTA错误:
void onStart(OTA_CALLBACK(fn)); void onEnd(OTA_CALLBACK(fn)); void onProgress(OTA_CALLBACK_PROGRESS(fn)); void onError(OTA_CALLBACK_ERROR (fn));
基本要求 Basic Requirements
闪存芯片尺寸应该能够同时保持旧的草图(当前正在运行)和新的草图(OTA)。
请记住文件系统和EEPROM例如需要的空间(一次)也看到闪光布局。
ESP.getFreeSketchSpace();
可用于检查新草图的可用空间。
有关内存布局的概述,存储新草图以及在OTA过程中如何复制它们,请参阅更新进程 - 内存视图。
以下章节提供了更多的细节和具体的OTA做法。