标题:
ESP8266 Arduino OTA Example示范
[打印本页]
作者:
devcang
时间:
2023-12-7 20:47
标题:
ESP8266 Arduino OTA Example示范
1、准备程序,先刷这个程序
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* WiFiSsid = "YourWifiSSID"; // 写你本地的WiFi信息
const char* WiFiPass = "password";
void setup() {
Serial.begin(115200);
Serial.println("正在启动...");
WiFi.mode(WIFI_STA);
WiFi.begin(WiFiSsid, WiFiPass);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("连接WiFi失败! 将重启...");
delay(5000);
ESP.restart();
}
// ArduinoOTA.setPort(8266); // OTA端口,默认 8266
// ArduinoOTA.setHostname("ESP8266-1"); // OTA主机名,默认是 esp8266-[芯片ID]
// ArduinoOTA.setPassword((const char *)"123"); // 认证密码,默认是空白
ArduinoOTA.onStart([]() {//OTA开始回调
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {//OTA结束回调
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {//OTA进度回调
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("错误号[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("OTA认证失败");
else if (error == OTA_BEGIN_ERROR) Serial.println("开始OTA失败");
else if (error == OTA_CONNECT_ERROR) Serial.println("连接失败");
else if (error == OTA_RECEIVE_ERROR) Serial.println("接收失败");
else if (error == OTA_END_ERROR) Serial.println("结束时失败");
});
ArduinoOTA.begin();
Serial.print("准备好, "); //
Serial.print("模块IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
}
复制代码
这要使用线刷的,就是普通的烧程序。
刷好后,启动ESP8266,和开发的电脑在同一个网络 。
2、准备,找到端口
在Arduino IDE的“工具”菜单 -> “端口” ->网络端口,就可以看到对应的ESP8266 IP
下载程序时,选择这个网络端口,就可以尝试OTA刷机了。
3、验证,再利用空中升级 OTA,刷下边这个程序
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* WiFiSsid = "YourWifiSSID";// 写你本地的WiFi信息
const char* WiFiPass = "password";
const int ESP_BUILTIN_LED = 2;
void setup() {
Serial.begin(115200);
Serial.println("正在启动...");
WiFi.mode(WIFI_STA);
WiFi.begin(WiFiSsid, WiFiPass);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("连接WiFi失败! 将重启...");
delay(5000);
ESP.restart();
}
// ArduinoOTA.setPort(8266); // OTA端口,默认 8266
// ArduinoOTA.setHostname("ESP8266-1"); // OTA主机名,默认是 esp8266-[芯片ID]
// ArduinoOTA.setPassword((const char *)"123"); // 认证密码,默认是空白
ArduinoOTA.onStart([]() {//OTA开始回调
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {//OTA结束回调
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {//OTA进度回调
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("错误号[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("OTA认证失败");
else if (error == OTA_BEGIN_ERROR) Serial.println("开始OTA失败");
else if (error == OTA_CONNECT_ERROR) Serial.println("连接失败");
else if (error == OTA_RECEIVE_ERROR) Serial.println("接收失败");
else if (error == OTA_END_ERROR) Serial.println("结束时失败");
});
ArduinoOTA.begin();
Serial.print("准备好, "); //
Serial.print("模块IP: ");
Serial.println(WiFi.localIP());
pinMode(ESP_BUILTIN_LED, OUTPUT);
}
unsigned int x = 0;
boolean b = false;
void loop() {
ArduinoOTA.handle();
if (++x == 0xffff) { ///到一定值,再处理不使用delay耗时
x=0;
Serial.println("我正在闪...");
digitalWrite(ESP_BUILTIN_LED, b ? LOW : HIGH);
b = ! b; //反转
}
}
复制代码
为了区别OTA,本程序做了个LED闪烁的部分。OTA开始后,Arduino IDE会自动连接、并上传程序bin文件,处理成功后自动reset。OTA下载过程如图
image1.png
(35.52 KB, 下载次数: 54)
下载附件
2023-12-7 22:13 上传
等待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