در دستورالعملهای زیر از برنامه روشنایی مثال از Matter کیت توسعه نرمافزار بههمراه برد توسعه M5Stack ESP32 استفاده شده است.
راهاندازی محیط ساخت
ابتدا، کیت توسعه نرمافزار Matter را همسانهسازی کنید.
در این مثال، حداقل تعهد پشتیبانیشده برای «نسخه ۵» Matter Google Home را بررسی میکنیم:
mkdir otaprepcd otaprepgit 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 1image: 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 /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shساختن و فلاش زدن
تکلیف بعدی ساختن تصویر و انتقال کیت توسعه به حافظه فلش برای دریافت بهروزرسانی سفتافزار OTA Matter است.
برای انجام این کار، باید تصویری ایجاد کنید.
ابتدا ساخت را بااستفاده از ابزار menuconfig از ESP IDF پیکربندی کنید.
cd examples/lighting-app/esp32
idf.py menuconfigدر منو تعاملی، تنظیمات زیر را پیکربندی کنید:
Component config --->CHIP Device Layer --->Device Identification Options --->
Vendor IDرا روی VID اختصاصدادهشده Connectivity Standards Alliance (Alliance) تنظیم کنید.
Product IDرا روی PID که در ادغام Matter در Google Home Developer Console تنظیم کردهاید تنظیم کنید.
پرچم «درخواستکننده OTA» را فعال کنید:
Component config -->CHIP Core -->System options --->پرچم «درخواستکننده OTA» را فعال کنید
[*] Enable OTA Requestorبرای برگشتن به منو سطح بالا، ESC را دوبار فشار دهید.
پرچم ایجاد تصویر Matter OTA را فعال کنید:
Component config -->CHIP Device Layer --->Matter OTA Image --->[*] Generate OTA IMAGE
شماره نسخه را تنظیم کنید:
Application manager --->انتخاب
[*] Get the project version from Kconfig
Project version (NEW)روی1.0تنظیم شودبرای ذخیره کردن پیکربندی، 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در منو تعاملی، موارد زیر را بهروز کنید:
Application manager --->- انتخاب
[*] Get the project version from Kconfig -
Project version (NEW)روی2.0تنظیم شود - برای ذخیره کردن پیکربندی، 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 را اجرا کنید و در گزینههای منو تعاملی:
Component config -->CHIP Device Layer --->Device Identification Options
Version Stringرا رویv1.0تنظیم کنید.
Device Software Version Numberرا روی1تنظیم کنید.برای ذخیره پیکربندی، s را فشار دهید، سپس برای خروج از
menuconfig، q را فشار دهید.
دستگاه را در GHA از خانه بردارید.
تصویر را بسازید، اگر ازقبل ساخته نشده است:
idf.py buildفلاش زدن:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashدرصورت نیاز، مراحل مأمور کردن Google Home و مشاهده OTA را تکرار کنید.
تأیید درستی «بهروزرسانی نرمافزار ازطریق هوا»
نسخه نرمافزار دستگاه را میتوان بااستفاده از «برنامه Google Home» (GHA) بررسی کرد. پساز راهاندازی دستگاه، این رویهها را دنبال کنید:
- کاشی دستگاه را در صفحه اصلی GHA طولانی فشار دهید
- روی نماد در بالا سمت چپ تکضرب بزنید
- روی اطلاعات فنی تکضرب بزنید
- فیلد نسخه نرمافزار را بررسی کنید