آزمایش «به‌روزرسانی ازطریق هوا» در Espressif ESP32

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

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

ابتدا، کیت توسعه نرم‌افزار Matter را همسانه‌سازی کنید.

در این مثال، حداقل تعهد پشتیبانی‌شده برای «نسخه ۵» Matter Google Home را بررسی می‌کنیم:

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» را بررسی می‌کنیم تا تعیین کنیم کدام تصویر Docker برای ساخت ما مناسب‌تر است:

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

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

هرگاه فرمان 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

مقداردهی اولیه کیت توسعه نرم‌افزار

در این محتوی، کیت توسعه نرم‌افزار Matter و ESP IDF را مقداردهی اولیه می‌کنیم:

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

ساختن و فلاش زدن

تکلیف بعدی ساختن تصویر و انتقال کیت توسعه به حافظه فلش برای دریافت به‌روزرسانی سفت‌افزار OTA Matter است.

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

ابتدا ساخت را بااستفاده از ابزار 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، مراحل ایجاد گواهینامه‌های آزمایش دستگاه 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 از میزبان محتوی شما نصب شده است، تصویر OTA در میزبان محتوی شما دردسترس است.

تصویر «به‌روزرسانی ازطریق هوا» را با دنبال کردن دستورالعمل‌های بارگذاری «به‌روزرسانی ازطریق هوا» در Developer Console بارگذاری کنید.

دستور دادن به Google Home و مشاهده OTA

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

screen -L /dev/ttyUSB0 115200

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

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

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

در برونداد دستگاه، باید VID و PID را که قبلاً تنظیم کرده‌اید، و همچنین نشانی وب تصویر رمزینه پاسخ‌سریع را که برای مأمور کردن دستگاه استفاده می‌کنید ببینید.

[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) راه‌اندازی کنید و از رمزینه پاسخ‌سریع موجود در پیوندی که در فایل گزارش ظاهر می‌شود استفاده کنید.

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

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

دستگاه را در GHA از خانه بردارید.

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

idf.py build

فلاش زدن:

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

درصورت نیاز، مراحل مأمور کردن Google Home و مشاهده OTA را تکرار کنید.

تأیید درستی «به‌روزرسانی نرم‌افزار ازطریق هوا»

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

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

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