B91 ডেভেলপমেন্ট বোর্ড এবং OpenThread এর সাথে একটি থ্রেড নেটওয়ার্ক তৈরি করুন

১. ভূমিকা

26b7f4f6b3ea0700.png

ওপেনথ্রেড হলো থ্রেড® নেটওয়ার্কিং প্রোটোকলের একটি ওপেন-সোর্স বাস্তবায়ন, যা ইন্টারনেট অফ থিংস (IoT) ডিভাইসের জন্য ডিজাইন করা একটি শক্তিশালী ও সুরক্ষিত ওয়্যারলেস মেশ নেটওয়ার্কিং প্রোটোকল। ওপেনথ্রেড গুগলের নেস্ট টিম দ্বারা তৈরি করা হয়েছে এবং এটি একটি ওপেন-সোর্স প্রজেক্ট হিসেবে ডেভেলপার কমিউনিটির জন্য বিনামূল্যে উপলব্ধ।

থ্রেড স্পেসিফিকেশন স্মার্ট হোম এবং বাণিজ্যিক ভবনগুলিতে সাধারণত পাওয়া যায় এমন সীমিত-সম্পদযুক্ত ডিভাইসগুলির জন্য একটি নির্ভরযোগ্য, সুরক্ষিত এবং শক্তি-সাশ্রয়ী ওয়্যারলেস যোগাযোগ প্রোটোকল প্রতিষ্ঠা করে। ওপেনথ্রেড-এর মধ্যে থ্রেডের সম্পূর্ণ নেটওয়ার্ক লেয়ারের পরিধি অন্তর্ভুক্ত রয়েছে, যেমন IPv6, 6LoWPAN, MAC নিরাপত্তাসহ IEEE 802.15.4, মেশ লিঙ্ক স্থাপন এবং মেশ রাউটিং।

টেলিংক, জেফির আরটিওএস (Zephyr RTOS)-এ ওপেনথ্রেড (OpenThread) ইমপ্লিমেন্টেশনকে একীভূত করেছে, যা টেলিংক হার্ডওয়্যারের সাথে নির্বিঘ্ন সামঞ্জস্যতা নিশ্চিত করে। এই ইন্টিগ্রেশনের সোর্স কোড গিটহাব (GitHub )-এ সহজেই পাওয়া যায় এবং এটি একটি সফটওয়্যার ডেভেলপমেন্ট কিট (SDK) হিসেবেও সরবরাহ করা হয়।

এই কোডল্যাবে, আপনি বাস্তব হার্ডওয়্যারে ওপেনথ্রেড প্রোগ্রাম করবেন, একটি থ্রেড নেটওয়ার্ক তৈরি ও পরিচালনা করবেন এবং নোডগুলোর মধ্যে বার্তা আদান-প্রদান করবেন। নিচের ছবিতে কোডল্যাবের হার্ডওয়্যার সেটআপটি দেখানো হয়েছে, যেখানে একটি ওটি বর্ডার রাউটার (OTBR) এবং একটি থ্রেড ডিভাইস রয়েছে।

কোডল্যাব_ওভারভিউ.png

আপনি যা শিখবেন

  • Telink Zephyr ডেভেলপমেন্ট এনভায়রনমেন্ট ব্যবহার করে OpenThread ইমপ্লিমেন্টেশন সেট আপ করতে।
  • OpenThread CLI স্যাম্পলগুলো ( ot-cli-ftd এবং ot-rcp ) বিল্ড করে Telink B91 ডেভেলপমেন্ট বোর্ডে ফ্ল্যাশ করতে হবে।
  • Raspberry Pi 3B+ বা তার পরবর্তী সংস্করণে Docker ব্যবহার করে একটি OpenThread Border Router (OTBR) সেট আপ করতে।
  • OTBR-এ একটি থ্রেড নেটওয়ার্ক তৈরি করতে।
  • আউট-অফ-ব্যান্ড ডিবাগিং ব্যবহার করে থ্রেড নেটওয়ার্কে ডিভাইস যুক্ত করতে।
  • CLI ব্যবহার করে থ্রেড নেটওয়ার্কের নোডগুলোর মধ্যে সংযোগ যাচাই করা।

আপনার যা যা লাগবে

হার্ডওয়্যার:

  • দুটি বি৯১ উন্নয়ন বোর্ড।
  • One Raspberry Pi 3B+ or greater with Raspbian OS Image.
  • কমপক্ষে দুটি ইউএসবি পোর্টসহ একটি লিনাক্স মেশিন।
  • একটি ইন্টারনেট-সংযুক্ত সুইচ (বা রাউটার) এবং কয়েকটি ইথারনেট ক্যাবল।

