تست OTA روی Espressif ESP32

دستورالعمل‌های زیر از نمونه برنامه نورپردازی Matter SDK به همراه یک برد توسعه M5Stack ESP32 استفاده می‌کنند.

راه اندازی محیط ساخت

ابتدا Matter SDK را شبیه سازی کنید.

در این مثال، حداقل تعهد پشتیبانی شده برای Matter Release 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

در مرحله بعد، نسخه استفاده شده در ESP32 GitHub Workflow را بررسی می کنیم تا مشخص کنیم کدام تصویر Docker به بهترین وجه با ساخت ما سازگار است:

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

ما یک کانتینر از تصویر Docker اجرا می‌کنیم و پرچم‌هایی را برای نصب Matter SDK در ظرف و فراهم کردن دسترسی به دستگاه 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

کانتینر Matter Docker را متوقف و راه اندازی کنید

هر زمان که دستور docker run را اجرا می کنید، یک ظرف جدید با تصویر مشخص شده ایجاد می کنید. هنگامی که این کار را انجام می دهید، داده های قدیمی شما که در یک نمونه کانتینر قبلی ذخیره شده بود، از بین می رود. گاهی اوقات این چیزی است که شما می خواهید اتفاق بیفتد، زیرا به شما امکان می دهد با یک نصب جدید شروع کنید. اما در این مثال به احتمال زیاد می خواهید پیکربندی کار و محیط خود را بین جلسات ذخیره کنید.

user@host> docker stop container_name

وقتی دوباره آماده اجرا شدید، کانتینر را راه اندازی کنید و یک پنجره ترمینال را باز کنید:

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

می‌توانید جلسات ترمینال دیگری را به کانتینر خود باز کنید:

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

یا یک جلسه روت با استفاده از:

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

SDK را راه اندازی کنید

در ظرف، Matter SDK و ESP IDF را مقداردهی اولیه می کنیم:

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

ساخت و فلش

کار بعدی ساخت تصویر و فلش کردن کیت توسعه برای دریافت آپدیت فریمور Matter OTA است.

برای این کار باید یک تصویر ایجاد کنید.

ابتدا بیلد را با استفاده از ابزار menuconfig از ESP IDF پیکربندی کنید.

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

در منوی تعاملی، تنظیمات زیر را پیکربندی کنید:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Vendor ID روی VID اختصاص داده شده به Connectivity Standards Alliance (Alliance) خود تنظیم کنید.

  5. Product ID را روی PID تنظیم کنید که در ادغام Matter در Google Home Developer Console تنظیم کرده اید.

پرچم درخواست کننده OTA را فعال کنید:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. پرچم درخواست کننده OTA را فعال کنید [*] Enable OTA Requestor

  5. برای بازگشت به منوی سطح بالا، دو بار ESC را فشار دهید.

پرچم ایجاد تصویر Matter OTA را فعال کنید:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

شماره نسخه را تنظیم کنید:

  1. Application manager --->

  2. [*] Get the project version from Kconfig را انتخاب کنید

  3. Project version (NEW) را روی 1.0 تنظیم کنید

  4. s را برای ذخیره پیکربندی فشار دهید، دوبار Enter و سپس q را برای خروج از menuconfig فشار دهید.

گواهینامه های آزمون را تنظیم کنید

برای ایجاد گواهی‌های CD، DAC و PAI، مراحل موجود در گواهی‌های تست دستگاه Create Matter را دنبال کنید.

دستگاه خود را بسازید

حالا بیلد را اجرا کنید و دستگاه را فلش کنید:

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

تصویر OTA را ایجاد و آپلود کنید

حالا دوباره تنظیمات ساخت را تغییر دهید تا تصویر OTA ایجاد شود. از همان تصویر استفاده کنید، اما با شماره نسخه افزایش یافته.

menuconfig اجرا کنید.

idf.py menuconfig

