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

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

إعداد بيئة

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

في هذا المثال، نطّلع على الحد الأدنى المطلوب لمدة الاشتراك للإصدار 5 من Google Home: Matter

$ 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 لتحديد أفضل صورة 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 على معرّف المورّد (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

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

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

شغِّل 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 من مضيف الحاوية، تتوفّر صورة التحديث على الإنترنت في مضيف الحاوية.

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

تأكَّد من اتصال "المركز" بالإنترنت في منزلك.

يمكنك تفويض الجهاز باستخدام 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

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

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

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

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

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