تستخدم التعليمات التالية تطبيق الإضاءة مثال من حزمة تطوير البرامج (SDK) Matter مع M5Stack ESP32 مجلس التطوير.
إعداد بيئة الإنشاء
أولاً، عليك استنساخ حزمة تطوير البرامج (SDK) الخاصة بـ "Matter".
في هذا المثال، نلقي نظرة على الحد الأدنى لمستوى الالتزام المعتمَد لأجهزة Google Home. 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 Workflow لتحديد صورة Docker الأنسب لتصميمنا:
$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: connectedhomeip/chip-build-esp32:0.5.99
نقوم بتشغيل حاوية من صورة Docker، ونمرر علامات لتحميل حزمة تطوير البرامج (SDK) 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
عند تشغيل الأمر 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)
في الحاوية، نعمل على إعداد حزمة تطوير البرامج (SDK) Matter وESP IDF:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
إنشاء واسترجاع محتوى
تتمثل المهمة التالية في إنشاء الصورة وإطلاق حزمة التطوير لاستلام تحديث البرامج الثابتة لجهاز 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.
تفعيل علامة مقدِّم طلب الوصول عبر الهواء:
Component config -->
CHIP Core -->
System options --->
تفعيل العلامة
[*] Enable OTA Requestor
لمقدِّم الطلب عبر الهواءاضغط على ESC مرتين للرجوع إلى قائمة المستوى الأعلى.
تفعيل علامة إنشاء صور Matter عبر الهواء:
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
إعداد شهادات الاختبار
اتّبِع الخطوات الواردة في إنشاء شهادات اختبار جهاز Matter لإنشاء شهادات الأقراص المدمجة وDAC وPAI
تصميم جهازك
شغِّل الآن عملية الإصدار وثبِّت الجهاز على النحو التالي:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
إنشاء صورة OTA وتحميلها
يمكنك الآن تغيير إعدادات الإصدار مرة أخرى لإنشاء صورة عبر الهواء. يمكنك استخدام نفس الصورة ولكن برقم إصدار متزايد.
تشغيل menuconfig
idf.py menuconfig
في القائمة التفاعلية، حدِّث ما يلي:
Application manager --->
- اختيار
[*] Get the project version from Kconfig
- ضبط
Project version (NEW)
على2.0
- اضغط على s لحفظ الإعداد، ثم اضغط على Enter مرتين، ثم اضغط على
q للخروج من
menuconfig
.
قم بإنشاء الصورة واستردادها. يوضح المثال أدناه كل من الموقع
صورة التحديث عبر الهواء والمخرجات عند التحليل باستخدام 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
بما أنّه تم تثبيت حزمة تطوير البرامج (SDK) "Matter" من مضيف الحاوية، تتوفّر صورة OTA في مضيف الحاوية.
تحميل صورة "عبر الهواء" إلى Developer Console من خلال اتّباع تعليمات التحميل عبر الهواء.
العمولة على Google Home ومراقبة الإرسال عبر الهواء
تأكَّد من توصيل جهازك بجهاز Linux المضيف باستخدام USB. تشير رسالة الأشكال البيانية
يوضح المثال التالي استخدام GNU screen
لقراءة سجلات الجهاز:
screen -L /dev/ttyUSB0 115200
يؤدي هذا إلى عرض الناتج من الجهاز إلى الوحدة الطرفية وكتابة
هو الإخراج نفسه إلى ملف سجلّ الشاشة التلقائي المُسمّى screenlog.0
.
يمكنك فتح ملف screenlog.0
في محرِّر نصوص آخر أو عرضه في
واجهة برمجة تطبيقات أخرى تستخدم cat
أو tail
أو more
أو grep
اضغط على زر إعادة الضبط الأحمر في جانب الجهاز لعرض السجلات من عملية التشغيل.
في إخراج الجهاز، من المفترض أن يظهر لك أيضًا VID وPID اللذان تم ضبطهما مسبقًا. كعنوان URL لصورة رمز الاستجابة السريعة التي ستستخدمها لإعداد الجهاز.
[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) بالإنترنت في منزلك.
يمكنك تفويض الجهاز باستخدام "Google Home app (GHA)" باستخدام رمز الاستجابة السريعة من الرابط الذي يظهر في ملف السجل.
دع الجهاز يعمل بلا انقطاع لعدة دقائق بعد التشغيل.
يجب ملاحظة مخرجات السجل المتعلقة بمقدِّم الطلب عبر الهواء، وتنزيل صورة عبر الهواء،
وOTAImageProcessor
.
بعد تثبيت الصورة، يُرجى العلم بأنّ وقت تجميع الصورة
مع قيمة النتائج التي تم تحميلها على وحدة التحكم، وتتأخر عن
وقت التجميع الذي تم الإبلاغ عنه عند التشغيل الأول. يتم تنفيذ grep
باستخدام
يمكن للنمط التالي في وضع التعبير العادي على screenlog.0
توضيح اتصال الهواء
المعالجة:
$ 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
بعد التنفيذ الأولي، يمكنك تكرار الخطوات الواردة في القسم
إنشاء صورة عبر الهواء وتحميلها بدون تحميل صورة جديدة. هذه المرة،
إعادة ضبط الإصدارات على 1
.
شغِّل menuconfig
، وفي خيارات القائمة التفاعلية:
Component config -->
CHIP Device Layer --->
Device Identification Options
اضبط السمة
Version String
علىv1.0
.اضبط السمة
Device Software Version Number
على1
.اضغط على s لحفظ الإعدادات، ثم اضغط على q للخروج من
menuconfig
.
إزالة الجهاز من منزلك في GHA
إنشاء الصورة إذا لم تكن قد سبق إنشاؤها:
idf.py build
فلاش:
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
يُرجى تكرار الخطوات الواردة في مقالة العمولة على Google Home ومراقبة التحديثات عبر الهواء حسب الحاجة.
التحقق من تحديث برنامج OTA
يمكن التحقّق من إصدار برنامج الجهاز باستخدام تطبيق Google Home (GHA). بعد تشغيل الجهاز، اتّبِع الإجراءات التالية:
- اضغط مع الاستمرار على مربّع الجهاز في شاشة "GHA" الرئيسية.
- انقر على الرمز في أعلى يسار الشاشة.
- انقر على المعلومات الفنية.
- تحقَّق من حقل إصدار البرنامج.