Menguji OTA di Espressif ESP32

Petunjuk berikut menggunakan contoh aplikasi pencahayaan dari SDK bersama dengan papan pengembangan M5Stack ESP32.Matter

Penyiapan lingkungan build

Pertama, clone Matter SDK.

Dalam contoh ini, kita memeriksa commit minimum yang didukung untuk Google Home's Matter Rilis 5:

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

Selanjutnya, kita memeriksa versi yang digunakan dalam Alur Kerja GitHub ESP32 untuk menentukan image Docker mana yang paling sesuai dengan build kita:

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

Kita menjalankan container dari image Docker, meneruskan flag untuk memasang Matter SDK di container dan memberikan akses ke perangkat 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

Menghentikan dan memulai container Docker Matter

Setiap kali menjalankan perintah docker run, Anda akan membuat container baru dengan image yang ditentukan. Jika Anda melakukannya, data lama Anda, yang disimpan di instance container sebelumnya, akan hilang. Terkadang, hal ini yang Anda inginkan, karena memungkinkan Anda memulai dengan penginstalan baru. Namun, dalam contoh ini, Anda kemungkinan besar ingin menyimpan konfigurasi pekerjaan dan lingkungan Anda antar-sesi.

user@host> docker stop container_name

Jika Anda siap menjalankan lagi, mulai container dan buka jendela terminal:

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

Anda dapat membuka sesi terminal tambahan ke container dengan:

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

Atau mulai sesi root menggunakan:

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

Menginisialisasi SDK

Di container, kita menginisialisasi Matter SDK dan ESP IDF:

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

Membuat dan melakukan flash

Tugas berikutnya adalah membuat image dan melakukan flash pada kit pengembangan untuk menerima update firmware OTA Matter.

Untuk melakukannya, Anda harus membuat image.

Pertama, konfigurasi build menggunakan utilitas menuconfig dari ESP IDF.

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

Di menu interaktif, konfigurasi setelan berikut:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Tetapkan Vendor ID ke VID yang ditetapkan Connectivity Standards Alliance (Alliance).

  5. Tetapkan Product ID ke PID yang Anda tetapkan pada Matter integrasi di Google Home Developer Console.

Aktifkan flag Pengirim Permintaan OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Aktifkan flag Pengirim Permintaan OTA [*] Enable OTA Requestor

  5. Tekan ESC dua kali untuk kembali ke menu tingkat teratas.

Aktifkan flag pembuatan Image OTA Matter:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Tetapkan nomor versi:

  1. Application manager --->

  2. Pilih [*] Get the project version from Kconfig

  3. Tetapkan Project version (NEW) ke 1.0

  4. Tekan s untuk menyimpan konfigurasi, tekan Enter dua kali, lalu q untuk keluar dari menuconfig.

Menyiapkan sertifikat pengujian

Ikuti langkah-langkah di Membuat sertifikat pengujian perangkat Matter untuk membuat sertifikat CD, DAC, dan PAI.

Membuat perangkat

Sekarang jalankan build dan lakukan flash pada perangkat:

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

Membuat dan mengupload image OTA

Sekarang ubah setelan build lagi untuk membuat image OTA. Gunakan image yang sama, tetapi dengan nomor versi yang bertambah.

Jalankan menuconfig.

idf.py menuconfig

Di menu interaktif, perbarui hal berikut:

  1. Application manager --->
  2. Pilih [*] Get the project version from Kconfig
  3. Tetapkan Project version (NEW) ke 2.0
  4. Tekan s untuk menyimpan konfigurasi, tekan Enter dua kali, lalu tekan q untuk keluar dari menuconfig.

Buat dan ambil image. Contoh ini menunjukkan lokasi image untuk OTA dan output saat mengurai dengan ota_image_tool.py.

cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.bin

Outputnya adalah sebagai berikut:

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

Karena Matter SDK dipasang dari host container Anda, image OTA tersedia di host container Anda.

Upload image OTA ke Developer Console dengan mengikuti petunjuk upload OTA.

Menugaskan ke Google Home dan mengamati OTA

Pastikan perangkat Anda terhubung ke mesin Linux host dengan USB. Contoh berikut menunjukkan penggunaan GNU screen untuk membaca log perangkat:

screen -L /dev/ttyUSB0 115200

Tindakan ini akan menampilkan output dari perangkat ke terminal Anda dan menulis output yang sama ke file log layar default yang bernama screenlog.0.

Anda dapat membuka file screenlog.0 di editor teks lain atau menampilkannya di shell lain dengan cat, tail, more, atau grep.

Tekan tombol reset merah di sisi perangkat untuk melihat log dari booting.

Di output perangkat, Anda akan melihat VID dan PID yang ditetapkan sebelumnya, serta URL ke image kode QR yang akan Anda gunakan untuk menugaskan perangkat.

[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

Pastikan Hub Anda online di rumah Anda.

Tugaskan perangkat dengan Google Home app (GHA) menggunakan kode QR dari link yang muncul di file log.

Biarkan perangkat berjalan tanpa gangguan selama beberapa menit setelah penugasan. Anda akan melihat output log yang terkait dengan Pengirim Permintaan OTA, download image OTA, dan OTAImageProcessor.

Setelah image diinstal, amati bahwa waktu kompilasi image cocok dengan waktu kompilasi image yang diupload ke konsol, dan lebih baru dari waktu kompilasi yang dilaporkan saat booting pertama. Menjalankan grep dengan pola berikut dalam mode regular expression di screenlog.0 dapat mengilustrasikan proses OTA:

grep -E "(Compile time|OTA)" screenlog.0

Outputnya adalah sebagai berikut:

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

Setelah eksekusi awal, Anda dapat mengulangi langkah-langkah di bagian Membuat dan mengupload image OTA tanpa mengupload image baru. Kali ini, tetapkan versi kembali ke 1.

Jalankan menuconfig, dan di opsi menu interaktif:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Tetapkan Version String ke v1.0.

  5. Tetapkan Device Software Version Number ke 1.

  6. Tekan s untuk menyimpan konfigurasi, lalu q untuk keluar dari menuconfig.

Hapus perangkat dari rumah Anda di GHA.

Buat image, jika belum dibuat:

idf.py build

Lakukan flash:

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

Ulangi langkah-langkah di Menugaskan ke Google Home dan mengamati OTA sesuai kebutuhan.

Memvalidasi Update Software OTA

Versi software perangkat dapat diperiksa menggunakan Aplikasi Google Home (GHA). Setelah perangkat ditugaskan, ikuti prosedur berikut:

  1. Tekan lama petak peta perangkat di layar utama GHA
  2. Ketuk ikon di kanan atas
  3. Ketuk Informasi teknis
  4. Periksa kolom Versi software

Layar Aplikasi Google Home yang menampilkan kolom versi software