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

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

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

أولاً، استنسِخ Matter SDK.

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

في الحاوية، نُعدّ Matter SDK وESP IDF:

cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh

الإصدار والتثبيت

المهمة التالية هي إنشاء الصورة وتثبيت حزمة التطوير لتلقّي تحديث البرامج الثابتة عبر الهواء (OTA) 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

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

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

شغِّل 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

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

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

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

التحقّق من صحة تحديث البرامج

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

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

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