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

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

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

सबसे पहले, Matter SDK टूल का क्लोन बनाएं.

इस उदाहरण में, हमने Google Home की कम से कम स्टैंडर्ड सदस्यता की जानकारी दी है Matter रिलीज़ 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

SDK टूल शुरू करें

कंटेनर में, हम Matter SDK टूल और ईएसपी आईडीएफ़ शुरू करते हैं:

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

बिल्ड और फ़्लैश

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

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

सबसे पहले बिल्ड को ईएसपी आईडीएफ़ से मिली menuconfig सुविधा का इस्तेमाल करके कॉन्फ़िगर करें.

cd examples/lighting-app/esp32
idf.py menuconfig

इंटरैक्टिव मेन्यू में, ये सेटिंग कॉन्फ़िगर करें:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Connectivity Standards Alliance (Alliance) को असाइन किए गए वीआईडी पर Vendor ID सेट करें.

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

OTA अनुरोधकर्ता फ़्लैग चालू करें:

  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 डिवाइस के टेस्ट सर्टिफ़िकेट बनाएं सीडी, 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 को दो बार दबाएं menuconfig से बाहर निकलने के लिए q दबाएं.

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

Google Home पर कमीशन पाना और ओटीए की निगरानी करना

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

screen -L /dev/ttyUSB0 115200

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

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

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

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

[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 पर रेगुलर एक्सप्रेशन मोड में नीचे दिया गया पैटर्न, ओटीए को दिखा सकता है process:

$ 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 ऐप्लिकेशन (जीएचए) का इस्तेमाल करके, डिवाइस के सॉफ़्टवेयर का वर्शन देखा जा सकता है. डिवाइस को चालू करने के बाद, यह तरीका अपनाएं:

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

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