در منوی تعاملی موارد زیر را به روز کنید:

  1. Application manager --->
  2. [*] Get the project version from Kconfig را انتخاب کنید
  3. Project version (NEW) را روی 2.0 تنظیم کنید
  4. s را برای ذخیره پیکربندی فشار دهید، دوبار Enter را فشار دهید، سپس q را فشار دهید تا از menuconfig خارج شوید.

تصویر را بسازید و بازیابی کنید. مثال زیر مکان تصویر OTA و خروجی را هنگام تجزیه با 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

از آنجایی که Matter SDK از میزبان کانتینر شما نصب شده است، تصویر OTA در میزبان کانتینر شما موجود است.

با دنبال کردن دستورالعمل‌های آپلود OTA، تصویر OTA را در Developer Console آپلود کنید.

به Google Home بفرستید و OTA را رعایت کنید

مطمئن شوید که دستگاه شما با USB به دستگاه لینوکس میزبان متصل است. مثال زیر استفاده از screen گنو برای خواندن گزارش های دستگاه را نشان می دهد:

screen -L /dev/ttyUSB0 115200

این خروجی را از دستگاه به ترمینال شما نمایش می دهد و همان خروجی را در فایل گزارش پیش فرض صفحه به نام screenlog.0 می نویسد.

می توانید فایل screenlog.0 را در ویرایشگر متن دیگری باز کنید یا آن را در پوسته دیگری با cat , tail , more , یا grep نمایش دهید .

دکمه قرمز رنگ ریست را در کنار دستگاه فشار دهید تا سیاهه های مربوط به بوت را مشاهده کنید.

در خروجی دستگاه، باید VID و PID را که قبلاً تنظیم کرده‌اید، و همچنین یک URL به تصویر کد QR که برای راه‌اندازی دستگاه استفاده می‌کنید، ببینید.

[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

اطمینان حاصل کنید که هاب شما در خانه شما آنلاین است.

دستگاه را با Google Home app (GHA) با استفاده از کد QR از پیوندی که در فایل گزارش نشان داده می‌شود، سفارش دهید.

پس از راه اندازی، اجازه دهید دستگاه برای چند دقیقه بدون وقفه کار کند. باید خروجی گزارش مربوط به درخواست کننده OTA، دانلود تصویر OTA و OTAImageProcessor را مشاهده کنید.

پس از نصب تصویر، توجه کنید که زمان کامپایل تصویر با زمان آپلود شده در کنسول مطابقت دارد و دیرتر از زمان کامپایل است که در ابتدا بوت گزارش شده است. اجرای grep با الگوی زیر در حالت regex در screenlog.0 می‌تواند فرآیند 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

پس از اجرای اولیه، می توانید مراحل موجود در بخش ایجاد و آپلود تصویر OTA را بدون آپلود تصویر جدید تکرار کنید. این بار نسخه ها را به 1 برگردانید.

menuconfig اجرا کنید و در گزینه های منوی تعاملی:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Version String روی v1.0 تنظیم کنید.

  5. Device Software Version Number روی 1 تنظیم کنید.

  6. s را برای ذخیره پیکربندی فشار دهید، سپس q را برای خروج از menuconfig فشار دهید.

دستگاه را از خانه خود در GHA خارج کنید.

تصویر را بسازید، اگر قبلا ساخته نشده است:

idf.py build

فلش کن:

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

مراحل کمیسیون به Google Home را تکرار کنید و در صورت نیاز OTA را رعایت کنید .

به‌روزرسانی نرم‌افزار OTA را تأیید اعتبار کنید

نسخه نرم افزار دستگاه را می توان با استفاده از برنامه Google Home (GHA) بررسی کرد. پس از راه اندازی دستگاه، مراحل زیر را دنبال کنید:

  1. کاشی دستگاه را روی صفحه اصلی GHA فشار دهید
  2. روی نماد در بالا سمت راست ضربه بزنید
  3. روی اطلاعات فنی ضربه بزنید
  4. قسمت Software version را بررسی کنید

صفحه برنامه Google Home فیلد نسخه نرم افزار را نشان می دهد