Espressif ESP32 पर OTA का टेस्ट करें

नीचे दिए गए निर्देशों में, Matter SDK के लाइटिंग ऐप्लिकेशन के उदाहरण का इस्तेमाल किया गया है. साथ ही, M5Stack ESP32 डेवलपमेंट बोर्ड का इस्तेमाल किया गया है.

बिल्ड एनवायरमेंट सेटअप करना

सबसे पहले, Matter SDK को क्लोन करें.

इस उदाहरण में, हम Google Home के Matter Release 5 के लिए, कम से कम ज़रूरी कमिट की जांच करते हैं:

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

एसडीके टूल को शुरू करना

कंटेनर में, हम Matter SDK और ESP IDF को शुरू करते हैं:

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

बनाना और फ़्लैश करना

अगला टास्क, इमेज बनाना और डेवलपमेंट किट को फ़्लैश करना है, ताकि Matter OTA फ़र्मवेयर अपडेट मिल सके.

इसके लिए, आपको एक इमेज बनानी होगी.

सबसे पहले, ESP IDF की menuconfig यूटिलिटी का इस्तेमाल करके, बिल्ड को कॉन्फ़िगर करें.

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)-असाइन किए गए VID पर सेट करें.

  5. Product ID को उस पीआईडी पर सेट करें जिसे आपने Google Home Developer Console में Matter इंटिग्रेशन पर सेट किया है.

OTA Requestor फ़्लैग चालू करें:

  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 को दो बार दबाएं. फिर, menuconfig से बाहर निकलने के लिए q दबाएं.

टेस्ट सर्टिफ़िकेट सेट अप करना

सीडी, डीएसी, और पीएआई सर्टिफ़िकेट बनाने के लिए, Matter डिवाइस के टेस्ट सर्टिफ़िकेट बनाना में दिया गया तरीका अपनाएं.

अपना डिवाइस बनाना

अब बिल्ड चलाएं और डिवाइस को फ़्लैश करें:

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

OTA इमेज बनाना और अपलोड करना

अब ओटीए इमेज बनाने के लिए, बिल्ड सेटिंग को फिर से बदलें. उसी इमेज का इस्तेमाल करें, लेकिन वर्शन नंबर बढ़ा दें.

menuconfig रन करें.

idf.py menuconfig

इंटरैक्टिव मेन्यू में, इन्हें अपडेट करें:

  1. Application manager --->
  2. [*] Get the project version from Kconfig चुनें
  3. Project version (NEW) को 2.0 पर सेट करें
  4. कॉन्फ़िगरेशन सेव करने के लिए, s दबाएं. इसके बाद, Enter को दो बार दबाएं. इसके बाद, menuconfig से बाहर निकलने के लिए, q दबाएं.

इमेज बनाना और उसे वापस पाना. इस उदाहरण में, ओटीए के लिए इमेज की जगह और 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 को आपके कंटेनर होस्ट से माउंट किया जाता है. इसलिए, OTA इमेज आपके कंटेनर होस्ट पर उपलब्ध होती है.

OTA अपलोड करने के निर्देशों का पालन करके, OTA इमेज को Developer Console पर अपलोड करें.

Google Home को कमीशन करें और OTA देखें

पक्का करें कि आपका डिवाइस, यूएसबी के ज़रिए होस्ट Linux मशीन से कनेक्ट हो. डिवाइस के लॉग पढ़ने के लिए, GNU screen के इस्तेमाल का तरीका यहां दिया गया है:

screen -L /dev/ttyUSB0 115200

इससे डिवाइस का आउटपुट, आपके टर्मिनल पर दिखता है. साथ ही, इसी आउटपुट को डिफ़ॉल्ट स्क्रीन लॉग फ़ाइल में लिखा जाता है. इस फ़ाइल का नाम screenlog.0 होता है.

screenlog.0 फ़ाइल को किसी अन्य टेक्स्ट एडिटर में खोला जा सकता है. इसके अलावा, इसे cat, tail, more या grep की मदद से किसी अन्य शेल में दिखाया जा सकता है.

बूट से लॉग देखने के लिए, डिवाइस के किनारे मौजूद लाल रंग के रीसेट बटन को दबाएं.

डिवाइस के आउटपुट में, आपको पहले से सेट किया गया VID और PID दिखना चाहिए. साथ ही, क्यूआर कोड इमेज का यूआरएल भी दिखना चाहिए. इस यूआरएल का इस्तेमाल करके, डिवाइस को चालू किया जाएगा.

[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 से जुड़े लॉग आउटपुट पर ध्यान देना चाहिए.

इमेज इंस्टॉल होने के बाद, देखें कि इमेज के कंपाइल होने का समय, कंसोल पर अपलोड की गई इमेज के कंपाइल होने के समय से मेल खाता हो. साथ ही, यह समय पहले बूट के समय रिपोर्ट किए गए कंपाइल होने के समय से बाद का हो. screenlog.0 पर रेगुलर एक्सप्रेशन मोड में, grep को इस पैटर्न के साथ लागू करने पर, ओटीए प्रोसेस के बारे में पता चलता है:

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 दबाएं. इसके बाद, menuconfig से बाहर निकलने के लिए, q दबाएं.

GHA में जाकर, डिवाइस को अपने होम से हटाएं.

अगर इमेज पहले से नहीं बनी है, तो उसे बनाएं:

idf.py build

इसे फ़्लैश करें:

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

ज़रूरत के मुताबिक, Google Home को चालू करना और ओटीए की जांच करना में दिया गया तरीका दोहराएं.

ओटीए सॉफ़्टवेयर अपडेट की पुष्टि करना

डिवाइस के सॉफ़्टवेयर वर्शन की जानकारी, Google Home ऐप्लिकेशन (GHA) का इस्तेमाल करके देखी जा सकती है. किसी डिवाइस को चालू करने के बाद, यह तरीका अपनाएं:

  1. GHA की मुख्य स्क्रीन पर मौजूद डिवाइस टाइल को दबाकर रखें
  2. सबसे ऊपर दाईं ओर मौजूद, आइकॉन पर टैप करें
  3. तकनीकी जानकारी पर टैप करें
  4. सॉफ़्टवेयर का वर्शन फ़ील्ड देखें

Google Home ऐप्लिकेशन की स्क्रीन पर सॉफ़्टवेयर वर्शन फ़ील्ड दिख रहा है