সফটওয়্যার:

  • টেলিংক বার্নিং ও ডিবাগিং টুল — লিনাক্সবিডিটি।
  • সিরিয়াল পোর্ট টার্মিনাল টুল, যেমন PuTTY।
  • অন্যান্য টুল যেমন, গিট এবং ওয়েস্ট।

২. পূর্বশর্তসমূহ

থ্রেড কনসেপ্টস এবং ওপেনথ্রেড সিএলআই

এই কোডল্যাবটি শুরু করার আগে থ্রেডের মৌলিক ধারণা এবং ওপেনথ্রেড সিএলআই (OpenThread CLI)-এর সাথে পরিচিত হওয়ার জন্য ওপেনথ্রেড সিমুলেশন কোডল্যাবটি দেখে নিলে সহায়ক হতে পারে।

লিনাক্স মেশিন

লিনাক্স মেশিনটি (উবুন্টু ভি২০.০৪ এলটিএস বা তার পরবর্তী সংস্করণ) টেলিংক জেফির ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে এবং সমস্ত থ্রেড ডেভেলপমেন্ট বোর্ড ফ্ল্যাশ করার জন্য বিল্ড মেশিন হিসেবে কাজ করে। এই কাজগুলো সম্পন্ন করার জন্য লিনাক্স মেশিনটিতে দুটি খালি ইউএসবি পোর্ট এবং ইন্টারনেট সংযোগ প্রয়োজন।

সিরিয়াল পোর্ট সংযোগ এবং টার্মিনাল

আপনি ডিভাইসটি সরাসরি লিনাক্স মেশিনের ইউএসবি পোর্টে লাগাতে পারেন। এছাড়াও, ডিভাইসগুলো অ্যাক্সেস করার জন্য আপনার একটি সিরিয়াল পোর্ট টার্মিনাল টুলের প্রয়োজন হবে।

এই কোডল্যাবে, FTD Joiner এবং Raspberry Pi নিয়ন্ত্রণের জন্য টার্মিনাল টুল PuTTY ব্যবহার করা হয়েছে। এখানে এর ব্যবহারের একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে, তবে অন্যান্য টার্মিনাল সফটওয়্যারও ব্যবহার করা যেতে পারে।

This codelab needs two sets of B91 Development Kits. The photo below displays the minimum required components in one set.

ওভারভিউ.png

এই কিটগুলোর মধ্যে একটি আরসিপি (রেডিও কো-প্রসেসর) হিসেবে এবং অন্যটি এফটিডি (ফুল থ্রেড ডিভাইস) হিসেবে ব্যবহৃত হবে। যদি আপনার কাছে এখনও কিটটি না থাকে, তবে আপনি টেলিংকের অফিসিয়াল ওয়েবসাইট থেকে আরও বিস্তারিত তথ্য সংগ্রহ করতে পারেন। ব্যবহৃতব্য কিছু উপাদান নিচে দেওয়া হলো:

সূচী

নাম

টেলিঙ্ক বি৯১ উন্নয়ন বোর্ড

টেলিংক বার্নিং বোর্ড

২.৪ গিগাহার্জ অ্যান্টেনা

ইউএসবি কেবল (ইউএসবি এ থেকে মিনি ইউএসবি)

Raspbian OS ইমেজ সহ Raspberry Pi 3B+ বা তার চেয়ে উন্নত সংস্করণ

এই কোডল্যাবের জন্য, Raspbian Bullseye Lite OS ইমেজ অথবা Raspbian Bullseye with Desktop সহ একটি Raspberry Pi 3B+ বা তার চেয়ে উন্নত মডেলের প্রয়োজন হবে। এটি ইথারনেটের মাধ্যমে ইন্টারনেটে সংযুক্ত থাকবে এবং OpenThread Border Router (OTBR)-এর হোস্ট হিসেবে কনফিগার করা হবে।

নেটওয়ার্ক সংযোগ

একটি ইন্টারনেট-সংযুক্ত সুইচ (বা রাউটার) এবং কয়েকটি ইথারনেট ক্যাবল। এগুলো রাস্পবেরি পাইকে লিনাক্স মেশিনের সাথে সংযোগ করতে ব্যবহৃত হয়, যা হোস্টের মাধ্যমে রাস্পবেরি পাই-এর ব্যবহারকারীকে কনফিগারেশন করতে সুবিধা প্রদান করে।

লিনাক্সবিডিটি

