Lập trình ESP32 FOTA nạp firmware qua mạng Internet với OTA Drive

Lập trình ESP32 OTA nap firmware tren internet

Trong bài này chúng ta sẽ học cách sử dụng ESP32 FOTA (Firmware Over The Air) thông qua Internet. Và quản lý version của phần mềm trên một website.

Bài 9 Wifi trong Serie Học ESP32 từ A tới Z

Tại sao chúng ta cần FOTA Inernet

Như các bạn đã được học ở bài trước, ESP32 có thể nạp firmware thông qua wifi mà không cần kết nối với mạch nạp, bằng cách tự tạo cho mình 1 web site, người dùng sẽ truy cập vào ESP32 và upload firmware lên.

Trong thực tế hiện nay, rất hiếm khi chúng ta sử dụng phương pháp này trong những mạch thương mại. Có 2 lý do chính:

  • Bảo mật: Các bạn không thể share firmware cho khách hàng, điều này có thể dẫn tới việc đối thủ sẽ lấy fw của bạn để sản xuất sản phẩm giống bạn mà không cần phải mất công nghiên cứu
  • Khách hàng đa số không thích những thứ khó khăn: Việc update như bài trước có thể rất dễ với bạn, nhưng đối với đa số khách hàng chúng rất phiền phức. Họ thà không sử dụng còn hơn

Vậy nên, chúng ta cần nạp FOTA thông qua Internet. Có một máy chủ lưu trữ và quản lý version của sản phẩm của bạn

Nguyên lý FOTA Internet

Để có thể nạp firmware từ xa cho ESP32 qua Internet. Chúng ta cần 1 máy chủ lưu giữ. Khi cập nhật hệ thống sẽ tuân theo các bước sau:

  • Nhà phát triển Upload firmware lên máy chủ
  • ESP32 sẽ gọi 1 API lên server đó, truy vấn xem có bản cập nhật mới không. Việc hỏi này sẽ được lặp lại liên tục có thể 1 vài phút 1 lần hoặc 1 vài ngày, tùy người phát triển
  • Nếu nhận được thông tin thay đổi version, ESP32 sẽ download firmware về thông qua internet.
  • Khởi động lại với firmware mới

Trong bài này chúng ta sẽ sử dụng server của OTA Drive. Một website quản lý firmware miễn phí.

ESP32 fota internet
Quy trình FOTA Internet cho ESP32

Setup trên OTA Drive

Đầu tiên các bạn truy cập vào website: https://www.otadrive.com/\

Đăng kí một account và đăng nhập vào

Chuyển qua Tab Product và làm các bước sau:

Nhấn Thêm product
Đặt tên sản phẩm và version mặc định
Nhấn vào biểu tuwonghj folder (góc phải) để vào product đó
Copy API key

Ok. Vậy là các bạn đã có API key để truy cập vào Product này. Việc tiếp theo chúng ta cần làm là lập trình cho ESP32

Lập trình ESP32 FOTA Internet 

Đầu tiên, tạo một project ESP32, mình không hướng dẫn lại nữa.

Tiếp tới là viết các hàm để truy cập vào wifi nhà bạn.

Sau đó viêt hàm cập nhật qua OTA

Hàm cập nhật phần mềm

Trong hàm này chúng ta gọi API tới OTA Drive với các tham số truyền vào là:

  • K: Key API chúng ta đã lấy ở bước trước
  • V: Version firmware hiện tại để so sánh với version lưu trữ trên server
  • S: Là ID của chip, ID này là duy nhất với mỗi con ESP32 để định danh chúng với các ESP32 khác dùng chung firmware.\

Sử dụng hàm getID để lấy ID của ESP32

Cuối cùng, chúng ta sẽ gọi hàm update mỗi 5s 1 lần ( 10 lần count 500ms) trong loop, các bạn có thể sử dụng timer cho việc này.

Trong loop là chương trình chúng ta chạy. Với bài này mình chỉ làm mẫu là gửi qua Serial mỗi 500ms thôi.

Full code

#include <Arduino.h>
#include <HTTPUpdate.h>

