اختبار 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، ونمرّر العلامات لتثبيت Matter SDK في الحاوية ولإتاحة الوصول إلى جهاز 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) وESP IDF على النحو التالي:Matter

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

فعِّل العلامة OTA Requestor باتّباع الخطوات التالية:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. فعِّل علامة OTA Requestor [*] Enable OTA Requestor

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

فعِّل علامة إنشاء صورة Matter عبر الهواء (OTA):

  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 وتحميلها

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

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

اترك الجهاز يعمل بدون انقطاع لعدة دقائق بعد إعداده. يجب أن تلاحظ ناتج السجلّ المرتبط بـ OTA Requestor وتنزيل صورة OTA وOTAImageProcessor.

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