টেলিংক বার্নিং অ্যান্ড ডিবাগিং টুল (বিডিটি) , যা সকল টেলিংক চিপ সিরিজের জন্য প্রযোজ্য, আপনাকে টেলিংক বি৯১ ডেভেলপমেন্ট বোর্ডে ওপেনথ্রেড ফার্মওয়্যার মুছে ফেলতে এবং ফ্ল্যাশ করতে দেয়। আপনার লিনাক্স মেশিনে এক্স৮৬-ভিত্তিক লিনাক্স সংস্করণ লিনাক্সবিডিটি ইনস্টল করুন।

অন্যান্য

  • টেলিংক জেফির ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার জন্য গিট।
  • ওয়েস্ট, জেফির প্রজেক্ট পরিচালনা এবং ওপেনথ্রেড বাইনারি তৈরির জন্য।

৩. ফার্মওয়্যার সেট আপ করুন

লিনাক্স মেশিনে একটি CLI টার্মিনাল খুলুন এবং আপনার APT হালনাগাদ আছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডগুলো চালিয়ে শুরু করুন।

$ sudo apt update
$ sudo apt upgrade

একবার সেটি হয়ে গেলে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন।

  1. প্রয়োজনীয় উপাদানগুলো ইনস্টল করুন।
    $ wget https://apt.kitware.com/kitware-archive.sh
    $ sudo bash kitware-archive.sh
    $ sudo apt install --no-install-recommends git cmake ninja-build \
    gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \
    python3-setuptools python3-tk python3-wheel xz-utils file make gcc \
    gcc-multilib g++-multilib libsdl2-dev
    
    Zephyr-এর জন্য বর্তমানে প্রধান নির্ভরতাগুলির ন্যূনতম সংস্করণ প্রয়োজন, যেমন CMake (3.20.0), Python3 (3.6), এবং Devicetree Compiler (1.4.6)।
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    পরবর্তী পদক্ষেপগুলিতে অগ্রসর হওয়ার আগে আপনার সিস্টেমে ইনস্টল করা সংস্করণগুলি যাচাই করুন। যদি সংস্করণগুলি সঠিক না হয়, তাহলে APT মিররটি একটি স্থিতিশীল এবং হালনাগাদ মিররে পরিবর্তন করুন, অথবা এই নির্ভরতাগুলি ম্যানুয়ালি আপডেট করুন।
  2. পশ্চিম দিকে স্থাপন করুন।
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    নিশ্চিত করুন যে ~/.local/bin আপনার $PATH এনভায়রনমেন্ট ভেরিয়েবলে অন্তর্ভুক্ত আছে।
  3. জেফির প্রজেক্টের সোর্স কোড সংগ্রহ করুন।
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. Zephyr-এর জন্য অতিরিক্ত পাইথন নির্ভরতা ইনস্টল করুন।
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. Set up the Zephyr toolchain. Download the Zephyr toolchain (about 1~2 GB) to a local directory to allow you to flash most boards.
    $ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
    
    Zephyr SDK ডাউনলোড করুন এবং নিচে দেখানো অনুযায়ী প্রস্তাবিত পথে রাখুন।
    $HOME/zephyr-sdk[-x.y.z]
    $HOME/.local/zephyr-sdk[-x.y.z]
    $HOME/.local/opt/zephyr-sdk[-x.y.z]
    $HOME/bin/zephyr-sdk[-x.y.z]
    /opt/zephyr-sdk[-x.y.z]
    /usr/zephyr-sdk[-x.y.z]
    /usr/local/zephyr-sdk[-x.y.z]
    
    যেখানে [-xyz] হলো একটি ঐচ্ছিক টেক্সট যা যেকোনো কিছু হতে পারে, যেমন -0.16.1। SDK ইনস্টল করার পর ডিরেক্টরিটি সরানো যাবে না। এরপর Zephyr টুলচেইনটি ইনস্টল করুন।
    $ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ cd zephyr-sdk-0.16.1
    $ ./setup.sh -t riscv64-zephyr-elf -h -c
    
  6. হ্যালো ওয়ার্ল্ড উদাহরণটি বিল্ড করুন। প্রথমে, হ্যালো ওয়ার্ল্ড উদাহরণটি ব্যবহার করে অফিসিয়াল Zephyr প্রজেক্ট কনফিগারেশনটি সঠিক আছে কিনা তা যাচাই করুন, তারপর আপনার কাস্টম প্রজেক্ট সেট আপ করার জন্য এগিয়ে যান।
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    Zephyr রিপোজিটরির রুট ডিরেক্টরি থেকে hello_world উদাহরণটি বিল্ড করতে West বিল্ড কমান্ডটি ব্যবহার করুন। আপনি build/zephyr directory অধীনে zephyr.bin নামের ফার্মওয়্যারটি খুঁজে পাবেন।
  7. Zephyr এনভায়রনমেন্ট স্ক্রিপ্টটি ~/.bashrc তে যোগ করুন। নিম্নলিখিত কমান্ডগুলো চালান।
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. Telink Zephyr রিমোট রিপোজিটরিটি যোগ করুন। Telink রিপোটি আপনার লোকাল মেশিনে একটি ডেভেলপমেন্ট ব্রাঞ্চ হিসেবে ডাউনলোড করুন এবং আপডেট করুন।
    $ cd ~/zephyrproject/zephyr
    $ git remote add telink-semi https://github.com/telink-semi/zephyr
    $ git fetch telink develop
    $ git checkout develop
    $ west update
    $ west blobs fetch hal_telink
    

