标题: ESP8266 Arduino OTA Example示范 [打印本页]

作者: devcang    时间: 2023-12-7 20:47
标题: ESP8266 Arduino OTA Example示范
1、准备程序,先刷这个程序
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266mDNS.h>
  3. #include <WiFiUdp.h>
  4. #include <ArduinoOTA.h>
  5. const char* WiFiSsid = "YourWifiSSID"; // 写你本地的WiFi信息
  6. const char* WiFiPass = "password";
  7. void setup() {
  8.   Serial.begin(115200);
  9.   Serial.println("正在启动...");
  10.   WiFi.mode(WIFI_STA);
  11.   WiFi.begin(WiFiSsid, WiFiPass);
  12.   while (WiFi.waitForConnectResult() != WL_CONNECTED) {
  13. Serial.println("连接WiFi失败! 将重启...");
  14.     delay(5000);
  15.     ESP.restart();
  16.   }
  17.   // ArduinoOTA.setPort(8266);  // OTA端口,默认 8266
  18.   // ArduinoOTA.setHostname("ESP8266-1");  // OTA主机名,默认是 esp8266-[芯片ID]
  19.   // ArduinoOTA.setPassword((const char *)"123");  // 认证密码,默认是空白
  20.   ArduinoOTA.onStart([]() {//OTA开始回调
  21.     Serial.println("Start");
  22.   });
  23.   ArduinoOTA.onEnd([]() {//OTA结束回调
  24.     Serial.println("\nEnd");
  25.   });
  26.   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {//OTA进度回调
  27.     Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  28.   });
  29.   ArduinoOTA.onError([](ota_error_t error) {
  30. Serial.printf("错误号[%u]: ", error);
  31. if (error == OTA_AUTH_ERROR) Serial.println("OTA认证失败");
  32. else if (error == OTA_BEGIN_ERROR) Serial.println("开始OTA失败");
  33. else if (error == OTA_CONNECT_ERROR) Serial.println("连接失败");
  34. else if (error == OTA_RECEIVE_ERROR) Serial.println("接收失败");
  35. else if (error == OTA_END_ERROR) Serial.println("结束时失败");
  36.   });
  37.   ArduinoOTA.begin();
  38. Serial.print("准备好, "); //
  39. Serial.print("模块IP: ");
  40.   Serial.println(WiFi.localIP());
  41. }
  42. void loop() {
  43.   ArduinoOTA.handle();
  44. }
复制代码

这要使用线刷的,就是普通的烧程序。
刷好后,启动ESP8266,和开发的电脑在同一个网络 。

2、准备,找到端口
在Arduino IDE的“工具”菜单 -> “端口” ->网络端口,就可以看到对应的ESP8266 IP
下载程序时,选择这个网络端口,就可以尝试OTA刷机了。

3、验证,再利用空中升级 OTA,刷下边这个程序

  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266mDNS.h>
  3. #include <WiFiUdp.h>
  4. #include <ArduinoOTA.h>
  5. const char* WiFiSsid = "YourWifiSSID";// 写你本地的WiFi信息
  6. const char* WiFiPass = "password";
  7. const int ESP_BUILTIN_LED = 2;
  8. void setup() {
  9.   Serial.begin(115200);
  10. Serial.println("正在启动...");
  11.   WiFi.mode(WIFI_STA);
  12.   WiFi.begin(WiFiSsid, WiFiPass);
  13.   while (WiFi.waitForConnectResult() != WL_CONNECTED) {
  14.     Serial.println("连接WiFi失败! 将重启...");
  15.     delay(5000);
  16.     ESP.restart();
  17.   }
  18. // ArduinoOTA.setPort(8266); // OTA端口,默认 8266
  19. // ArduinoOTA.setHostname("ESP8266-1"); // OTA主机名,默认是 esp8266-[芯片ID]
  20. // ArduinoOTA.setPassword((const char *)"123"); // 认证密码,默认是空白
  21.   ArduinoOTA.onStart([]() {//OTA开始回调
  22.     Serial.println("Start");
  23.   });
  24.   ArduinoOTA.onEnd([]() {//OTA结束回调
  25.     Serial.println("\nEnd");
  26.   });
  27.   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {//OTA进度回调
  28.     Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  29.   });
  30.   ArduinoOTA.onError([](ota_error_t error) {
  31.     Serial.printf("错误号[%u]: ", error);
  32.     if (error == OTA_AUTH_ERROR) Serial.println("OTA认证失败");
  33.     else if (error == OTA_BEGIN_ERROR) Serial.println("开始OTA失败");
  34.     else if (error == OTA_CONNECT_ERROR) Serial.println("连接失败");
  35.     else if (error == OTA_RECEIVE_ERROR) Serial.println("接收失败");
  36.     else if (error == OTA_END_ERROR) Serial.println("结束时失败");
  37.   });
  38.   ArduinoOTA.begin();
  39.   Serial.print("准备好, "); //
  40.   Serial.print("模块IP: ");
  41.   Serial.println(WiFi.localIP());

  42.   pinMode(ESP_BUILTIN_LED, OUTPUT);
  43. }
  44. unsigned int x = 0;
  45. boolean b = false;
  46. void loop() {
  47.   ArduinoOTA.handle();
  48.   if (++x == 0xffff) { ///到一定值,再处理不使用delay耗时
  49.     x=0;
  50.     Serial.println("我正在闪...");
  51.     digitalWrite(ESP_BUILTIN_LED, b ? LOW : HIGH);

  52.     b = ! b;  //反转
  53.   }
  54. }
复制代码

为了区别OTA,本程序做了个LED闪烁的部分。OTA开始后,Arduino IDE会自动连接、并上传程序bin文件,处理成功后自动reset。OTA下载过程如图



等待ESP8266重启,就可以看到LED间隔闪烁。。。。
好处:便捷,快速。
不好处:占空间、也略占CPU。

作者: devcang    时间: 2023-12-8 09:50
还有就是通过 HTTP 更新的。

两者的区别是:
OTA是模块做服务器,TCP通讯。
而HTTP更新时模块是客户端,容易过路由。

作者: devcang    时间: 2023-12-8 13:21
还有HTTP update
对比
OTA时模块是作为服务器运行,是TCP通讯

HTTP时模块是作为客户端,走HTTP协议、容易过路由

作者: WFX777888    时间: 2024-12-7 16:55
老师这个文件在哪里能下载到ESP8266WiFi.h




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1