void update_FOTA();
void setup()
{
  Serial.begin(9600);
  WiFi.begin("SSID", "PASSWORD");
  Serial.println("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(WiFi.localIP());
}

uint32_t updateCounter = 0;
String version = "1.1";
String key = "573db5bf-91b7-4555-884b-67f77a9cc7fd";

void loop()
{
  Serial.print("Ver: ");
  Serial.println(version);
  delay(500);
  if (WiFi.status() == WL_CONNECTED)
  {
    updateCounter++;
    if (updateCounter > 10)
    {
      updateCounter = 0;
      Serial.println("Check update");
      update_FOTA();
    }
  }
}

String getChipId()
{
  String ChipIdHex = String((uint32_t)(ESP.getEfuseMac() >> 32), HEX);
  ChipIdHex += String((uint32_t)ESP.getEfuseMac(), HEX);
  return ChipIdHex;
}

void update_FOTA()
{
  String url = "http://otadrive.com/deviceapi/update?";
  url += "k=" + key;
  url += "&v=" + version;
  url += "&s=" + getChipId(); // định danh thiết bị trên Cloud

  WiFiClient client;
  httpUpdate.update(client, url, version);
}

OK, vậy là đã xong. Chúng ta nạp firmware này cho ESP32.

Khi chuyển qua tab Overview và thấy Device Count lên 1 là ESP32 đã kết nối lên server rồi. Lưu ý nếu không thấy thì các bạn refesh trình duyệt nhé

Nhưng lúc này khi check update vẫn thấy 401 vì thiết bị chưa được Verify (Xác nhận tin tưởng)

Các bạn làm theo các bước

Mở device Group (đây là nhóm các thiết bị dùng chung phiên bản fw)
Chọn thiết bị, nhấn change sate (mặc định là new khi sử dụng lần đầu)
Nhấn Verify và Change

Như vậy là ESP32 đã kết nối được với Server và sẵn sàng cho việc FOTA

Quản lý phiên bản trên OTA Drive

Tạo phiên bản firmware ESP32 trên VS code

Đầu tiên chúng ta phải tạo ra các phiên bản firmware cho ESP32.

Các bạn sửa code theo yêu cầu cần nâng cấp, sau đó sửa version là 1.1 (fw mặc định mà bạn nạp lúc trước là 1.0)

Viết code mới và cập nhật phiên bản
Nhấn Build để sinh ra file firmware mới
Mở thư mục chứa firmware
Copy ra thư mục khác và sửa tên

Upload firmware lên OTA Drive

Mở tab firmware và ấn add new
Upload các phiên bản của bạn
Chọn tên phiên bản
Nhấn Upload

Làm tiếp tục nếu bạn có các phiên bản khác

Danh sách firmware sau khi upload

Thay đổi version firmware và FOTA Internet vào ESP32

Các ban chuyển qua tab Group và nhấn mở.

Chọn phiên bản cần sử dụng, sau đó nhấn Save
Phiên bản đã thay đổi chạy với version bạn chọn

Nhấn monitor để đọc serial về. Các bạn sẽ thấy ESP32 sẽ update khoảng 30s sau đó sẽ reboot và chạy với phiên bản mà bạn chọn về.

Ngoài ra OTA drive còn có nhiều tính năng khác cho việc quản lý phiên bản. Các bạn hãy tự tìm hiểu nhé.

Kết

ESP32 FOTA Internet là một phần rất quan trọng khi các bạn làm các sản phẩm thương mại, vì các sản phẩm khi release chưa chắc đã hoàn hảo, cần update thêm tính năng hoặc sửa lỗi. Vậy nên làm chủ được nó sẽ giúp sản phẩm của bạn sẽ được nâng cấp liên tục, người sử dụng cũng sẽ không cần phải làm gì cả.

Nếu bạn thấy bài viết này có ích hãy bình luận và đừng quên ra nhập Hội Anh Em Nghiện Lập trình nhé.

 

5/5 - (1 bình chọn)

7 những suy nghĩ trên “Lập trình ESP32 FOTA nạp firmware qua mạng Internet với OTA Drive

  1. dev nói:

    Bạn cho mình hỏi! khi đang OTA nhưng bị mất mạng hoặc mất điện thì khi khởi động lại ESP32 có cập nhật lại firmware được không

  2. Thịnh nói:

    bạn cho mình hỏi sao lúc mình cập nhật hoàn thành nó chạy chương trình mới rồi nhưng khi reset lại nó lại quay về phiên bản cũ và lại tiếp tục cập nhật

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *