Espressif ESP32 এ OTA পরীক্ষা করুন

নিম্নলিখিত নির্দেশাবলীতে Matter এসডিকে (Matter SDK) থেকে লাইটিং অ্যাপের উদাহরণটি এবং একটি এম৫স্ট্যাক ইএসপি৩২ (M5Stack ESP32) ডেভেলপমেন্ট বোর্ড ব্যবহার করা হয়েছে।

বিল্ড পরিবেশ সেটআপ

প্রথমে, Matter SDK ক্লোন করুন।

এই উদাহরণে, আমরা গুগল হোমের 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 গিটহাব ওয়ার্কফ্লোতে ব্যবহৃত সংস্করণটি যাচাই করি:

cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: connectedhomeip/chip-build-esp32:0.5.99

আমরা ডকার ইমেজ থেকে একটি কন্টেইনার রান করি এবং কন্টেইনারের ভেতরে ম্যাটার এসডিকে 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

নির্মাণ এবং ফ্ল্যাশ

পরবর্তী কাজ হলো ইমেজটি তৈরি করা এবং Matter ওটিএ ফার্মওয়্যার আপডেটটি পাওয়ার জন্য ডেভেলপমেন্ট কিটটি ফ্ল্যাশ করা।

এটি করার জন্য, আপনাকে একটি ছবি তৈরি করতে হবে।

প্রথমে 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. Google Home Developer Console Matter ইন্টিগ্রেশনে আপনি যে PID সেট করেছেন, সেটিতে Product ID সেট করুন।

OTA অনুরোধকারী ফ্ল্যাগটি সক্রিয় করুন:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. OTA অনুরোধকারী ফ্ল্যাগ সক্রিয় করুন [*] 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 চাপুন

পরীক্ষার সার্টিফিকেট সেট আপ করুন

CD, DAC, এবং PAI সার্টিফিকেট তৈরি করতে "Create Matter device test certificates"- এর ধাপগুলো অনুসরণ করুন।

আপনার ডিভাইস তৈরি করুন

এখন বিল্ডটি চালান এবং ডিভাইসটি ফ্ল্যাশ করুন:

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 চাপুন, তারপর 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 এসডিকে আপনার কন্টেইনার হোস্ট থেকে মাউন্ট করা হয়, তাই ওটিএ ইমেজটি আপনার কন্টেইনার হোস্টেই উপলব্ধ থাকে।

OTA আপলোড নির্দেশাবলী অনুসরণ করে Developer Console OTA ইমেজটি আপলোড করুন।

গুগল হোমকে দায়িত্ব প্রদান এবং ওটিএ পর্যবেক্ষণ করুন

আপনার ডিভাইসটি ইউএসবি-র মাধ্যমে হোস্ট লিনাক্স মেশিনের সাথে সংযুক্ত আছে কিনা তা নিশ্চিত করুন। নিচের উদাহরণটিতে ডিভাইসের লগ পড়ার জন্য GNU screen এর ব্যবহার দেখানো হয়েছে:

screen -L /dev/ttyUSB0 115200

এটি ডিভাইস থেকে প্রাপ্ত আউটপুট আপনার টার্মিনালে প্রদর্শন করে এবং একই আউটপুট screenlog.0 নামের ডিফল্ট স্ক্রিন লগ ফাইলে লিখে রাখে।

আপনি screenlog.0 ফাইলটি অন্য কোনো টেক্সট এডিটরে খুলতে পারেন অথবা cat , tail , more , বা grep ব্যবহার করে অন্য কোনো শেলে এটি প্রদর্শন করতে পারেন।

বুট হওয়ার লগ দেখতে ডিভাইসটির পাশে থাকা লাল রিসেট বাটনটি চাপুন।

ডিভাইস আউটপুটে, আপনি পূর্বে সেট করা VID এবং PID দেখতে পাবেন, সেইসাথে QR কোড ইমেজের একটি 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

আপনার বাড়িতে হাবটি অনলাইন আছে কিনা তা নিশ্চিত করুন।

লগ ফাইলে প্রদর্শিত লিঙ্ক থেকে QR কোডটি ব্যবহার করে Google Home app (GHA) দিয়ে ডিভাইসটি চালু করুন।

চালু করার পর ডিভাইসটিকে কয়েক মিনিট নিরবচ্ছিন্নভাবে চলতে দিন। আপনাকে OTA Requestor, OTA image download, এবং OTAImageProcessor সম্পর্কিত লগ আউটপুট পর্যবেক্ষণ করতে হবে।

ইমেজটি ইনস্টল হওয়ার পর লক্ষ্য করুন যে, ইমেজটির কম্পাইল টাইম কনসোলে আপলোড করা ইমেজটির কম্পাইল টাইমের সাথে মিলে যায় এবং এটি প্রথম বুটের সময় রিপোর্ট করা কম্পাইল টাইমের চেয়ে পরের সময়। রেগুলার এক্সপ্রেশন মোডে screenlog.0 এর উপর নিম্নলিখিত প্যাটার্নটি দিয়ে grep চালালে OTA প্রক্রিয়াটি ব্যাখ্যা করা যেতে পারে:

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 চাপুন, তারপর menuconfig থেকে বের হতে q চাপুন

GHA -তে আপনার বাড়ি থেকে ডিভাইসটি সরিয়ে ফেলুন।

ইমেজটি তৈরি করুন, যদি এটি আগে থেকে তৈরি করা না থাকে:

idf.py build

এটা ফ্ল্যাশ করুন:

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

Google Home চালু করার ধাপগুলো পুনরাবৃত্তি করুন এবং প্রয়োজন অনুযায়ী OTA পর্যবেক্ষণ করুন

OTA সফটওয়্যার আপডেট যাচাই করুন

গুগল হোম অ্যাপ (GHA) ব্যবহার করে ডিভাইসের সফটওয়্যার ভার্সন চেক করা যায়। ডিভাইসটি চালু হয়ে গেলে, এই পদ্ধতিগুলো অনুসরণ করুন:

  1. GHA প্রধান স্ক্রিনে ডিভাইস টাইলটিতে দীর্ঘক্ষণ চাপ দিন।
  2. উপরের ডানদিকে থাকা আইকনে ট্যাপ করুন।
  3. প্রযুক্তিগত তথ্য ট্যাপ করুন
  4. সফটওয়্যার সংস্করণ ক্ষেত্রটি পরীক্ষা করুন

গুগল হোম অ্যাপ স্ক্রিনে সফটওয়্যার ভার্সন ফিল্ড দেখানো হচ্ছে