ArduinoOTA:Arduino IDE 无线更新 ESP8266 应用

ArduinoOTA 库是一个库,它允许无线 Wi-Fi 更新 Arduino 程序(以及 ESP3226、ESP32)。开发连接对象时,它是一个基本库。它允许更新程序,而无需拆卸微控制器(Arduino,ESP8266,ESP32)将其连接到他的电脑。 这个库最初是为了更新 Arduino 程序而开发的,ESP8266 和 ESP32 是完全支持的。

对于本教程,我们将仅讨论 ESP8266。

在 Arduino IDE 上安装 ESP8266 的 ArduinoOTA 库

ArduinoOTA 库被集成到 ESP8266 库中,而不需要额外的安装。如果你是 ESP 的新手,那么下面是如何安装 ESP 库和支持。从 Arduino 菜单打开首选项(preferences),并添加到这个包的列表:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

然后转到对应的管理器并查找 esp8266,然后单击安装。

安装完成后,新的示例将会添加到示例菜单中。选择您的 ESP8266 来显示可用的示例。在 ArduinoOTA 子菜单中打开 BasicOTA 示例。

该程序,包含您在 ESP 项目中管理无线升级所需的一切。

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "..........";
const char* password = "..........";

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname("Demo OTA ESP8266");

  // No authentication by default
  ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
}

在烧录程序之前,请更改 ssid 变量(要连接的Wi-Fi网络)和密码(密码)。

在这里,程序使用 ESP8266WiFi 库来连接到网络。您也可以使用前面介绍的 WiFiManager 库。

建立连接后,可以定义其他(可选)参数:

  • SetPort:默认情况下,通讯端口是 8266。除非它已经被使用,否则改变它并不是很有用。例如,对于集成了UDP通信的项目。
  • SetHostname:这可能是最重要的选项。它允许您为 ESP8266 分配一个名称。如果网络上有很多对象,通过名称识别它要比通过序列号自动生成标识符要容易得多。
  • SetPassword:用于在运行更新之前,从 Arduino IDE 请求密码。如果你在学校工作,请多加练习。

在以下情况下,还有其他四种方法可以连接处理:

  • OnStart:开始更新时运行的代码
  • OnEnd:同上,最后运行的代码
  • OnProgress:进行时
  • OnError:错误

在大多数情况下,您不需要添加其它东西。特别是,这些功能已经能使我们能够,随时了解操作的进行情况。

在设置结束时,一旦所有功能定义完成,通过调用 begin() 方法启动无线更新支持。

最后,对于所有的工作,都需要在 loop() 循环中调用 ArduinoOTA.handle() 方法。

无线更新测试

上传程序并打开终端,确认 ESP8266 已正确连接到 Wi-Fi 网络。

Arduino IDE 会自动检测支持远程更新的设备。它们被添加到名为 “Network ports” 的新区域中的端口列表中。

Arduino OTA

似乎在版本 1.8.x 的 Arduino IDE 中带有一个防止设备更新的错误。如果您的 ESP 在启动 ESP 后几秒钟内没有出现,请重新启动 Arduino IDE。

要更新程序,只需选择 ESP 作为端口,而不是日常的串行端口。然后照常上传程序。在这里,由于需要密码,IDE中会出现一个输入窗口。它只会被要求一次:

Arduino OTA 密码

远程更新的远程更新(或失败),可以直接从 Arduino IDE 进行跟踪。

无线设置打开串口监视器是不可能的。一个小的 Web 界面将会是必需的。你可以阅读教程:ESP8266: Understanding Web Server programming with Arduino code,以了解如何将 Web 服务器和 HTML 界面添加到 ESP8266 项目。

原文链接:ArduinoOTA: Wireless Update (OTA) from the Arduino IDE of ESP8266 Programs

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.