Kiểm tra OTA trên Espressif ESP32

Hướng dẫn sau đây sử dụng ví dụ về ứng dụng chiếu sáng trong SDK Matter cùng với bảng phát triển M5Stack ESP32.

Thiết lập môi trường xây dựng

Trước tiên, hãy sao chép SDK Matter.

Trong ví dụ này, chúng tôi sẽ xem cam kết tối thiểu được hỗ trợ cho Bản phát hành Matter 5 của Google Home:

$ mkdir otaprep
$ cd otaprep
git clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git fetch origin v1.0-branch
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh

Tiếp theo, chúng ta sẽ kiểm tra phiên bản dùng trong Quy trình làm việc trên GitHub của ESP32 để xác định hình ảnh Docker nào phù hợp nhất với bản dựng của chúng ta:

$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
            image: connectedhomeip/chip-build-esp32:0.5.99

Chúng tôi chạy một vùng chứa từ hình ảnh Docker, truyền cờ để gắn SDK Matter trong vùng chứa và để cung cấp quyền truy cập vào thiết bị ESP32.

$ docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind --device=/dev/ttyUSB0 connectedhomeip/chip-build-esp32:0.5.99 /bin/bash

Dừng và khởi động vùng chứa Matter Docker

Mỗi khi chạy lệnh docker run, bạn sẽ tạo một vùng chứa mới với hình ảnh được chỉ định. Khi bạn làm như vậy, dữ liệu cũ đã lưu trên thực thể vùng chứa trước đó sẽ bị mất. Đôi khi, đây là điều bạn mong muốn vì nó cho phép bạn bắt đầu lại một quá trình cài đặt mới. Tuy nhiên, trong ví dụ này, rất có thể bạn muốn lưu cấu hình môi trường và công việc của mình giữa các phiên.

user@host> docker stop container_name

Khi bạn đã sẵn sàng chạy lại, hãy khởi động vùng chứa và mở cửa sổ dòng lệnh:

user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash

Bạn có thể mở thêm các phiên hoạt động khác tại vùng chứa của mình bằng:

user@host> docker exec -it container_name /bin/bash

Hoặc bắt đầu phiên gốc bằng:

user@host> docker exec -u 0 -it container_name /bin/bash

Khởi chạy SDK

Trong vùng chứa, chúng ta khởi chạy SDK Matter và ESP IDF:

cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh

Tạo và cài đặt ROM

Nhiệm vụ tiếp theo là tạo hình ảnh và cài đặt ROM bộ phát triển để nhận bản cập nhật chương trình cơ sở Matter OTA.

Để làm được việc này, bạn phải tạo một hình ảnh.

Trước tiên, hãy định cấu hình bản dựng bằng tiện ích menuconfig của ESP IDF.

cd examples/lighting-app/esp32
idf.py menuconfig

Trong trình đơn tương tác, hãy định cấu hình các chế độ cài đặt sau:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Đặt Vendor ID thành VID mà Connectivity Standards Alliance (Alliance) chỉ định.

  5. Đặt Product ID thành PID mà bạn thiết lập để tích hợp Matter trong Google Home Developer Console.

Bật cờ yêu cầu OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Bật cờ yêu cầu OTA [*] Enable OTA Requestor

  5. Nhấn ESC hai lần để quay lại trình đơn cấp cao nhất.

Bật cờ tạo hình ảnh OTA Matter:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Đặt số phiên bản:

  1. Application manager --->

  2. Chọn [*] Get the project version from Kconfig

  3. Thiết lập Project version (NEW) thành 1.0

  4. Nhấn phím s để lưu cấu hình, nhấn phím Enter hai lần rồi nhấn phím q để thoát menuconfig.

Thiết lập chứng chỉ thử nghiệm

Làm theo các bước trong phần Tạo chứng chỉ kiểm thử thiết bị theo chuẩn Matter để tạo chứng chỉ CD, DAC và PAI.

Tạo thiết bị của bạn

Bây giờ, hãy chạy bản dựng và cài đặt ROM thiết bị:

idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash

Tạo và tải hình ảnh OTA lên

Bây giờ, hãy thay đổi lại chế độ cài đặt bản dựng để tạo hình ảnh OTA. Sử dụng cùng một hình ảnh, nhưng số phiên bản tăng lên.

Chạy menuconfig.

idf.py menuconfig

Trong trình đơn tương tác, hãy cập nhật các nội dung sau:

  1. Application manager --->
  2. Chọn [*] Get the project version from Kconfig
  3. Thiết lập Project version (NEW) thành 2.0
  4. Nhấn phím s để lưu cấu hình, nhấn phím Enter hai lần rồi nhấn phím q để thoát khỏi menuconfig.

Tạo và truy xuất hình ảnh. Ví dụ dưới đây minh hoạ cả vị trí hình ảnh cho OTA và dữ liệu đầu ra khi phân tích cú pháp bằng ota_image_tool.py.

