ESP32 là một bộ vi điều khiển có khả năng thực hiện cập nhật qua mạng (OTA). Các bản cập nhật OTA cho phép bạn cập nhật chương trình cơ sở của ESP32 không dây mà không cần kết nối vật lý với máy tính.
Cập nhật OTA là gì?
Over-the-air (OTA) cập nhật đề cập đến quá trình cập nhật chương trình cơ sở hoặc phần mềm của thiết bị không dây mà không cần kết nối vật lý với máy tính. Các bản cập nhật OTA rất hữu ích vì chúng cho phép bạn cập nhật thiết bị từ xa, đồng thời có thể tiết kiệm thời gian và công sức bằng cách loại bỏ nhu cầu truy cập vật lý vào thiết bị để thực hiện cập nhật.
Các bản cập nhật OTA thường được sử dụng cho các thiết bị được cài đặt ở những vị trí khó tiếp cận hoặc cần được cập nhật thường xuyên, chẳng hạn như thiết bị Internet of Things (IoT).
Method 1: ArduinoOTA Library
Để thực hiện cập nhật OTA, bạn sẽ cần thiết lập một máy chủ web phục vụ tệp cập nhật chương trình cơ sở và định cấu hình ESP32 để kết nối với máy chủ này và tải xuống tệp cập nhật. Sau đó, bạn có thể sử dụng thư viện ArduinoOTA để thực hiện cập nhật.
Ví dụ
Dưới đây là một ví dụ về mã minh họa cách thiết lập các bản cập nhật OTA trên ESP32 bằng thư viện ArduinoOTA:
- Trước tiên, bạn sẽ cần đưa các thư viện ArduinoOTA và WiFi vào đầu project của mình:
#include <ArduinoOTA.h>
#include <WiFi.h>
- Tiếp theo, thiết lập kết nối WiFi bằng cách gọi hàm WiFi.begin() và nhập tên và mật khẩu mạng WiFi của bạn:
const char* ssid = “your_wifi_name”;
const char* password = “your_wifi_password”;
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
- Khởi tạo thư viện ArduinoOTA bằng cách gọi hàm ArduinoOTA.begin():
ArduinoOTA.begin();
- Đặt tên máy chủ và mật khẩu cho bản cập nhật OTA bằng các hàm ArduinoOTA.setHostname() và ArduinoOTA.setPassword():
ArduinoOTA.setHostname(“esp32-ota”);
ArduinoOTA.setPassword(“password”);
- Thiết lập chức năng để xử lý các yêu cầu cập nhật OTA đến bằng chức năng ArduinoOTA.onStart():
void handleOTAStart() {
// Perform any necessary tasks before the update begins, such as saving data or closing file handles
Serial.println(“OTA update starting…”);
}
ArduinoOTA.onStart(handleOTAStart);
- Thiết lập một hàm để xử lý tiến trình cập nhật OTA bằng hàm ArduinoOTA.onProgress():
void handleOTAProgress(unsigned int progress, unsigned int total) {
// Display the progress of the update to the user
Serial.printf(“Progress: %u%%\r”, (progress / (total / 100)));
}
ArduinoOTA.onProgress(handleOTAProgress);
- Thiết lập một chức năng để xử lý việc hoàn thành cập nhật OTA bằng chức năng ArduinoOTA.onEnd():
void handleOTAEnd() {
// Perform any necessary tasks after the update is complete, such as restarting the ESP32
Serial.println(“\nOTA update complete!”);
ESP.restart();
}
ArduinoOTA.onEnd(handleOTAEnd);
- Cuối cùng, gọi hàm ArduinoOTA.handle() trong vòng lặp chính của chương trình để lắng nghe và xử lý các yêu cầu cập nhật OTA:
void loop() {
ArduinoOTA.handle();
// Your other code goes here
}
Đó là nó! Với các bước này, giờ đây bạn có thể thực hiện cập nhật OTA trên ESP32 của mình. Hãy nhớ kiểm tra kỹ các bản cập nhật OTA của bạn trước khi triển khai chúng cho các thiết bị sản xuất.
Full Code ESP32
#include <ArduinoOTA.h>
#include <WiFi.h>
const char* ssid = “your_wifi_name”;
const char* password = “your_wifi_password”;
void handleOTAStart() {
// Perform any necessary tasks before the update begins, such as saving data or closing file handles
Serial.println(“OTA update starting…”);
}
void handleOTAProgress(unsigned int progress, unsigned int total) {
// Display the progress of the update to the user
Serial.printf(“Progress: %u%%\r”, (progress / (total / 100)));
}
void handleOTAEnd() {
// Perform any necessary tasks after the update is complete, such as restarting the ESP32
Serial.println(“\nOTA update complete!”);
ESP.restart();
}
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
// Initialize OTA
ArduinoOTA.begin();
ArduinoOTA.setHostname(“esp32-ota”);
ArduinoOTA.setPassword(“password”);
// Set up OTA event handlers
ArduinoOTA.onStart(handleOTAStart);
ArduinoOTA.onProgress(handleOTAProgress);
ArduinoOTA.onEnd(handleOTAEnd);
}
void loop() {
ArduinoOTA.handle();
// Your other code goes here
}
Trong mã này, ESP32 kết nối với mạng WiFi được chỉ định và sau đó khởi tạo thư viện ArduinoOTA. Nó đặt tên máy chủ và mật khẩu cho bản cập nhật OTA và đăng ký trình xử lý sự kiện để bắt đầu, tiến trình và kết thúc bản cập nhật. Cuối cùng, hàm ArduinoOTA.handle() được gọi trong vòng lặp chính của chương trình để lắng nghe và xử lý các yêu cầu cập nhật OTA.
Tham khảo: https://diyusthad.com/2022/12/esp32-ota-firmware-update.html