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

تستخدِم التعليمات التالية مثال تطبيق الإضاءة من حزمة SDK لنظام التشغيل Matter مع لوحة تطوير 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

بعد ذلك، نتحقّق من الإصدار المستخدَم في سير عمل GitHub الخاص بـ ESP32 لتحديد صورة 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 وملف تعريف العميل (IDF) لخدمة المعالجة المحدودة للبيانات (ESP):

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 على معرّف الجهاز الذي ضبطته في عملية دمج Matter في Google Home Developer Console.

فعِّل علامة "مقدّم طلب OTA":

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. تفعيل علامة طلب OTA [*] Enable OTA Requestor

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

فعِّل علامة إنشاء Matter OTA Image:

  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 ل exitingmenuconfig.

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

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

إنشاء جهازك

الآن، شغِّل الإصدار وفلش الجهاز:

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

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

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

حمِّل نسخة OTA إلى Developer Console باتّباع تعليمات تحميل OTA.

تفويض Google Home وملاحظة عمليات OTA

تأكَّد من توصيل جهازك بجهاز 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) من خلال رمز الاستجابة السريعة من الرابط الذي يظهر في ملف السجل.

اترك الجهاز يعمل بدون انقطاع لعدة دقائق بعد بدء التشغيل. يجب مراقبة إخراج السجلّ المرتبط بطلب OTA وتنزيل صورة OTA وOTAImageProcessor.

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

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

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

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