اختبار OTA على Espressif ESP32

يمكن اتّباع التعليمات التالية لاستخدام مثال تطبيق الإضاءة من حزمة تطوير البرامج (SDK) Matter مع لوحة تطوير M5Stack ESP32.

إعداد بيئة الإنشاء

أولاً، عليك استنساخ حزمة تطوير البرامج (SDK) الخاصة بـ "Matter".

في هذا المثال، نلقي نظرة على الحد الأدنى لمستوى الالتزام المتوافق مع الإصدار 5 من 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 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

في القائمة التفاعلية، يمكنك ضبط الإعدادات التالية:

  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.

تفعيل علامة مقدِّم طلب الوصول عبر الهواء:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. تفعيل العلامة [*] Enable OTA Requestor لمقدِّم الطلب عبر الهواء

  5. اضغط على ESC مرتين للرجوع إلى قائمة المستوى الأعلى.

تفعيل علامة إنشاء صور Matter عبر الهواء:

  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.

إعداد شهادات الاختبار

اتّبِع الخطوات الواردة في إنشاء شهادات اختبار لأجهزة Matter لإنشاء شهادات CD وDAC وPAI.

تصميم جهازك

شغِّل الآن عملية الإصدار وثبِّت الجهاز على النحو التالي:

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

إنشاء صورة 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_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، وفي خيارات القائمة التفاعلية:

  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

يمكن التحقّق من إصدار برنامج الجهاز باستخدام تطبيق Google Home (GHA). بعد تشغيل الجهاز، اتّبِع الإجراءات التالية:

  1. اضغط مع الاستمرار على مربّع الجهاز في شاشة "GHA" الرئيسية.
  2. انقر على الرمز في أعلى يسار الشاشة.
  3. انقر على المعلومات الفنية.
  4. تحقَّق من حقل إصدار البرنامج.

شاشة في تطبيق Google Home تعرض حقل إصدار البرنامج