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下载过程如图
等待ESP8266重启,就可以看到LED间隔闪烁。。。。
好处:便捷,快速。
不好处:占空间、也略占CPU。
|