আরও তথ্যের জন্য, আপনি Zephyr Doc – Getting Started Guide দেখতে পারেন।

B91 ডেভেলপমেন্ট বোর্ডে ফার্মওয়্যার ফ্ল্যাশ করার জন্য, Telink LinuxBDT টুলটি ডাউনলোড করে আপনার লিনাক্স মেশিনের হোম ডিরেক্টরি ( ~ এর মতো একটি লোকাল ডিরেক্টরিতে এক্সট্র্যাক্ট করুন।

$ cd ~
$ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2
$ tar -vxf LinuxBDT.tar.bz2 

ইউএসবি ইন্টারফেসের মাধ্যমে বার্নিং বোর্ডটিকে লিনাক্স মেশিনের সাথে সংযুক্ত করুন এবং তারপর নিম্নলিখিত কমান্ডগুলো প্রবেশ করান।

$ cd LinuxBDT
$ sudo ./bdt lsusb -v
Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller
Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD
Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse
Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6
Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller

যদি আপনি "Telink Web Debugger v3.6" বার্তাটি দেখতে পান, তাহলে বুঝতে হবে যে BDT প্রোগ্রামারটি লিনাক্স মেশিনের সাথে সফলভাবে সংযুক্ত হয়েছে।

ফার্মওয়্যার সংকলন

এই কোডল্যাবটি দুই ধরনের ওপেনথ্রেড ফার্মওয়্যার তৈরি করবে:

  • ot-cli-ftd ,
  • এবং ot-rcp .

সংকলন পদ্ধতিগুলো নিম্নরূপঃ

  1. রেডিও কো-প্রসেসর ( ot-rcp )
    $ cd ~/zephyrproject
    $ rm -rf build_ot_coprocessor
    $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
    
  2. ইন্টারেক্টিভ কমান্ড লাইন সহ পূর্ণাঙ্গ থ্রেড ডিভাইস ( ot-cli-ftd )
    $ cd ~/zephyrproject
    $ rm -rf build_ot_cli_ftd
    $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
    

ফার্মওয়্যার ফ্ল্যাশ

নিচের চিত্রে দেখানো অনুযায়ী একটি USB কেবল ব্যবহার করে B91 ডেভেলপমেন্ট বোর্ডটিকে বার্নিং বোর্ডের সাথে সংযুক্ত করুন।

সংযোগ_ওভারভিউ.png

ফার্মওয়্যার বার্নিং সম্পন্ন করতে কমান্ড লাইনে নিম্নলিখিত কমান্ডগুলো চালান (উদাহরণ হিসেবে ot-cli-ftd ফার্মওয়্যার ফ্ল্যাশিং ব্যবহার করা হয়েছে)।

$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr
$ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin
$ cd ~/LinuxBDT
$ sudo ./bdt 9518 ac
 Activate OK!
$ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin
 EraseSectorsize...
 Total Time: 2181 ms
 Flash writing...
 [100%][-] [##################################################]
 File Download to Flash at address 0x000000: 491700 bytes
 Total Time: 30087 ms

ot-rcp এর ফ্ল্যাশ করার পদ্ধতিটি মূলত ot-cli-ftd এর মতোই। তবে, ফার্মওয়্যারের পাথ এবং নামে কিছু পার্থক্য রয়েছে।

ফ্ল্যাশ করার পর, দুটি B91 ডেভেলপমেন্ট বোর্ডকে যথাযথভাবে চিহ্নিত করে আলাদা করুন। ot-cli-ftd দিয়ে ফ্ল্যাশ করা বোর্ডটিকে "FTD Joiner" এবং ot-rcp দিয়ে ফ্ল্যাশ করা বোর্ডটিকে "RCP" হিসেবে লেবেল করুন।

৪. FTD জয়নার ডিভাইসের জন্য একটি সিরিয়াল কনসোল কনফিগার করুন।

ছবিতে দেখানো অনুযায়ী, FTD Joiner-টি সরাসরি লিনাক্স মেশিনের USB পোর্টে লাগিয়ে দিন।

usb_connection.png

লিনাক্স মেশিনে FTD Joiner Device সংযোগ করার পর, PuTTY খুলুন। তারপর একটি নতুন টার্মিনাল তৈরি করুন, সিরিয়াল পোর্টের তথ্য সেট করুন এবং সিরিয়াল পোর্টটি খুলুন।

uart_console.png

OpenThread কমান্ড লাইন রেফারেন্সটি এখানে রয়েছে: OpenThread CLI Reference । সব কমান্ডের আগে অবশ্যই ot যোগ করবেন।

উদাহরণঃ

> ot state
disabled
Done
> ot channel
11
Done
>

5. Set up the Raspberry Pi as a OpenThread Border Router

একটি ওপেনথ্রেড বর্ডার রাউটার হলো দুটি প্রধান অংশ নিয়ে গঠিত একটি ডিভাইসঃ

  • রাস্পবেরি পাই-তে বর্ডার রাউটার (BR) হিসেবে কাজ করার জন্য প্রয়োজনীয় সমস্ত পরিষেবা এবং ফার্মওয়্যার রয়েছে।
  • আরসিপি থ্রেড যোগাযোগের জন্য দায়ী।

রেডিও কো-প্রসেসর (RCP)

ot-rcp ফার্মওয়্যার ফ্ল্যাশ করার জন্য, ot-cli-ftd ফার্মওয়্যার ফ্ল্যাশ করার প্রক্রিয়ার ধাপগুলোই অনুসরণ করুন। নিচের চিত্রে দেখানো অনুযায়ী B91 ডেভেলপমেন্ট বোর্ডটিকে রাস্পবেরি পাই-এর একটি USB পোর্টের সাথে সংযুক্ত করুন।

OTBR_overview.png

রাস্পবেরি পাই

  1. নিশ্চিত করুন যে Raspbian Bullseye Lite OS ইমেজ অথবা Raspbian Bullseye with Desktop এসডি কার্ডে সঠিকভাবে লেখা হয়েছে।
  2. আপনার কাছে রাস্পবেরি পাই-তে SSH করার অথবা সরাসরি রাসবিয়ান ডেস্কটপে কাজ করার বিকল্প রয়েছে। এই কোডল্যাবে SSH ব্যবহার করা হবে।
  3. পরবর্তী ধাপে OTBR ডকার ইনস্টল করার আগে, প্রথমে লোকাল রিপোজিটরি এবং প্যাকেজ ম্যানেজার আপডেট করে নিন।
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

ডকার ইনস্টল করুন

যদি আপনি আগের ধাপে শুধু লোকাল রিপোজিটরি এবং প্যাকেজ ম্যানেজার APT আপডেট করে থাকেন, তাহলে রাস্পবেরি পাই রিবুট করুন এবং তারপর একটি SSH টার্মিনাল উইন্ডো খুলুন।

  1. ডকার ইনস্টল করুন:
    $ curl -sSL https://get.docker.com | sh
    
  2. বর্তমান অ্যাকাউন্টটিকে একটি ডকার গ্রুপে যুক্ত করে অনুমতি দিন, যাতে প্রতিটি কমান্ডের সামনে sudo যোগ করার প্রয়োজন না হয়।
    $ sudo usermod -aG docker $USER
    
    পরিবর্তনটি কার্যকর করার জন্য আপনাকে রাস্পবেরি পাই পুনরায় চালু করতে হবে।
  3. যদি ডকার চালু না হয়ে থাকে, তবে এটি চালু করুন:
    $ sudo dockerd
    
  4. OTBR ফায়ারওয়াল স্ক্রিপ্টগুলো ডকার কন্টেইনারের ভেতরে রুল তৈরি করে। তার আগে, iptables-এর কার্নেল মডিউল লোড করার জন্য modprobe এক্সিকিউট করুন।
    $ sudo modprobe ip6table_filter
    

ডকার কনফিগার এবং রান করুন

এই কোডল্যাবটি সরাসরি ওপেনথ্রেড ডকার হাব থেকে OTBR ডকার ইমেজটি পুল করে। এই ইমেজটি ওপেনথ্রেড টিম দ্বারা পরীক্ষিত ও যাচাইকৃত।

  1. সর্বশেষ ছবিটি টানুন:
    $ docker pull openthread/otbr:latest
    
  2. ডকার কন্টেইনারের ইমেজ তালিকাটি পরীক্ষা করুন:
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. Determine the serial port name of the RCP device by checking /dev , ttyACM0 indicates that the RCP is correctly connected.
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. প্রথমবার OTBR ডকারটি চালান এবং RCP-এর সিরিয়াল পোর্ট ( ttyACM0 ) উল্লেখ করুন। যদি আপনি এই OTBR ডকারটি ব্যবহার করা চালিয়ে যেতে চান, তাহলে `docker start otbr` কমান্ডটি ব্যবহার করুন।
    $ docker run --name "otbr" --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
    
  5. Raspberry Pi এবং RCP-এর মধ্যে সংযোগ পরীক্ষা করার জন্য একটি নতুন SSH টার্মিনাল উইন্ডো খুলুন।
    $ docker exec -ti otbr sh -c "sudo ot-ctl"
    > state 
    disabled
    Done
    

ঐচ্ছিক ডকার কমান্ডসমূহ:

  • চলমান ডকার কন্টেইনার সম্পর্কে তথ্য জানুন:
    $ docker ps -aq
    
  • OTBR ডকার বন্ধ করুন:
    $ docker stop otbr
    
  • OTBR ডকার অপসারণ করুন:
    $ docker rm otbr
    
  • OTBR ডকার পুনরায় লোড করুন:
    $ docker restart otbr
    

এই পর্যায়ে, একটি FTD Joiner ডিভাইস এবং একটি OTBR প্রস্তুত আছে, এবং আপনি থ্রেড নেটওয়ার্ক তৈরি করার জন্য পরবর্তী ধাপে অগ্রসর হতে পারেন।

৬. একটি থ্রেড নেটওয়ার্ক তৈরি করুন

RCP-তে একটি থ্রেড নেটওয়ার্ক তৈরি করুন

আমরা একটি থ্রেড নেটওয়ার্ক স্থাপন করার জন্য OTBR-এ ot-ctl শেল ব্যবহার করি। আপনি যদি গত বিভাগে শেলটি থেকে বেরিয়ে গিয়ে থাকেন, তবে SSH টার্মিনালে এটি আবার চালু করতে নিম্নলিখিত কমান্ডটি লিখুন:

$ docker exec -ti otbr sh -c "sudo ot-ctl"

এরপর, সারণিতে নির্দিষ্ট করা ক্রমানুসারে কমান্ডগুলো প্রবেশ করান এবং পরবর্তী ধাপে যাওয়ার আগে নিশ্চিত করুন যে প্রতিটি ধাপ প্রত্যাশিত ফলাফল অর্জন করেছে।

সূচী

আদেশ

ভূমিকা

প্রত্যাশিত প্রতিক্রিয়া

dataset init new

একটি নতুন র‍্যান্ডম নেটওয়ার্ক ডেটাসেট তৈরি করুন।

সম্পন্ন হয়েছে

dataset commit active

নন-ভোলাটাইল স্টোরেজে থাকা অ্যাক্টিভ অপারেশনাল ডেটাসেটে নতুন ডেটাসেটটি কমিট করুন।

সম্পন্ন হয়েছে

ifconfig up

IPv6 ইন্টারফেসটি চালু করুন।

সম্পন্ন হয়েছে

thread start

থ্রেড প্রোটোকল অপারেশন সক্রিয় করুন এবং একটি থ্রেড নেটওয়ার্কের সাথে সংযুক্ত হন।

সম্পন্ন হয়েছে

থ্রেড ইন্টারফেসটি চালু হওয়ার জন্য ১০ সেকেন্ড অপেক্ষা করুন।

state

ডিভাইসের অবস্থা পরীক্ষা করুন। এই কমান্ডটি একাধিকবার কল করা যেতে পারে যতক্ষণ না এটি লিডার হয়ে পরবর্তী ধাপে যায়।

নেতা
সম্পন্ন হয়েছে

dataset active

সম্পূর্ণ সক্রিয় অপারেশনাল ডেটাসেটটি যাচাই করুন এবং নেটওয়ার্ক কী রেকর্ড করুন।

সক্রিয় টাইমস্ট্যাম্প: ১
চ্যানেল: ১৩
চ্যানেল মাস্ক: 0x07fff800
এক্সটেনশন প্যান আইডি: b07476e168eda4fc
মেশ লোকাল প্রিফিক্স: fd8c:60bc:a98:c7ba::/64
নেটওয়ার্ক কী: c312485187484ceb5992d2343baaf93d
নেটওয়ার্কের নাম: ওপেনথ্রেড-৫৯৯সি
প্যান আইডি: 0x599c
PSKc: 04f79ad752e8401a1933486c95299f60
নিরাপত্তা নীতি: 672 onrc 0
সম্পন্ন হয়েছে

নেটওয়ার্ক তৈরির সময় OTBR দ্বারা দৈবচয়নে তৈরি হওয়া নেটওয়ার্ক কী-টি ব্যবহৃত হবে যখন ot-cli-ftd ডিভাইসগুলি এই থ্রেড নেটওয়ার্কে যোগদান করবে।

Add the FTD Joiner to Thread through out-of-band commissioning

আউট-অফ-ব্যান্ড কমিশনিং বলতে বোঝায়, নেটওয়ার্কে যোগদানের অপেক্ষায় থাকা ডিভাইসগুলিতে ওয়্যারলেস-বহির্ভূত পদ্ধতির মাধ্যমে (যেমন, OpenThread CLI-তে ম্যানুয়ালি প্রবেশ করিয়ে) নেটওয়ার্ক ক্রেডেনশিয়াল প্রেরণ করা। FTD Joiner-এর সিরিয়াল কনসোলে ক্রমানুসারে নিম্নলিখিত কমান্ডগুলি প্রবেশ করান।

সূচী

আদেশ

ভূমিকা

প্রত্যাশিত প্রতিক্রিয়া

ot dataset networkkey c312485187484ceb5992d2343baaf93d

একটি ডিভাইসকে থ্রেড নেটওয়ার্কে সংযোগ করার জন্য শুধুমাত্র নেটওয়ার্ক কী-টিই প্রয়োজন।

সম্পন্ন হয়েছে

ot dataset commit active

নন-ভোলাটাইল স্টোরেজে থাকা অ্যাক্টিভ অপারেশনাল ডেটাসেটে নতুন ডেটাসেটটি কমিট করুন।

সম্পন্ন হয়েছে

ot ifconfig up

IPv6 ইন্টারফেসটি চালু করুন।

সম্পন্ন হয়েছে

ot thread start

থ্রেড প্রোটোকল অপারেশন সক্রিয় করুন এবং একটি থ্রেড নেটওয়ার্কের সাথে সংযুক্ত হন।

সম্পন্ন হয়েছে

ডিভাইসটি সংযুক্ত ও কনফিগার হওয়ার জন্য ২০ সেকেন্ড অপেক্ষা করুন।

ot state

ডিভাইসের অবস্থা যাচাই করুন।

শিশু/রাউটার
সম্পন্ন হয়েছে

টপোলজি

নিচের কোড স্নিপেটগুলোর মতো প্রতিক্রিয়া পেতে SSH টার্মিনালে ipaddr , child table , router table এর মতো কমান্ডগুলো লিখুন।

> ipaddr rloc
fd8c:60bc:a98:c7ba:0:ff:fe00:b000
Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+
|   1 | 0xb001 |        240 |         23 |     3 |   51 |1|1|1|  3| 0 |     0 |   129 | 82bc12fbe783468e |

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done
...
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 33 | 0x8400 |       63 |         0 |     3 |      3 |  13 | e61487c1cda940a6 |    1 |
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done

OTBR-এর RLOC16 হলো 0xb000 এবং FTD Joiner-এর RLOC16 প্রাথমিকভাবে 0xb001 । এরপর রাউটার আইডি পাওয়ার পর FTD Joiner-এর RLOC16 হয়ে যায় 0x8400 । এতে দেখা যায় যে, FTD Joiner-টিকে চাইল্ড থেকে মেশ এক্সটেন্ডারে আপগ্রেড করা হয়েছে।

বর্তমান থ্রেড নেটওয়ার্কটিতে দুটি নোড রয়েছে এবং এর টপোলজিটি নিচের চিত্রে দেখানো হয়েছে।

টপোলজি.পিএনজি

৭. থ্রেড ডিভাইসগুলির মধ্যে যোগাযোগ

ICMPv6 যোগাযোগ

একই নেটওয়ার্কে থাকা থ্রেড ডিভাইসগুলো একে অপরের সাথে যোগাযোগ করতে পারে কিনা, তা পরীক্ষা করার জন্য আমরা ping ) কমান্ড ব্যবহার করি। প্রথমে, ডিভাইসটির RLOC পাওয়ার জন্য ipaddr কমান্ডটি ব্যবহার করুন।

> ipaddr
fd8c:60bc:a98:c7ba:0:ff:fe00:fc11
fdbd:7274:649c:1:1d19:9613:f705:a5af
fd8c:60bc:a98:c7ba:0:ff:fe00:fc10
fd8c:60bc:a98:c7ba:0:ff:fe00:fc38
fd8c:60bc:a98:c7ba:0:ff:fe00:fc00
fd8c:60bc:a98:c7ba:0:ff:fe00:b000       # Routing Locator (RLOC)
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
fe80:0:0:0:78e3:5410:9d61:1f7e
Done

পিং অপারেশনটি সম্পাদন করতে FTD Joiner-এর সিরিয়াল কনসোলে নিম্নলিখিত কমান্ডটি প্রবেশ করান।

> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000
16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms.
Done

সিরিয়াল পোর্টের আউটপুট প্রতিক্রিয়া থেকে বোঝা যায় যে, OTBR প্রান্ত পিং অনুরোধটি পেয়েছে এবং FTD Joiner, OTBR কর্তৃক ফেরত পাঠানো পিং প্রতিক্রিয়াটি পেয়েছে। ডিভাইস দুটির মধ্যে যোগাযোগ সফল হয়েছে।

ইউডিপি যোগাযোগ

OpenThread দ্বারা প্রদত্ত অ্যাপ্লিকেশন পরিষেবাগুলির মধ্যে UDP-ও অন্তর্ভুক্ত। আপনি থ্রেড নেটওয়ার্কের নোডগুলির মধ্যে তথ্য আদান-প্রদান করতে, অথবা বর্ডার রাউটারের মাধ্যমে বাহ্যিক নেটওয়ার্কগুলিতে তথ্য পাঠাতে UDP API ব্যবহার করতে পারেন। OpenThread-এর UDP API-এর বিস্তারিত পরিচিতি "OpenThread CLI - UDP Example" -এ রয়েছে। এই কোডল্যাবটি OTBR এবং FTD Joiner-এর মধ্যে তথ্য প্রেরণের জন্য এর কিছু API ব্যবহার করবে।

প্রথমে, OTBR-এর মেশ-লোকাল EID সংগ্রহ করুন। এই অ্যাড্রেসটি থ্রেড ডিভাইসের IPv6 অ্যাড্রেসগুলোর মধ্যে একটি, এবং এটি একই থ্রেড নেটওয়ার্ক পার্টিশনে থাকা থ্রেড ডিভাইসগুলো অ্যাক্সেস করতে ব্যবহার করা যায়।

> ipaddr mleid
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
Done

OTBR UDP সক্রিয় করতে এবং ডিভাইসটির 1022 পোর্ট বাইন্ড করতে SSH টার্মিনালে নিম্নলিখিত কমান্ডগুলি প্রবেশ করান।

> udp open
Done
> udp bind :: 1022
Done

সিরিয়াল কনসোলে নিম্নলিখিত কমান্ডগুলি প্রবেশ করান এবং FTD Joiner-এর UDP সক্রিয় করুন। ডিভাইসটির 1022 পোর্ট বাইন্ড করুন, এবং তারপর OTBR-এ একটি ৫-বাইট hello বার্তা পাঠান।

> ot udp open 
Done
> ot udp bind :: 1022
Done
> ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello
Done

SSH টার্মিনাল নিম্নলিখিত তথ্য আউটপুট করে। OTBR, FTD Joiner-এর কাছ থেকে hello বার্তাটি গ্রহণ করে, যার অর্থ UDP যোগাযোগ সফল হয়েছে।

> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello

৮. অভিনন্দন

আপনি একটি সাধারণ থ্রেড নেটওয়ার্ক তৈরি করেছেন এবং এই নেটওয়ার্কের মধ্যেকার যোগাযোগ যাচাই করেছেন।

আপনি এখন জানেন:

  • টেলিংক জেফির ডেভেলপমেন্ট এনভায়রনমেন্ট কীভাবে তৈরি ও ব্যবহার করতে হয়।
  • কিভাবে ot-cli-ftd এবং ot-rcp বাইনারিগুলো বিল্ড করতে হয় এবং সেগুলোকে Telink B91 ডেভেলপমেন্ট বোর্ডে ফ্ল্যাশ করতে হয়।
  • ডকার ব্যবহার করে কীভাবে একটি রাস্পবেরি পাই 3B+ বা উচ্চতর সংস্করণকে ওপেনথ্রেড বর্ডার রাউটার (OTBR) হিসেবে সেট আপ করবেন।
  • OTBR-এ কীভাবে একটি থ্রেড নেটওয়ার্ক তৈরি করতে হয়।
  • আউট-অফ-ব্যান্ড কমিশনিং-এর মাধ্যমে থ্রেড নেটওয়ার্কে কীভাবে ডিভাইস যুক্ত করা যায়।
  • থ্রেড নেটওয়ার্কে নোডগুলোর মধ্যে সংযোগ কীভাবে যাচাই করা যায়।

আরও পড়ুন

Check out openthread.io and GitHub to learn about various OpenThread resources, including:

রেফারেন্স নথি: