Thiết lập môi trường xây dựng
Trước tiên, hãy sao chép Matter SDK.
Trong ví dụ này, chúng tôi sẽ kiểm tra cam kết tối thiểu được hỗ trợ cho Bản phát hành 5 của Google Home's Matter:
mkdir otaprepcd otaprepgit 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 tôi sẽ kiểm tra phiên bản được dùng trong Quy trình làm việc trên GitHub của ESP32 để xác định hình ảnh Docker phù hợp nhất với bản dựng của chúng tôi:
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99Chúng tôi chạy một vùng chứa từ hình ảnh Docker, truyền các cờ để gắn Matter SDK vào vùng chứa và 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/bashDừng và khởi động vùng chứa Matter Docker
Bất cứ khi nào chạy lệnh docker run, bạn sẽ tạo một vùng chứa mới bằng hình ảnh đã chỉ định. Khi bạn thực hiện việc này, dữ liệu cũ đã lưu trên một thực thể vùng chứa trước đó sẽ bị mất. Đôi khi, bạn muốn điều này xảy ra vì nó cho phép bạn bắt đầu với một bản cài đặt mới. Tuy nhiên, trong ví dụ này, bạn có thể sẽ muốn lưu cấu hình công việc và môi trường 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ở một 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 dòng lệnh cho vùng chứa của mình bằng cách:
user@host> docker exec -it container_name /bin/bash
Hoặc bắt đầu một phiên gốc bằng cách:
user@host> docker exec -u 0 -it container_name /bin/bash
Khởi chạy SDK
Trong vùng chứa, chúng tôi sẽ khởi chạy Matter SDK và ESP IDF:
cd /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shTạo và ghi vào bộ nhớ flash
Nhiệm vụ tiếp theo là tạo hình ảnh và ghi vào bộ nhớ flash bộ phát triển để nhận bản cập nhật phần sụn OTA Matter.
Để thực hiện 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 trong ESP IDF.
cd examples/lighting-app/esp32
idf.py menuconfigTrong trình đơn tương tác, hãy định cấu hình các chế độ cài đặt sau:
Component config --->CHIP Device Layer --->Device Identification Options --->Đặt
Vendor IDthành VID do Connectivity Standards Alliance (Alliance) chỉ định.Đặt
Product IDthành PID mà bạn đã đặt trên bản tích hợp Matter trong Google Home Developer Console.
Bật cờ Trình yêu cầu OTA:
Component config -->CHIP Core -->System options --->Bật cờ Trình yêu cầu OTA
[*] Enable OTA RequestorNhấ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:
Component config -->CHIP Device Layer --->Matter OTA Image --->[*] Generate OTA IMAGE
Đặt số phiên bản:
Application manager --->Chọn
[*] Get the project version from KconfigĐặt
Project version (NEW)thành1.0Nhấn s để lưu cấu hình, nhấn Enter hai lần, sau đó nhấn q để thoát
menuconfig.
Thiết lập chứng chỉ thử nghiệm
Làm theo các bước trong bài viết Tạo chứng chỉ thử nghiệm thiết bị Matter để tạo chứng chỉ CD, DAC và PAI.
Tạo thiết bị
Bây giờ, hãy chạy bản dựng và ghi vào bộ nhớ flash thiết bị:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashTạ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 với số phiên bản tăng lên.
Chạy menuconfig.
idf.py menuconfigTrong trình đơn tương tác, hãy cập nhật những nội dung sau:
Application manager --->- Chọn
[*] Get the project version from Kconfig - Đặt
Project version (NEW)thành2.0 - Nhấn s để lưu cấu hình, nhấn Enter hai lần, sau đó nhấn q để thoát
menuconfig.
Tạo và truy xuất hình ảnh. Ví dụ này minh hoạ cả vị trí của hình ảnh cho OTA và kết quả 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.binKết quả sẽ như sau:
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ì Matter SDK được gắn từ máy chủ vùng chứa của bạn, nên hình ảnh OTA có trên máy chủ 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 OTA lên.
Uỷ quyền cho Google Home và quan sát OTA
Đảm bảo thiết bị của bạn được kết nối với máy Linux lưu trữ bằng USB. Ví dụ sau đây cho thấy cách sử dụng GNU screen để đọc nhật ký thiết bị:
screen -L /dev/ttyUSB0 115200Thao tác này sẽ hiển thị kết quả từ thiết bị đến thiết bị đầu cuối của bạn và ghi kết quả tương tự 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 nút đặt lại màu đỏ ở bên cạnh thiết bị để xem nhật ký từ khi khởi động.
Trong kết quả thiết bị, bạn sẽ thấy VID và PID mà bạn đã đặt trước đó, cũng như URL đến hình ảnh mã QR mà bạn sẽ dùng để uỷ quyền 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 Hub của bạn đang trực tuyến tại nhà.
Uỷ quyền cho thiết bị bằng Google Home app (GHA) bằng mã QR trong đường liên kết xuất hiện trong tệp nhật ký.
Để thiết bị chạy liên tục trong vài phút sau khi uỷ quyền.
Bạn sẽ thấy kết quả nhật ký liên quan đến Trình yêu cầu OTA, quá trình tải hình ảnh OTA xuống và OTAImageProcessor.
Sau khi hình ảnh được cài đặt, hãy quan sát để đảm bảo 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 khi khởi động lần đầu. Việc thực thi grep với mẫu sau đây ở 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.0Kết quả sẽ như sau:
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 ban đầu, 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 lại các phiên bản thành 1.
Chạy menuconfig và trong các tuỳ chọn trình đơn tương tác:
Component config -->CHIP Device Layer --->Device Identification OptionsĐặt
Version Stringthànhv1.0.Đặt
Device Software Version Numberthành1.Nhấn s để lưu cấu hình, sau đó nhấn q để thoát
menuconfig.
Xoá thiết bị khỏi nhà trong GHA.
Tạo hình ảnh (nếu chưa tạo):
idf.py buildGhi vào bộ nhớ flash:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashLặp lại các bước trong phần Uỷ quyền cho Google Home và quan sát 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:
- Nhấn và giữ ô thiết bị trên màn hình chính của GHA
- Nhấn vào biểu tượng ở trên cùng bên phải
- Nhấn vào Thông tin kỹ thuật
- Kiểm tra trường Phiên bản phần mềm