找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 676|回复: 2
打印 上一主题 下一主题
收起左侧

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。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2023-12-8 09:50 | 只看该作者
还有就是通过 HTTP 更新的。

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

使用道具 举报

板凳
ID:277550 发表于 2023-12-8 13:21 | 只看该作者
还有HTTP update
对比
OTA时模块是作为服务器运行,是TCP通讯

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表