cd build
/workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.bin
Magic: 1beef11e
Total Size: 1243360
Header Size: 64
Header TLV:
  [0] Vendor Id: XXXXX (0x000)
  [1] Product Id: XXXXX (0x000)
  [2] Version: 2 (0x2)
  [3] Version String: v2.0
  [4] Payload Size: 1243280 (0x12f890)
  [8] Digest Type: 1 (0x1)
  [9] Digest: e367f4d71e2ccd554b9a399c864abbf2c039382ef1def1b986fb2f59a99923a8

Vì SDK Matter được gắn từ máy chủ lưu trữ vùng chứa, nên hình ảnh OTA sẽ có sẵn trên máy chủ lưu trữ vùng chứa của bạn.

Tải hình ảnh OTA lên Developer Console bằng cách làm theo hướng dẫn tải hình ảnh OTA lên.

Chuyển đến Google Home và quan sát OTA

Đảm bảo rằng thiết bị của bạn được kết nối với máy chủ Linux qua USB. Ví dụ sau đây cho thấy việc sử dụng GNU screen để đọc nhật ký thiết bị:

screen -L /dev/ttyUSB0 115200

Thao tác này sẽ hiển thị đầu ra từ thiết bị đến thiết bị đầu cuối và ghi cùng một đầu ra vào tệp nhật ký màn hình mặc định có tên là screenlog.0.

Bạn có thể mở tệp screenlog.0 trong một trình chỉnh sửa văn bản khác hoặc hiển thị tệp trong một shell khác bằng cat, tail, more hoặc grep.

Nhấn vào nút đặt lại màu đỏ ở bên sườn thiết bị để xem nhật ký từ lúc khởi động.

Trong dữ liệu đầu ra của thiết bị, bạn sẽ thấy VID và PID mà bạn đã thiết lập trước đó, cũng như URL dẫn đến hình ảnh mã QR mà bạn sẽ dùng để đặt phí hoa hồng cho thiết bị.

[0;32mI (2388) chip[DIS]: Advertise commission parameter vendorID=XXXXX productID=XXXX discriminator=3840/15 cm=1[0m

[0;32mI (1928) chip[SVR]: SetupQRCode: [MT:E59-000000000000000][0m

https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AE59-000000000000000

Đảm bảo Trung tâm có kết nối mạng trong nhà bạn.

Ủy quyền thiết bị với Google Home app (GHA) bằng cách sử dụng mã QR từ đường liên kết xuất hiện trong tệp nhật ký.

Hãy để thiết bị chạy mà không bị gián đoạn trong vài phút sau khi chạy thử. Bạn sẽ quan sát thấy đầu ra nhật ký liên quan đến Trình yêu cầu OTA, hoạt động tải hình ảnh OTA xuống và OTAImageProcessor.

Sau khi cài đặt hình ảnh, hãy quan sát xem thời gian biên dịch của hình ảnh khớp với thời gian biên dịch của hình ảnh được tải lên bảng điều khiển và muộn hơn thời gian biên dịch được báo cáo vào lần khởi động đầu tiên. Việc thực thi grep bằng mẫu sau ở chế độ biểu thức chính quy trên screenlog.0 có thể minh hoạ quy trình OTA:

$ grep -E "(Compile time|OTA)" screenlog.0
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 06:21:59
I (135558) chip[SWU]: OTA Requestor received AnnounceOTAProvider
I (540658) chip[SWU]: OTA image downloaded to offset 0x1a0000
I (541348) OTAImageProcessor: Applying, Boot partition set offset:0x1a0000
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 07:35:31
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 07:35:31

Sau lần thực thi đầu tiên, bạn có thể lặp lại các bước trong phần Tạo và tải hình ảnh OTA lên mà không cần tải hình ảnh mới lên. Lần này, hãy đặt các phiên bản về 1.

Chạy menuconfig và trong các tuỳ chọn trên trình đơn tương tác:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Đặt Version String thành v1.0.

  5. Đặt Device Software Version Number thành 1.

  6. Nhấn phím s để lưu cấu hình rồi nhấn q để thoát khỏi menuconfig.

Xoá thiết bị khỏi nhà bạn trong GHA.

Tạo hình ảnh nếu hình ảnh chưa được tạo:

idf.py build

Cài đặt ROM:

idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash

Lặp lại các bước trong phần Phí hoa hồng cho Google Home và theo dõi OTA nếu cần.

Xác thực bản cập nhật phần mềm OTA

Bạn có thể kiểm tra phiên bản phần mềm của thiết bị bằng ứng dụng Google Home (GHA). Sau khi đã uỷ quyền cho một thiết bị, hãy làm theo các quy trình sau:

  1. Nhấn và giữ ô thiết bị trên màn hình chính của GHA
  2. Nhấn vào biểu tượng ở trên cùng bên phải
  3. Nhấn vào Thông tin kỹ thuật
  4. Kiểm tra trường Phiên bản phần mềm

Màn hình Ứng dụng Google Home hiển thị trường phiên bản phần mềm