Giới thiệu
Khi làm các ứng dụng IoT và bàn giao sản phẩm cho khách hàng, bạn có thể gặp phải trường hợp code chạy chưa đúng yêu cầu hoặc khách hàng muốn nâng cấp thêm 1 số tính năng. Vậy chẳng lẽ phải yêu cầu khách hàng gửi lại sản phẩm để bạn nạp code lại ? Vì lí do đó, việc tích hợp chức năng OTA vào hệ thống của bạn là rất cần thiết.
OTA là gì
OTA (Over-the-air) là hình thức thiết bị tự nạp firmware cho chính nó qua môi trường mạng không dây như wifi … mà không cần phải kết nối với máy tính. Thiết bị cần có 1 không gian bộ nhớ trống để lưu firmware mới vào đó, sau đó kiểm tra tính toàn vẹn của fimrware, nếu chính xác mới tiền hành update vào phân vùng chính. Do vậy, để thực hiện OTA, bạn bắt buộc phải để dành 1 vùng bộ nhớ riêng cho nó tương ứng với kích thước code dự kiến mà bạn sẽ viết
Cấu hình phần vùng
Trong mục Flash Size. Bạn có thể chọn kích thước phần vùng OTA tùy theo size code của bạn
Lập trình tích hợp OTA vào hệ thống
Có 2 cách chính
- Tạo 1 webserver trên esp8266/esp32, firmware sẽ được gửi cho khách hàng, khách hàng truy cập vào địa chỉ ip của esp và upload fimrware lên
- Firmware sẽ được lưu trên máy chủ cloud. ESP sẽ tự truy cập vào máy chủ để tải firmware về. Với cách này mình đã có hướng dẫn tại đây: http://iot47.com/iot-bai-10-cap-nhat-chuong-trinh-cho-esp8266-tu-xa-qua-internet-fota/
Chuẩn bị
Các bạn chuẩn bị 1 esp8266 hoặc esp32, mở arduino ide và cài thư viện wifi ota tại đây: https://github.com/daonguyen207/IOT47_wifi_ota
Để thư viện này hoạt động, bạn cũng cần cài thêm ESPAsyncWebServer.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> #include "iot47_wifi_ota.h" const char* ssid = "***"; const char* password = "***"; AsyncWebServer server(80); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(WiFi.localIP()); iot47_wifi_ota_begin(&server); server.begin(); } void loop() { iot47_wifi_ota_loop(); } |
Bây giờ chỉ cần truy cập vào địa chỉ ip của esp bằng trình duyệt web, ví dụ ip của mình là 192.168.1.6 thì mình sẽ gõ 192.168.1.6/update vào trình duyệt web
Lấy file bin
Bây giờ, chúng ta sẽ lấy file bin từ arduino, đường dẫn tới file .bin này được hiển thị trong log khi ấn biên dịch
Nếu bạn không tìm thấy, hãy bật show log trong phần config của ide
Bây giờ, chỉ việc tải firmware lên là sẽ hoàn tất quá trình OTA !