用Arduino IDE通过OTA为ESP32编程

Programming ESP32 Wirelessly Using Arduino IDE

  • 需要的器件
  • 如何通过OTA实现编程

用Arduino IDE通过OTA为ESP32编程_第1张图片
OTA(Over the Air) 编程是WiFi-enabled 微处理器,比如ESP32或者是ESP8266可以不用物理接触就对固件或者是应用软件进行升级的一种特性。这个特性对一些难以连接电缆的设备重新下载更新程序非常有用。使用OTA,我们可以在同一个网络下对多个微处理器进行升级。例如,这个特性可以被用来向多个微处理器,耳麦,计算机和机顶盒灯发送更新来解决bug,增加新特性。OTA更新在IoT中也扮演很重要的角色。可以通过互联网进行远程更新配置,软件和固件。

前面我们学习过ESP8266 NodeMCU using OTA, 现在我们来学习over-the-air(OTA)为ESP32进行编程。这是通过OTA Web Update in Arduino IDE来实现。

需要的器件

  • ESP32
  • Arduino IDE
    用Arduino IDE通过OTA为ESP32编程_第2张图片

如何通过OTA实现编程

要使用Over the Air(OTA)编程特性,首先是要通过串口来装载一个程序。这个程序包含了HTML代码,保存有OTA更新网页。这样就可以为后来通过浏览器上载程序使用了。将前面说到的程序通过串口上载到ESP32后,会在网络中产生一个web server,这时可以选择通过网页上载一个新程序。

要上载程序前,先要用Arduino IDE连接ESP32板子,选择选择ESP32 Dev Kit。选择正确的串口。

然后,在Arduino IDE中选择File>Example>ArduinoOTA>OTAWebUpdate例子程序。在程序中更改成自己的WiFi名字和密码。

const char* ssid = "Your WiFi Name";
const char* password = "Password";

上载最新的代码到ESP32板子,上载程序后打开串口监视器,按ESP32板子的复位重启按钮,通过串口监视器可以看到这个ESP32服务器的地址。
用Arduino IDE通过OTA为ESP32编程_第3张图片
现在打开默认的浏览器,输入ESP32 IP地址,可以在浏览器中看到下面的画面:
用Arduino IDE通过OTA为ESP32编程_第4张图片
输入用户名和密码,点击login,出现新的画面,如下:

用Arduino IDE通过OTA为ESP32编程_第5张图片
在这里可以更新简单的LED闪耀程序。每个现在的程序中需要又OTA代码。即在OTA代码外增加灯闪烁的程序:

void loop(void)
{
	server.handleClient();
	delay(1);
	digitalWrite(led, HIGH);
	delay(600);
	digitalWrite(led, LOW);
	delay(600);

保存程序。用Sketch>Export compiled Binary。这时在sketch中创建一个.bin的文件。现在,在OTA的web page中选择文件,‘Choose File’ 按钮,选择.bin文件。点击Update按钮。开始上载程序。
在这里插入图片描述

下面是不用串口而使用OTA上传程序的代码。

#include 
#include 
#include 
#include 
#include 
const char* host = "esp32";
const char* ssid = "Galaxy-M20";
const char* password = "ac312129";
//variabls to blink without delay:
const int led = 2;
WebServer server(80);
/*
 * Login page
 */
const char* loginIndex = 
 "
" """""""
"
"
"
"""""""""
"
"
"
"""""""
"
"
"
"""""""""
" "
ESP32 Login Page
"
"
"
"
Username:
Password:
"
""
""; /* * Server Index Page */ const char* serverIndex = "" "
" "" "" ""
"
progress: 0%
"
""; /* * setup function */ void setup(void) { pinMode(led, OUTPUT); Serial.begin(115200); // Connect to WiFi network WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /*use mdns for host name resolution*/ if (!MDNS.begin(host)) { //http://esp32.local Serial.println("Error setting up MDNS responder!"); while (1) { delay(1000); } } Serial.println("mDNS responder started"); /*return index page which is stored in serverIndex */ server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", loginIndex); }); server.on("/serverIndex", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); /*handling uploading firmware file */ server.on("/update", HTTP_POST, []() { server.sendHeader("Connection", "close"); server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); ESP.restart(); }, []() { HTTPUpload& upload = server.upload(); if (upload.status == UPLOAD_FILE_START) { Serial.printf("Update: %s\n", upload.filename.c_str()); if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_WRITE) { /* flashing firmware to ESP*/ if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_END) { if (Update.end(true)) { //true to set the size to the current progress Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); } else { Update.printError(Serial); } } }); server.begin(); } void loop(void) { server.handleClient(); delay(1); digitalWrite(led, HIGH); delay(600); digitalWrite(led, LOW); delay(600); }

原文
https://circuitdigest.com/microcontroller-projects/esp32-ota-programming-using-arduino-ide

你可能感兴趣的:(ESP32,Arduino,IDE,c++)