Espressif ESP32'de OTA'yı test et

Aşağıdaki talimatlarda, Matter SDK'sındaki aydınlatma uygulaması örneği ve bir M5Stack ESP32 geliştirme kartı kullanılmıştır.

Derleme ortamı kurulumu

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

Bu örnekte, Google Home'un Matter 5. sürümü için desteklenen minimum taahhüdü 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 İş 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ırken Matter SDK'sını container'a eklemek ve ESP32 cihazına erişim sağlamak amacıyla 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 kapsayıcısını durdurun ve başlatın

Her docker run komutu çalıştırdığınızda, belirtilen görüntüyle yeni bir container oluşturursunuz. Bu işlem gerçekleştirildiğinde, önceki container örneğinde kayıtlı olan eski verileriniz kaybolur. Bazen bunu yapmak istersiniz çünkü yeni bir yüklemeyle başlamanızı sağlar. Ancak bu örnekte, büyük olasılıkla oturumlar arasında iş ve ortam yapılandırmanızı kaydetmek istersiniz.

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ğıdakileri kullanarak container'ınızda ek terminal oturumları açabilirsiniz:

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

Şunu kullanarak bir root oturumu da başlatabilirsiniz:

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

SDK'yı başlatma

Kapsayıcıda Matter SDK'sı ve ESP IDF'yi ilk kullanıma hazırlıyoruz:

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

Geliştirme ve flaş

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.

İlk olarak, 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 öğesini Connectivity Standards Alliance (Alliance) atanmış VID'nize ayarlayın.

  5. Product ID öğesini, Google Home Developer Console içindeki Matter entegrasyonunda ayarladığınız PID olarak ayarlayın.

OTA İsteği Sahibi işaretini etkinleştirin:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. [*] Enable OTA Requestor numaralı OTA İstek Sahibi işaretini etkinleştir

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

Matter OTA Resmi oluşturma işaretini etkinleştir:

  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 öğesini seç

  3. Project version (NEW) değerini 1.0 olarak ayarla

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

Test sertifikalarını ayarlama

CD, DAC ve PAI sertifikaları oluşturmak için Matter cihaz test sertifikaları oluşturma bölümündeki adımları uygulayın.

Cihazınızı oluşturun

Şimdi derlemeyi çalıştırın ve cihazı yanıp söndür:

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

OTA görüntüsünü oluşturun ve yükleyin

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

menuconfig çalıştır.

idf.py menuconfig

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

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

Görüntüyü derleyin ve alın. Aşağıdaki örnekte, ota_image_tool.py ile ayrıştırma yapılırken hem OTA için resmin konumu hem de çıktı gösterilmektedir.

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

Matter SDK'sı, container ana makinenizden eklendiğinden OTA görüntüsü container ana makinenizde kullanılabilir.

OTA yükleme talimatlarını uygulayarak OTA görüntüsünü Developer Console hizmetine yükleyin.

Google Home'a komisyon verme ve OTA'yı gözlemleme

Cihazınızın ana Linux makinesine USB ile 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 işlem, cihazdan aldığınız çıktıyı terminalinize gösterir ve aynı çıkışı screenlog.0 adlı varsayılan ekran günlük 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 sırasındaki günlükleri görmek için cihazın yan tarafındaki kırmızı sıfırlama düğmesine basın.

Cihaz çıkışında, cihazı devreye sokmak için kullanacağınız QR kodu resminin URL'sinin yanı sıra daha önce ayarladığınız VID ve PID değerlerini 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ı çalıştırdıktan sonra birkaç dakika kesintisiz olarak çalıştırın. OTA İsteği Sahibi, OTA görüntüsü indirme ve OTAImageProcessor ile ilgili günlük çıkışını gözlemlemeniz gerekir.

Görüntü yüklendikten sonra, görüntünün derleme süresinin konsola yüklenen derleme süresiyle aynı olduğunu ve ilk başlatmada bildirilen derleme süresinden sonra olduğunu unutmayın. grep politikasını, screenlog.0 üzerindeki normal ifade modunda aşağıdaki kalıpla yürütmek OTA sürecini gösterebilir:

$ 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

İlk yürütme işleminden 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 tekrar 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 tuşuna, menuconfig uygulamasından çıkmak için q'ya basın.

Cihazı GHA uygulamasında evinizden kaldırabilirsiniz.

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

idf.py build

Flash'ı yükleyin:

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

Gerektiğinde Google Home'a komisyon verme ve OTA'yı gözlemleme bölümündeki adımları tekrarlayın.

OTA Yazılım Güncellemesi'ni Doğrulama

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

  1. GHA ana ekranında 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ı