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

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

إعداد بيئة الإصدار

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

في هذا المثال، نطّلع على الحد الأدنى لعملية الالتزام المتوافقة مع Matter الإصدار 5 من 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. تفعيل علامة مقدّم الطلب عبر الهواء (OTA) [*] 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

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

يمكنك الآن تغيير إعدادات الإصدار مرة أخرى لإنشاء صورة عبر الهواء. استخدِم الصورة نفسها، ولكن مع رقم إصدار متزايد.

تشغيل "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

بما أنّه يتم تحميل حزمة تطوير البرامج (SDK) Matter من مضيف الحاوية، تتوفّر صورة عبر الهواء على مضيف الحاوية.

حمِّل صورة التحديث عبر الهواء إلى 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 إلى توضيح عملية 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

بعد التنفيذ الأوّلي، يمكنك تكرار الخطوات الواردة في القسم إنشاء صورة عبر الهواء وتحميلها بدون تحميل صورة جديدة. هذه المرة، اضبط الإصدارات مرة أخرى على 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

كرِّر الخطوات الواردة في مقالة Commission to Google Home واطّلِع على التحديثات عبر الهواء حسب الحاجة.

التحقّق من تحديث برنامج التحديث عبر الهواء

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

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

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