تست OTA روی Espressif ESP32

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

تنظیمات محیط ساخت

ابتدا، SDK Matter را کلون کنید.

در این مثال، حداقل کامیت پشتیبانی‌شده برای نسخه Matter 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 را بررسی می‌کنیم تا مشخص کنیم کدام تصویر داکر برای ساخت ما مناسب‌تر است:

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

ما یک کانتینر از ایمیج داکر اجرا می‌کنیم و پرچم‌هایی را برای نصب 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

یا با استفاده از دستور زیر یک جلسه روت (root session) ایجاد کنید:

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 را فشار دهید، سپس برای خروج از menuconfig دکمه q را فشار دهید.

تنظیم گواهی‌های آزمون

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

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

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

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 را فشار دهید، سپس برای خروج از menuconfig دکمه q را فشار دهید.

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

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

مطمئن شوید که دستگاه شما با USB به دستگاه میزبان لینوکس متصل است. مثال زیر نحوه‌ی استفاده از GNU 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

مطمئن شوید که هاب شما در خانه‌تان آنلاین است.

دستگاه را با استفاده از کد QR موجود در لینکی که در فایل گزارش نمایش داده می‌شود، با 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

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

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

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

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

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