Espressif ESP32'de OTA'yı test et

Aşağıdaki talimatlarda, M5Stack ESP32 geliştirme kartıyla birlikte Matter SDK'sındaki aydınlatma uygulaması örneği kullanılmaktadır.

Derleme ortamı kurulumu

Öncelikle Matter SDK'sını klonlayın.

Bu örnekte, Google Home'un Matter 5. sürümü için desteklenen minimum kaydı kontrol ediyoruz:

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

Ardından, derlememize en uygun Docker görüntüsünü belirlemek için ESP32 GitHub iş akışında kullanılan sürümü kontrol ederiz:

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

Docker görüntüsünden bir container çalıştırırız. Container'da Matter SDK'yı bağlamak ve ESP32 cihazına erişim sağlamak için işaretler iletiriz.

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

Matter Docker container'ını durdurma ve başlatma

docker run komutunu her çalıştırdığınızda, belirtilen görüntüyle yeni bir kapsayıcı oluşturursunuz. Bunu yaptığınızda, önceki bir kapsayıcı örneğine kaydedilen eski verileriniz kaybolur. Bazen yeni bir yüklemeyle başlamanıza olanak tanıdığı için bunun olmasını istersiniz. Ancak bu örnekte, oturumlar arasında çalışmanızı ve ortam yapılandırmanızı kaydetmek isteyebilirsiniz.

user@host> docker stop container_name

Tekrar çalıştırmaya hazır olduğunuzda container'ı başlatın ve bir terminal penceresi açın:

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

Aşağıdaki komutu kullanarak kapsayıcınızda ek terminal oturumları açabilirsiniz:

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

Alternatif olarak, aşağıdakileri kullanarak bir kök oturumu başlatabilirsiniz:

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

SDK'yı ilk kullanıma hazırlama

Kapsayıcıda Matter SDK'sını ve ESP IDF'yi başlatıyoruz:

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

Derleme ve yükleme

Bir sonraki görev, Matter OTA donanım yazılımı güncellemesini almak için görüntüyü oluşturmak ve geliştirme kitini yüklemektir.

Bunun için bir resim oluşturmanız gerekir.

Öncelikle ESP IDF'deki menuconfig yardımcı programını kullanarak derlemeyi yapılandırın.

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

Etkileşimli menüde aşağıdaki ayarları yapılandırın:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Vendor ID değerini Connectivity Standards Alliance (Alliance) tarafından atanan VID'niz olarak ayarlayın.

  5. Product ID değerini, Google Home Developer Console içinde Matter entegrasyonunda ayarladığınız PID olarak ayarlayın.

OTA Requestor flag'ini etkinleştirin:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. OTA Requestor işaretini etkinleştirin [*] Enable OTA Requestor

  5. Üst düzey menüye dönmek için ESC tuşuna iki kez basın.

Matter OTA Image creation flag'ini etkinleştirin:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Sürüm numarasını ayarlayın:

  1. Application manager --->

  2. [*] Get the project version from Kconfig adlı müşteriyi seç

  3. Project version (NEW) değerini 1.0 olarak ayarlayın.

  4. Yapılandırmayı kaydetmek için s tuşuna, iki kez Enter tuşuna ve ardından menuconfig aracından çıkmak için q tuşuna basın.

Test sertifikaları oluşturma

CD, DAC ve PAI sertifikaları oluşturmak için Matter cihaz test sertifikaları oluşturma başlıklı makaledeki adımları uygulayın.

Cihazınızı oluşturma

Şimdi derlemeyi çalıştırın ve cihazı yükleyin:

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

OTA görüntüsünü oluşturma ve yükleme

Şimdi OTA resmi oluşturmak için derleme ayarlarını tekrar değiştirin. Aynı görüntüyü kullanın ancak sürüm numarasını artırın.

menuconfig komutunu çalıştırın.

idf.py menuconfig

Etkileşimli menüde aşağıdakileri güncelleyin:

  1. Application manager --->
  2. [*] Get the project version from Kconfig adlı müşteriyi seç
  3. Project version (NEW) değerini 2.0 olarak ayarlayın.
  4. Yapılandırmayı kaydetmek için s tuşuna basın, iki kez Enter tuşuna basın, ardından menuconfig aracından çıkmak için q tuşuna basın.

Görüntüyü oluşturun ve alın. Örnekte, OTA için resmin konumu ve ota_image_tool.py ile ayrıştırma sırasındaki çıkış gösterilmektedir.

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

Çıkış şu şekildedir:

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

Matter SDK'sı, container ana makinenizden bağlandığı için OTA görüntüsü container ana makinenizde kullanılabilir.

OTA yükleme talimatlarını uygulayarak OTA resmini Developer Console cihazına yükleyin.

Google Home'da devreye alma ve OTA'yı gözlemleme

Cihazınızın USB ile ana makine Linux makinesine bağlı olduğundan emin olun. Aşağıdaki örnekte, cihaz günlüklerini okumak için GNU screen kullanımı gösterilmektedir:

screen -L /dev/ttyUSB0 115200

Bu komut, cihazdan gelen çıkışı terminalinizde gösterir ve aynı çıkışı screenlog.0 adlı varsayılan ekran günlüğü dosyasına yazar.

screenlog.0 dosyasını başka bir metin düzenleyicide açabilir veya cat, tail, more ya da grep ile başka bir kabukta görüntüleyebilirsiniz.

Başlatma günlüklerini görmek için cihazın yan tarafındaki kırmızı sıfırlama düğmesine basın.

Cihaz çıkışında, daha önce ayarladığınız VID ve PID'nin yanı sıra cihazı devreye almak için kullanacağınız QR kodu resminin URL'sini görürsünüz.

[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

Hub'ınızın evinizde internete bağlı olduğundan emin olun.

Günlük dosyasında görünen bağlantıdaki QR kodunu kullanarak cihazı Google Home app (GHA) ile devreye alın.

Cihazı devreye aldıktan sonra birkaç dakika kesintisiz çalıştırın. OTA İstek Sahibi, OTA resmi indirme ve OTAImageProcessor ile ilgili günlük çıkışını görmeniz gerekir.

Görüntü yüklendikten sonra görüntünün derleme süresinin konsola yüklenen görüntünün derleme süresiyle eşleştiğini ve ilk başlatmada bildirilen derleme süresinden daha sonra olduğunu gözlemleyin. screenlog.0 üzerinde normal ifade modunda aşağıdaki kalıpla grep komutunu çalıştırmak OTA sürecini gösterebilir:

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

Çıkış şu şekildedir:

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

İlk çalıştırmadan sonra, yeni bir resim yüklemeden OTA resmi oluşturma ve yükleme bölümündeki adımları tekrarlayabilirsiniz. Bu kez sürümleri 1 olarak ayarlayın.

menuconfig komutunu çalıştırın ve etkileşimli menü seçeneklerinde:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Version String değerini v1.0 olarak ayarlayın.

  5. Device Software Version Number değerini 1 olarak ayarlayın.

  6. Yapılandırmayı kaydetmek için s, menuconfig'den çıkmak için q tuşuna basın.

Cihazı GHA uygulamasında evinizden kaldırın.

Henüz oluşturulmadıysa görüntüyü oluşturun:

idf.py build

Flash it:

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

Google Home'da yetkilendirme ve OTA'yı gözlemleme bölümündeki adımları gerektiği şekilde tekrarlayın.

OTA yazılım güncellemesini doğrulama

Cihaz yazılım sürümü, Google Home uygulaması (GHA) kullanılarak kontrol edilebilir. Cihaz yetkilendirildikten sonra aşağıdaki prosedürleri uygulayın:

  1. GHA ana ekranındaki cihaz simgesine uzun basın.
  2. Sağ üstteki simgesine dokunun.
  3. Teknik bilgiler'e dokunun.
  4. Yazılım sürümü alanını kontrol edin.

Yazılım sürümü alanını gösteren Google Home uygulaması ekranı