nRF52840 বোর্ড এবং OpenThread সহ একটি থ্রেড নেটওয়ার্ক তৈরি করুন

1. ভূমিকা

26b7f4f6b3ea0700.png সম্পর্কে

গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হল থ্রেড® নেটওয়ার্কিং প্রোটোকলের একটি ওপেন-সোর্স বাস্তবায়ন। সংযুক্ত বাড়ির জন্য পণ্যের উন্নয়ন ত্বরান্বিত করার জন্য ডেভেলপারদের কাছে নেস্ট পণ্যগুলিতে ব্যবহৃত প্রযুক্তি ব্যাপকভাবে উপলব্ধ করার জন্য গুগল নেস্ট ওপেনথ্রেড প্রকাশ করেছে।

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

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

4806d16a8c137c6d.jpeg সম্পর্কে

তুমি কি শিখবে

  • ডেভ বোর্ডে OpenThread CLI বাইনারি তৈরি এবং ফ্ল্যাশ করা
  • একটি লিনাক্স মেশিন এবং একটি ডেভ বোর্ড সমন্বিত একটি RCP তৈরি করা
  • OpenThread ডেমন এবং ot-ctl ব্যবহার করে একটি RCP এর সাথে যোগাযোগ করা
  • GNU স্ক্রিন এবং OpenThread CLI ব্যবহার করে থ্রেড নোডগুলি ম্যানুয়ালি পরিচালনা করা
  • থ্রেড নেটওয়ার্কে ডিভাইসগুলির নিরাপদ কমিশনিং
  • IPv6 মাল্টিকাস্ট কীভাবে কাজ করে
  • UDP ব্যবহার করে থ্রেড নোডের মধ্যে বার্তা প্রেরণ করা

তোমার যা লাগবে

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

  • ৩টি নর্ডিক সেমিকন্ডাক্টর nRF52840 ডেভ বোর্ড
  • বোর্ডগুলি সংযুক্ত করার জন্য 3টি USB থেকে Micro-USB কেবল
  • কমপক্ষে ৩টি USB পোর্ট সহ একটি লিনাক্স মেশিন

সফটওয়্যার:

  • জিএনইউ টুলচেইন
  • নর্ডিক nRF5x কমান্ড লাইন টুলস
  • সেগার জে-লিংক সফটওয়্যার
  • ওপেনথ্রেড
  • গিট

2. শুরু করা

ওপেনথ্রেড সিমুলেশন

শুরু করার আগে, আপনি OpenThread Simulation Codelab টি পড়ে দেখতে পারেন, যাতে আপনি মৌলিক Thread ধারণা এবং OpenThread CLI এর সাথে পরিচিত হতে পারেন।

সিরিয়াল পোর্ট টার্মিনাল

টার্মিনালের মাধ্যমে সিরিয়াল পোর্টের সাথে কীভাবে সংযোগ স্থাপন করতে হয় তা আপনার জানা উচিত। এই কোডল্যাবটি GNU স্ক্রিন ব্যবহার করে এবং ব্যবহারের একটি সারসংক্ষেপ প্রদান করে, তবে অন্য যেকোনো টার্মিনাল সফ্টওয়্যার ব্যবহার করা যেতে পারে।

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

এই কোডল্যাবটি একটি i386- অথবা x86-ভিত্তিক লিনাক্স মেশিন ব্যবহার করে একটি রেডিও কো-প্রসেসর (RCP) থ্রেড ডিভাইসের হোস্ট হিসেবে কাজ করার জন্য এবং সমস্ত থ্রেড ডেভেলপমেন্ট বোর্ড ফ্ল্যাশ করার জন্য ডিজাইন করা হয়েছিল। সমস্ত পদক্ষেপ উবুন্টু 14.04.5 LTS (Trusty Tahr) এ পরীক্ষা করা হয়েছিল।

নর্ডিক সেমিকন্ডাক্টর nRF52840 বোর্ড

এই কোডল্যাবটিতে তিনটি nRF52840 PDK বোর্ড ব্যবহার করা হয়েছে।

a6693da3ce213856.png সম্পর্কে

আমরা nRF52840 বোর্ডগুলিকে প্রোগ্রাম করার জন্য SEGGER J-Link ব্যবহার করি, যার অনবোর্ড JTAG মডিউল রয়েছে। এটি আপনার লিনাক্স মেশিনে ইনস্টল করুন।

আপনার মেশিনের জন্য উপযুক্ত প্যাকেজটি ডাউনলোড করুন এবং সঠিক স্থানে ইনস্টল করুন। লিনাক্সে এটি /opt/SEGGER/JLink

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

nRF5x কমান্ড লাইন টুলস আপনাকে nRF52840 বোর্ডে OpenThread বাইনারি ফ্ল্যাশ করার সুযোগ দেয়। আপনার লিনাক্স মেশিনে উপযুক্ত nRF5x-Command-Line-Tools-<OS> বিল্ড ইনস্টল করুন।

এক্সট্রাক্ট করা প্যাকেজটি রুট ফোল্ডারে রাখুন ~/

ARM GNU টুলচেইন ইনস্টল করুন

ARM GNU টুলচেইন নির্মাণের জন্য ব্যবহৃত হয়।

আমরা আপনার লিনাক্স মেশিনে /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ ফাইলে এক্সট্র্যাক্ট করা আর্কাইভটি রাখার পরামর্শ দিচ্ছি। ইনস্টলেশনের নির্দেশাবলীর জন্য আর্কাইভের readme.txt ফাইলের নির্দেশাবলী অনুসরণ করুন।

স্ক্রিন ইনস্টল করুন (ঐচ্ছিক)

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

$ sudo apt-get install screen

৩. ক্লোন রিপোজিটরি

ওপেনথ্রেড

OpenThread ক্লোন করে ইনস্টল করুন। script/bootstrap কমান্ড নিশ্চিত করে যে টুলচেইন ইনস্টল করা আছে এবং পরিবেশ সঠিকভাবে কনফিগার করা আছে:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

ওপেনথ্রেড ডেমন তৈরি করুন:

$ script/cmake-build posix -DOT_DAEMON=ON

এখন আপনি nRF52840 বোর্ডে OpenThread তৈরি এবং ফ্ল্যাশ করার জন্য প্রস্তুত।

৪. আরসিপি জয়েনার সেট আপ করুন

তৈরি করুন এবং ফ্ল্যাশ করুন

জয়েনার এবং নেটিভ USB কার্যকারিতা ব্যবহার করে OpenThread nRF52840 উদাহরণ তৈরি করুন। একটি ডিভাইস জয়েনার ভূমিকা ব্যবহার করে নিরাপদে প্রমাণীকরণ করা হয় এবং একটি থ্রেড নেটওয়ার্কে কমিশন করা হয়। নেটিভ USB nRF52840 এবং হোস্টের মধ্যে সিরিয়াল ট্রান্সপোর্ট হিসাবে USB CDC ACM ব্যবহার সক্ষম করে।

সর্বদা rm -rf build চালিয়ে পূর্ববর্তী বিল্ডগুলির রেপো পরিষ্কার করুন।

$ cd ~/src
$ git clone --recursive https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx
$ script/build nrf52840 USB_trans

OpenThread RCP বাইনারি সহ ডিরেক্টরিতে নেভিগেট করুন এবং এটিকে হেক্স ফর্ম্যাটে রূপান্তর করুন:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex

nRF52840 বোর্ডের বহিরাগত পাওয়ার পিনের পাশে থাকা মাইক্রো-USB ডিবাগ পোর্টে USB কেবলটি সংযুক্ত করুন এবং তারপর এটি Linux মেশিনে প্লাগ করুন। nRF52840 বোর্ডের nRF পাওয়ার সোর্স সুইচটি VDD তে সেট করুন। সঠিকভাবে সংযুক্ত হলে, LED5 চালু থাকে।

20a3b4b480356447.png সম্পর্কে

যদি এটি লিনাক্স মেশিনের সাথে সংযুক্ত প্রথম বোর্ড হয়, তাহলে এটি সিরিয়াল পোর্ট /dev/ttyACM0 হিসাবে প্রদর্শিত হবে (সমস্ত nRF52840 বোর্ড সিরিয়াল পোর্ট শনাক্তকারীর জন্য ttyACM ব্যবহার করে)।

$ ls /dev/ttyACM*
/dev/ttyACM0

RCP-এর জন্য ব্যবহৃত nRF52840 বোর্ডের সিরিয়াল নম্বরটি লক্ষ্য করুন:

অনুসরণ

nRFx কমান্ড লাইন টুলের অবস্থানে যান এবং বোর্ডের সিরিয়াল নম্বর ব্যবহার করে nRF52840 বোর্ডে OpenThread RCP হেক্স ফাইলটি ফ্ল্যাশ করুন। মনে রাখবেন যে যদি আপনি --verify ফ্ল্যাগটি বাদ দেন, তাহলে আপনি একটি সতর্কতা বার্তা দেখতে পাবেন যে ফ্ল্যাশ প্রক্রিয়াটি ত্রুটি ছাড়াই ব্যর্থ হতে পারে।

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924  --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset

সফলতার পর নিম্নলিখিত আউটপুট তৈরি হয়:

Parsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programing device.
Applying system reset.
Run.

বোর্ডটিকে "RCP" লেবেল করুন যাতে পরবর্তীতে আপনি বোর্ডের ভূমিকাগুলিকে বিভ্রান্ত না করেন।

নেটিভ USB এর সাথে সংযোগ করুন

যেহেতু OpenThread RCP বিল্ডটি সিরিয়াল ট্রান্সপোর্ট হিসেবে নেটিভ USB CDC ACM ব্যবহার সক্ষম করে, তাই RCP হোস্টের (লিনাক্স মেশিন) সাথে যোগাযোগ করার জন্য আপনাকে nRF52840 বোর্ডে nRF USB পোর্ট ব্যবহার করতে হবে।

ফ্ল্যাশ করা nRF52840 বোর্ডের ডিবাগ পোর্ট থেকে USB কেবলের মাইক্রো-USB প্রান্তটি আলাদা করুন, তারপর RESET বোতামের পাশে থাকা মাইক্রো-USB nRF USB পোর্টে এটি পুনরায় সংযুক্ত করুন। nRF পাওয়ার সোর্স সুইচটি USB তে সেট করুন।

46e7b670d2464842.png সম্পর্কে

ওপেনথ্রেড ডেমন শুরু করুন

RCP ডিজাইনে, থ্রেড ডিভাইসের সাথে যোগাযোগ এবং পরিচালনা করার জন্য OpenThread ডেমন ব্যবহার করুন। -v ভারবোস ফ্ল্যাগ দিয়ে ot-daemon শুরু করুন যাতে আপনি লগ আউটপুট দেখতে পারেন এবং এটি চলমান কিনা তা নিশ্চিত করতে পারেন:

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800'

সফল হলে, ভার্বোজ মোডে ot-daemon নিম্নলিখিতগুলির মতো আউটপুট তৈরি করে:

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

এই টার্মিনাল উইন্ডোটি খোলা রাখুন যাতে ot-daemon থেকে লগগুলি দেখা যায়।

RCP নোডের সাথে যোগাযোগ করতে ot-ctl ব্যবহার করুন। ot-ctl OpenThread CLI অ্যাপের মতো একই CLI ব্যবহার করে। অতএব, আপনি অন্যান্য সিমুলেটেড থ্রেড ডিভাইসের মতো একই পদ্ধতিতে ot-daemon নোড নিয়ন্ত্রণ করতে পারেন।

দ্বিতীয় টার্মিনাল উইন্ডোতে, ot-ctl শুরু করুন:

$ sudo ./build/posix/src/posix/ot-ctl
>

ot-daemon দিয়ে শুরু করা নোড ২ (RCP নোড) এর state পরীক্ষা করুন:

> state
disabled
Done

৫. FTD গুলি সেট আপ করুন

এই কোডল্যাবে ব্যবহৃত অন্য দুটি থ্রেড নোড হল স্ট্যান্ডার্ড সিস্টেম-অন-চিপ (SoC) ডিজাইনে ফুল থ্রেড ডিভাইস (FTD)। একটি ডিভাইস কমিশনার হিসেবে কাজ করে, নিরাপদে সেই নেটওয়ার্কে ডিভাইসগুলিকে প্রমাণীকরণ এবং কমিশন করার জন্য। অন্য ডিভাইসটি একটি জয়েনার হিসেবে কাজ করে যা কমিশনার থ্রেড নেটওয়ার্কে প্রমাণীকরণ করতে পারেন।

তৈরি করুন এবং ফ্ল্যাশ করুন

nRF52840 প্ল্যাটফর্মের জন্য OpenThread FTD উদাহরণ তৈরি করুন, কমিশনার এবং জয়েনার ভূমিকা সক্রিয় করে:

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON

OpenThread Full Thread Device (FTD) CLI বাইনারি সহ ডিরেক্টরিতে নেভিগেট করুন এবং এটিকে হেক্স ফর্ম্যাটে রূপান্তর করুন:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex

nRF52840 বোর্ডের বহিরাগত পাওয়ার পিনের পাশে মাইক্রো-USB পোর্টে USB কেবলটি সংযুক্ত করুন এবং তারপর এটি Linux মেশিনে প্লাগ করুন। যদি RCP এখনও Linux মেশিনের সাথে সংযুক্ত থাকে, তাহলে এই নতুন বোর্ডটি সিরিয়াল পোর্ট /dev/ttyACM1 হিসাবে প্রদর্শিত হবে (সমস্ত nRF52840 বোর্ড সিরিয়াল পোর্ট শনাক্তকারীর জন্য ttyACM ব্যবহার করে)।

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1

আগের মতোই, FTD-এর জন্য ব্যবহৃত nRF52840 বোর্ডের সিরিয়াল নম্বরটি লক্ষ্য করুন:

অনুসরণ

nRFx কমান্ড লাইন টুলের অবস্থানে যান এবং বোর্ডের সিরিয়াল নম্বর ব্যবহার করে nRF52840 বোর্ডে OpenThread CLI FTD হেক্স ফাইলটি ফ্ল্যাশ করুন:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset

বোর্ডে "কমিশনার" লেবেল দিন।

নেটিভ USB এর সাথে সংযোগ করুন

যেহেতু OpenThread FTD বিল্ডটি সিরিয়াল ট্রান্সপোর্ট হিসেবে নেটিভ USB CDC ACM ব্যবহার সক্ষম করে, তাই RCP হোস্টের (লিনাক্স মেশিন) সাথে যোগাযোগ করার জন্য আপনাকে nRF52840 বোর্ডে nRF USB পোর্ট ব্যবহার করতে হবে।

ফ্ল্যাশ করা nRF52840 বোর্ডের ডিবাগ পোর্ট থেকে USB কেবলের মাইক্রো-USB প্রান্তটি আলাদা করুন, তারপর RESET বোতামের পাশে থাকা মাইক্রো-USB nRF USB পোর্টে এটি পুনরায় সংযুক্ত করুন। nRF পাওয়ার সোর্স সুইচটি USB তে সেট করুন।

46e7b670d2464842.png সম্পর্কে

বিল্ড যাচাই করুন

টার্মিনাল উইন্ডো থেকে GNU স্ক্রিন ব্যবহার করে OpenThread CLI অ্যাক্সেস করে একটি সফল বিল্ড যাচাই করুন।

$ screen /dev/ttyACM1

নতুন উইন্ডোতে, OpenThread CLI > প্রম্পটটি আনতে কীবোর্ডে কয়েকবার Return টিপুন। IPv6 ইন্টারফেসটি আনুন এবং ঠিকানাগুলি পরীক্ষা করুন:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:1cd6:87a9:cb9d:4b1d
Done

Ctrl+a → ব্যবহার করুন

d টিপুন যাতে FTD কমিশনার CLI স্ক্রিন থেকে বিচ্ছিন্ন হয়ে লিনাক্স টার্মিনালে ফিরে যেতে পারে যাতে পরবর্তী বোর্ডটি ফ্ল্যাশ করা যায়। যেকোনো সময় CLI পুনরায় প্রবেশ করতে, কমান্ড লাইন থেকে screen -r ব্যবহার করুন। উপলব্ধ স্ক্রিনগুলির তালিকা দেখতে, screen -ls ব্যবহার করুন:

$ screen -ls
There is a screen on:
        74182.ttys000.mylinuxmachine        (Detached)
1 Socket in /tmp/uscreens/S-username.

FTD জয়েনার সেট আপ করুন

বিদ্যমান ot-cli-ftd.hex বিল্ড ব্যবহার করে তৃতীয় nRF52840 বোর্ডটি ফ্ল্যাশ করার জন্য উপরের প্রক্রিয়াটি পুনরাবৃত্তি করুন। সম্পন্ন হলে, nRF USB পোর্ট ব্যবহার করে বোর্ডটিকে পিসিতে পুনরায় সংযোগ করতে ভুলবেন না এবং nRF পাওয়ার সোর্স সুইচটি VDD তে সেট করুন।

যদি তৃতীয় বোর্ডটি সংযুক্ত করার সময় অন্য দুটি নোড লিনাক্স মেশিনের সাথে সংযুক্ত থাকে, তাহলে এটি সিরিয়াল পোর্ট /dev/ttyACM2 হিসাবে প্রদর্শিত হবে:

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2

বোর্ডটিকে "যোগদানকারী" হিসেবে চিহ্নিত করুন।

স্ক্রিন ব্যবহার করে যাচাই করার সময়, কমান্ড লাইন থেকে স্ক্রিনের একটি নতুন উদাহরণ তৈরি করার পরিবর্তে, বিদ্যমান উইন্ডোটিতে পুনরায় সংযুক্ত করুন এবং এর মধ্যে একটি নতুন উইন্ডো তৈরি করুন (যা আপনি FTD কমিশনারের জন্য ব্যবহার করেছিলেন):

$ screen -r

Ctrl+a → c ব্যবহার করে স্ক্রিনের মধ্যে নতুন উইন্ডো তৈরি করুন

একটি নতুন কমান্ড লাইন প্রম্পট প্রদর্শিত হবে। FTD জয়নারের জন্য OpenThread CLI অ্যাক্সেস করুন:

$ screen /dev/ttyACM2

এই নতুন উইন্ডোতে, OpenThread CLI > প্রম্পটটি আনতে কীবোর্ডে কয়েকবার Return টিপুন। IPv6 ইন্টারফেসটি আনুন এবং ঠিকানাগুলি পরীক্ষা করুন:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:6c1e:87a2:df05:c240
Done

এখন যেহেতু FTD জয়েনার CLI FTD কমিশনারের মতো স্ক্রিনের একই ইনস্ট্যান্সে আছে, আপনি Ctrl+a → n ব্যবহার করে তাদের মধ্যে স্যুইচ করতে পারেন।

Ctrl+a → ব্যবহার করুন

যেকোনো সময় স্ক্রিন থেকে বেরিয়ে আসার জন্য d

৬. টার্মিনাল উইন্ডো সেটআপ

ভবিষ্যতে, আপনাকে ঘন ঘন থ্রেড ডিভাইসগুলির মধ্যে স্যুইচ করতে হবে, তাই নিশ্চিত করুন যে সেগুলি সবগুলি লাইভ এবং সহজেই অ্যাক্সেসযোগ্য। এখনও পর্যন্ত, আমরা দুটি FTD অ্যাক্সেস করার জন্য স্ক্রিন ব্যবহার করে আসছি এবং এই টুলটি একই টার্মিনাল উইন্ডোতে স্প্লিট স্ক্রিনের অনুমতি দেয়। একটি নোড অন্যটিতে জারি করা কমান্ডগুলিতে কীভাবে প্রতিক্রিয়া দেখায় তা দেখতে এটি ব্যবহার করুন।

আদর্শভাবে, আপনার কাছে চারটি জানালা সহজেই পাওয়া উচিত:

  1. ot-daemon পরিষেবা / লগ
  2. ot-ctl এর মাধ্যমে RCP জয়েনার
  3. ওপেনথ্রেড সিএলআই এর মাধ্যমে এফটিডি কমিশনার
  4. ওপেনথ্রেড সিএলআই এর মাধ্যমে এফটিডি জয়েনার

আপনি যদি আপনার নিজস্ব টার্মিনাল / সিরিয়াল পোর্ট কনফিগারেশন বা টুল ব্যবহার করতে চান, তাহলে পরবর্তী ধাপে যেতে দ্বিধা করবেন না। আপনার জন্য সবচেয়ে ভালো কাজ করে এমনভাবে সমস্ত ডিভাইসের জন্য টার্মিনাল উইন্ডো কনফিগার করুন।

স্ক্রিন ব্যবহার করা

ব্যবহারের সুবিধার জন্য, শুধুমাত্র একটি স্ক্রিন সেশন শুরু করুন। যখন আপনি উভয় FTD সেট আপ করবেন তখন থেকেই আপনার একটি স্ক্রিন সেশন থাকা উচিত।

স্ক্রিনের মধ্যে থাকা সমস্ত কমান্ড Ctrl+a দিয়ে শুরু হয়।

বেসিক স্ক্রিন কমান্ড:

স্ক্রিন সেশনে পুনরায় সংযুক্ত করুন (কমান্ড লাইন থেকে)

screen -r

স্ক্রিন সেশন ছেড়ে দিন

Ctrl+a → d

স্ক্রিন সেশনের মধ্যে নতুন উইন্ডো তৈরি করুন

Ctrl+a → c

একই স্ক্রিন সেশনে উইন্ডোগুলির মধ্যে স্যুইচ করুন

Ctrl+a → n (সামনে)Ctrl+a → p (পিছনে)

স্ক্রিন সেশনে বর্তমান উইন্ডোটি বন্ধ করুন

Ctrl+a → k

স্প্লিট স্ক্রিন

স্ক্রিনের সাহায্যে, আপনি টার্মিনালটিকে একাধিক উইন্ডোতে বিভক্ত করতে পারেন:

f1cbf1258cf0a5a.png সম্পর্কে

screen থাকা কমান্ডগুলি Ctrl+a ব্যবহার করে অ্যাক্সেস করা যায়। প্রতিটি কমান্ড এই অ্যাক্সেস কী কম্বো দিয়ে শুরু হওয়া উচিত।

যদি আপনি কোডল্যাবটি সঠিকভাবে অনুসরণ করে থাকেন, তাহলে একই স্ক্রিন ইনস্ট্যান্সে আপনার দুটি উইন্ডো (FTD কমিশনার, FTD জয়েনার) থাকা উচিত। দুটির মধ্যে স্ক্রিন ভাগ করতে, প্রথমে আপনার বিদ্যমান স্ক্রিন সেশনটি প্রবেশ করান:

$ screen -r

আপনার FTD ডিভাইসগুলির একটিতে থাকা উচিত। স্ক্রিনে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. উইন্ডোটি অনুভূমিকভাবে বিভক্ত করতে Ctrl+a → S চাপুন
  2. কার্সারটিকে নতুন ফাঁকা উইন্ডোতে সরাতে Ctrl+a → Tab
  3. নতুন উইন্ডোটি পরবর্তী উইন্ডোতে স্যুইচ করতে Ctrl+a → n চাপুন
  4. যদি এটি উপরের উইন্ডোর মতো হয়, তাহলে অন্য FTD ডিভাইসটি দেখতে আবার Ctrl+a → n টিপুন।

এখন দুটোই দৃশ্যমান। Ctrl+a → Tab ব্যবহার করে তাদের মধ্যে স্যুইচ করুন। বিভ্রান্তি এড়াতে প্রতিটি উইন্ডোকে Ctrl+a → A দিয়ে পুনঃশিরোনামকরণ করার পরামর্শ দেওয়া হচ্ছে।

উন্নত ব্যবহার

স্ক্রিনটিকে আরও চতুর্ভুজগুলিতে বিভক্ত করতে এবং ot-daemon লগ এবং RCP Joiner ot-ctl দেখতে, এই পরিষেবাগুলিকে একই Screen ইনস্ট্যান্সের মধ্যে শুরু করতে হবে। এটি করার জন্য, ot-daemon বন্ধ করুন এবং ot-ctl থেকে প্রস্থান করুন, এবং নতুন Screen উইন্ডোগুলির মধ্যে সেগুলি পুনরায় চালু করুন (Ctrl+a → c )।

এই সেটআপটি প্রয়োজন নয় এবং ব্যবহারকারীর জন্য একটি অনুশীলন হিসেবে রেখে দেওয়া হয়েছে।

নিম্নলিখিত কমান্ড ব্যবহার করে উইন্ডোগুলির মধ্যে বিভক্ত করুন এবং নেভিগেট করুন:

নতুন উইন্ডো তৈরি করুন

Ctrl+a → c

উইন্ডোটি উল্লম্বভাবে বিভক্ত করুন

Ctrl+a →

উইন্ডোটি অনুভূমিকভাবে বিভক্ত করুন

Ctrl+a → S

পরবর্তী প্রদর্শিত উইন্ডোতে যান

Ctrl+a → Tab

প্রদর্শিত উইন্ডোটি সামনে বা পিছনে স্যুইচ করুন

Ctrl+a → n অথবা p

বর্তমান উইন্ডোটির নাম পরিবর্তন করুন

Ctrl+a → A

যেকোনো সময় Ctrl+a → d দিয়ে Screen থেকে বেরিয়ে যান এবং কমান্ড লাইন থেকে screen -r দিয়ে পুনরায় সংযুক্ত করুন।

স্ক্রিন সম্পর্কে আরও তথ্যের জন্য, GNU স্ক্রিনের দ্রুত রেফারেন্স দেখুন।

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

এখন যেহেতু আপনার সমস্ত টার্মিনাল উইন্ডো এবং স্ক্রিন কনফিগার করা হয়েছে, আসুন আমাদের থ্রেড নেটওয়ার্ক তৈরি করি। FTD কমিশনারে , একটি নতুন অপারেশনাল ডেটাসেট তৈরি করুন এবং এটিকে সক্রিয় হিসাবে কমিট করুন। অপারেশনাল ডেটাসেট হল আপনার তৈরি করা থ্রেড নেটওয়ার্কের কনফিগারেশন।

## FTD Commissioner ##
----------------------

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 11
Channel Mask: 07fff800
Ext PAN ID: c0de7ab5c0de7ab5
Mesh Local Prefix: fdc0:de7a:b5c0/64
Network Key: 1234c0de7ab51234c0de7ab51234c0de
Network Name: OpenThread-c0de
PAN ID: 0xc0de
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

নেটওয়ার্ক কী 1234c0de7ab51234c0de7ab51234c0de নোট করুন যা পরে ব্যবহার করা হবে।

এই ডেটাসেটটিকে সক্রিয় হিসাবে কমিট করুন:

> dataset commit active
Done

IPv6 ইন্টারফেসটি আনুন:

> ifconfig up
Done

থ্রেড প্রোটোকল অপারেশন শুরু করুন:

> thread start
Done

কিছুক্ষণ পর, ডিভাইসের অবস্থা পরীক্ষা করুন। এটি লিডার হওয়া উচিত। ভবিষ্যতের রেফারেন্সের জন্য RLOC16ও নিন।

## FTD Commissioner ##
----------------------

> state
leader
Done
> rloc16
0c00
Done

ডিভাইসের IPv6 ঠিকানাগুলি পরীক্ষা করুন:

## FTD Commissioner ##
----------------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:c00         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a    # Mesh-Local EID (ML-EID)
fe80:0:0:0:1cd6:87a9:cb9d:4b1d         # Link-Local Address (LLA)

অন্যান্য থ্রেড ডিভাইস থেকে স্ক্যান করলে "কোডল্যাব" নেটওয়ার্কটি এখন দৃশ্যমান।

RCP জয়নারে ot-ctl থেকে:

## RCP Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

FTD জয়নারের OpenThread CLI থেকে:

## FTD Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

যদি "কোডেল্যাব" নেটওয়ার্ক তালিকায় না দেখা যায়, তাহলে আবার স্ক্যান করার চেষ্টা করুন।

৮. আরসিপি জয়েনার যোগ করুন

নেটওয়ার্কে থ্রেড কমিশনিং সক্রিয় নেই, যার অর্থ হল আমাদের আউট-অফ-ব্যান্ড কমিশনিং প্রক্রিয়া ব্যবহার করে তৈরি করা থ্রেড নেটওয়ার্কে RCP জয়েনার যুক্ত করতে হবে।

FTD Commissioner- এ, আমরা Network Key-এর একটি নোট তৈরি করেছি, উদাহরণস্বরূপ 1234c0de7ab51234c0de7ab51234c0de । যদি আপনার আবার Network Key অনুসন্ধান করার প্রয়োজন হয়, তাহলে FTD Commissioner- এ নিম্নলিখিত কমান্ডটি চালান:

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

এরপর, RCP Joiner- এ, এর সক্রিয় ডেটাসেট নেটওয়ার্ক কীটিকে FTD কমিশনার নেটওয়ার্ক কী-তে সেট করুন:

## RCP Joiner ##
----------------

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

ডেটাসেটটি সঠিকভাবে সেট করা আছে কিনা তা নিশ্চিত করতে এটি পরীক্ষা করুন।

## RCP Joiner ##
----------------

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

থ্রেডটি আনুন যাতে RCP জয়েনার "কোডেল্যাব" নেটওয়ার্কে যোগদান করে। কয়েক সেকেন্ড অপেক্ষা করুন, অবস্থা, RLOC16 এবং এর IPv6 ঠিকানাগুলি পরীক্ষা করুন:

## RCP Joiner ##
----------------

> ifconfig up
Done
> thread start
Done
> state
child
Done
> rloc16
0c01
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:0c01         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f    # Mesh-Local EID (ML-EID)
fe80:0:0:0:18e5:29b3:a638:943b          # Link-Local Address (LLA)
Done

মেশ-লোকাল IPv6 ঠিকানাটি ( fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f এখানে) নোট করুন, আপনি এটি পরে ব্যবহার করবেন।

FTD কমিশনারে ফিরে আসুন, রাউটার এবং চাইল্ড টেবিলগুলি পরীক্ষা করে নিশ্চিত করুন যে উভয় ডিভাইস একই নেটওয়ার্কের অংশ। RCP জয়েনার সনাক্ত করতে RLOC16 ব্যবহার করুন।

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  35 | 1ed687a9cb9d4b1d |

Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|VER| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|  2| 1ae529b3a638943b |
Done

সংযোগ যাচাই করার জন্য RCP Joiner এর mesh-local ঠিকানা (RCP Joiner এর ipaddr আউটপুট থেকে প্রাপ্ত Mesh-Local ঠিকানা) পিং করুন:

## FTD Commissioner ##
----------------------

> ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
> 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms

আমাদের এখন দুটি নোডের একটি থ্রেড নেটওয়ার্ক আছে, যা এই টপোলজি ডায়াগ্রাম দ্বারা চিত্রিত করা হয়েছে:

otcodelab_top01C_2nodes.png সম্পর্কে

টপোলজি ডায়াগ্রাম

কোডল্যাবের বাকি অংশটি পরীক্ষা করার সময়, নেটওয়ার্কের অবস্থা পরিবর্তন হলে আমরা একটি নতুন থ্রেড টপোলজি ডায়াগ্রাম দেখাবো। নোডের ভূমিকা নিম্নরূপে চিহ্নিত করা হয়েছে:

b75a527be4563215.png সম্পর্কে

রাউটারগুলি সর্বদা পঞ্চভুজ হয় এবং শেষ ডিভাইসগুলি সর্বদা বৃত্ত হয়। প্রতিটি নোডের সংখ্যাগুলি CLI আউটপুটে প্রদর্শিত রাউটার আইডি বা চাইল্ড আইডি প্রতিনিধিত্ব করে, যা প্রতিটি নোডের বর্তমান ভূমিকা এবং সেই সময়ে অবস্থার উপর নির্ভর করে।

৯. FTD জয়েনার কমিশন করুন

এবার "কোডেল্যাব" নেটওয়ার্কে তৃতীয় থ্রেড ডিভাইসটি যুক্ত করা যাক। এবার আমরা আরও নিরাপদ ইন-ব্যান্ড কমিশনিং প্রক্রিয়াটি ব্যবহার করব এবং শুধুমাত্র FTD জয়েনারকে যুক্ত করার অনুমতি দেব।

FTD Joiner এ, eui64 নিন, যাতে FTD কমিশনার এটি সনাক্ত করতে পারেন:

## FTD Joiner ##
----------------

> eui64
2f57d222545271f1
Done

FTD Commissioner এ, commissioner শুরু করুন এবং Joiner Credencial সহ, সংযুক্ত হতে পারে এমন ডিভাইসের eui64 উল্লেখ করুন, উদাহরণস্বরূপ J01NME । Joiner Credencial হল একটি ডিভাইস-নির্দিষ্ট স্ট্রিং যার দৈর্ঘ্য 6 থেকে 32 অক্ষরের মধ্যে, সমস্ত বড় হাতের বর্ণমালার অক্ষর (0-9 এবং AY, পঠনযোগ্যতার জন্য I, O, Q এবং Z বাদে) থাকে।

## FTD Commissioner ##
----------------------

> commissioner start
Done
> commissioner joiner add 2f57d222545271f1 J01NME
Done

FTD Joiner এ স্যুইচ করুন। FTD কমিশনারে আপনি যে Joiner Credencial সেট আপ করেছেন তা দিয়ে Joiner ভূমিকা শুরু করুন:

## FTD Joiner ##
----------------

> ifconfig up
Done
> joiner start J01NME
Done

এক মিনিটের মধ্যেই, আপনি সফল প্রমাণীকরণের একটি নিশ্চিতকরণ পাবেন:

## FTD Joiner ##
----------------

>
Join success

থ্রেডটি আনুন যাতে FTD জয়েনার "কোডেল্যাব" নেটওয়ার্কে যোগদান করে, এবং অবিলম্বে অবস্থা এবং RLOC16 পরীক্ষা করুন:

## FTD Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c02
Done

ডিভাইসের IPv6 ঠিকানাগুলি পরীক্ষা করুন। লক্ষ্য করুন যে কোনও ALOC নেই। কারণ এই ডিভাইসটি লিডার নয়, এবং এটি কোনও Anycast-নির্দিষ্ট ভূমিকা পালন করে না যার জন্য ALOC প্রয়োজন।

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:c02         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)

অবিলম্বে FTD কমিশনারে যান এবং রাউটার এবং চাইল্ড টেবিলগুলি পরীক্ষা করে নিশ্চিত করুন যে "কোডল্যাব" নেটওয়ার্কে তিনটি ডিভাইস বিদ্যমান:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   2 | 0x0c02 |        240 |         15 |     3 |   44 |1|1|1|1| e6cdd2d93249a243 |
Done

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

otcodelab_top01C_ed01.png সম্পর্কে

১০. কার্যক্ষম থ্রেড

এই কোডল্যাবের থ্রেড ডিভাইসগুলি হল একটি নির্দিষ্ট ধরণের ফুল থ্রেড ডিভাইস (FTD) যাকে রাউটার এলিজিবল এন্ড ডিভাইস (REED) বলা হয়। এর অর্থ হল তারা রাউটার বা এন্ড ডিভাইস হিসেবে কাজ করতে পারে এবং একটি এন্ড ডিভাইস থেকে রাউটারে নিজেদের প্রচার করতে পারে।

থ্রেড ৩২টি রাউটার পর্যন্ত সাপোর্ট করতে পারে, কিন্তু রাউটারের সংখ্যা ১৬ থেকে ২৩টির মধ্যে রাখার চেষ্টা করে। যদি একটি REED একটি এন্ড ডিভাইস (চাইল্ড) হিসেবে সংযুক্ত থাকে এবং রাউটারের সংখ্যা ১৬টির নিচে থাকে, তাহলে দুই মিনিটের মধ্যে একটি এলোমেলো সময়কালের পরে এটি স্বয়ংক্রিয়ভাবে একটি রাউটারে নিজেকে উন্নীত করে।

FTD Joiner যোগ করার পর যদি আপনার থ্রেড নেটওয়ার্কে দুটি শিশু থাকে, তাহলে কমপক্ষে দুই মিনিট অপেক্ষা করুন, এবং তারপর FTD কমিশনারে রাউটার এবং শিশু টেবিলগুলি পুনরায় পরীক্ষা করুন:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
Done

FTD Joiner (Extended MAC = e6cdd2d93249a243 ) নিজেকে একটি রাউটারে উন্নীত করেছে। মনে রাখবেন যে RLOC16 ভিন্ন ( 0c02 এর পরিবর্তে b800 )। কারণ RLOC16 একটি ডিভাইসের রাউটার আইডি এবং চাইল্ড আইডির উপর ভিত্তি করে তৈরি। যখন এটি এন্ড ডিভাইস থেকে রাউটারে রূপান্তরিত হয়, তখন এর রাউটার আইডি এবং চাইল্ড আইডির মান পরিবর্তিত হয়, এবং RLOC16ও পরিবর্তিত হয়।

অনুসরণ

FTD জয়েনারে নতুন অবস্থা এবং RLOC16 নিশ্চিত করুন:

## FTD Joiner ##
----------------

> state
router
Done
> rloc16
b800
Done

FTD জয়েনার ডাউনগ্রেড করুন

আপনি রাউটার থেকে FTD জয়েনারকে ম্যানুয়ালি ডাউনগ্রেড করে একটি এন্ড ডিভাইসে এই আচরণটি পরীক্ষা করতে পারেন। অবস্থাটি child এ পরিবর্তন করুন এবং RLOC16 পরীক্ষা করুন:

## FTD Joiner ##
----------------

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png সম্পর্কে

FTD কমিশনারে ফিরে আসা যাক, FTD জয়েনারটি এখন চাইল্ড টেবিলে (আইডি = 3) উপস্থিত হওয়া উচিত। এটি রূপান্তরের সময় উভয় টেবিলেই থাকতে পারে:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   3 | 0x0c03 |        240 |         16 |     3 |   94 |1|1|1|1| e6cdd2d93249a243 |
Done

কিছু সময় পর, এটি b800 এর RLOC সহ একটি রাউটারে ফিরে যাবে।

অনুসরণ

নেতাকে সরিয়ে দিন

সকল থ্রেড রাউটার থেকে লিডার স্ব-নির্বাচিত হন। এর অর্থ হল যদি বর্তমান লিডারকে থ্রেড নেটওয়ার্ক থেকে সরিয়ে দেওয়া হয়, তাহলে অন্য রাউটারগুলির মধ্যে একটি নতুন লিডার হয়ে উঠবে।

FTD Commissioner এ, Thread নেটওয়ার্ক থেকে এটি সরাতে Thread বন্ধ করুন:

## FTD Commissioner ##
----------------------

> thread stop
Done
> ifconfig down
Done

দুই মিনিটের মধ্যে, FTD জয়নার নতুন থ্রেড লিডার হয়ে ওঠে। যাচাই করার জন্য FTD জয়নারের অবস্থা এবং IPv6 ঠিকানা পরীক্ষা করুন:

## FTD Joiner ##
----------------

> state
leader
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00       # Now it has the Leader ALOC!
fdc0:de7a:b5c0:0:0:ff:fe00:b800
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd
fe80:0:0:0:e4cd:d2d9:3249:a243
Done

otcodelab_top02C_01.png সম্পর্কে

চাইল্ড টেবিলটি দেখুন। লক্ষ্য করুন যে একটি নতুন RLOC16 আছে। এটি হল RCP Joiner, যা এর ID এবং Extended MAC দ্বারা নির্দেশিত। Thread নেটওয়ার্ককে একসাথে রাখার জন্য, এটি FTD কমিশনার থেকে FTD Joiner-এ প্যারেন্ট রাউটারগুলিকে স্যুইচ করেছে। এর ফলে RCP Joiner-এর জন্য একটি নতুন RLOC16 তৈরি হয়েছে (কারণ এর রাউটার ID 3 থেকে 46-এ পরিবর্তিত হয়েছে)।

## FTD Joiner ##
----------------

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |         27 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

ছোটবেলায় FTD Joiner-এর সাথে RCP Joiner সংযুক্ত হওয়ার জন্য আপনাকে কয়েক মিনিট অপেক্ষা করতে হতে পারে। অবস্থা এবং RLOC16 পরীক্ষা করে নিশ্চিত করুন যে:

## RCP Joiner ##
--------------

> state
child
> rloc16
b801

এফটিডি কমিশনারকে পুনরায় সংযুক্ত করুন

দুটি নোড সহ একটি থ্রেড নেটওয়ার্ক খুব একটা মজার নয়। আসুন FTD কমিশনারকে আবার অনলাইনে ফিরিয়ে আনি।

FTD কমিশনারে , থ্রেডটি পুনরায় চালু করুন:

## FTD Commissioner ##
----------------------

> ifconfig up
Done
> thread start
Done

দুই মিনিটের মধ্যে, এটি স্বয়ংক্রিয়ভাবে "কোডল্যাব" নেটওয়ার্কে একটি এন্ড ডিভাইস হিসেবে পুনরায় সংযুক্ত হয় এবং তারপর নিজেকে রাউটারে উন্নীত করে।

## FTD Commissioner ##
----------------------

> state
router
Done

যাচাই করার জন্য FTD জয়নারে রাউটার এবং চাইল্ড টেবিলগুলি পরীক্ষা করুন:

## FTD Joiner ##
----------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |       63 |         0 |     3 |      3 |   0 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       46 |         0 |     0 |      0 |  15 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |        184 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

otcodelab_top02C_02.png সম্পর্কে

আমাদের থ্রেড নেটওয়ার্ক আবার তিনটি নোড নিয়ে গঠিত।

১১. সমস্যা সমাধান

বিভিন্ন টার্মিনাল বা স্ক্রিন উইন্ডোতে একাধিক ডিভাইস সহ একটি থ্রেড নেটওয়ার্ক পরিচালনা করা জটিল হতে পারে। যদি আপনি সমস্যার সম্মুখীন হন তবে নেটওয়ার্কের অবস্থা বা আপনার কর্মক্ষেত্রের অবস্থা "রিসেট" করতে এই টিপসগুলি ব্যবহার করুন।

পর্দা

যদি আপনি কখনও আপনার কনফিগারেশনে হারিয়ে যান (অনেক বেশি Screen উইন্ডো, অথবা Screens within Screens), তাহলে Ctrl+a → k দিয়ে Screen উইন্ডো বন্ধ করতে থাকুন যতক্ষণ না কোনটিই বিদ্যমান থাকে এবং screen -ls কমান্ড লাইনে No Sockets found " আউটপুট না দেয়। তারপর প্রতিটি ডিভাইসের জন্য Screen উইন্ডো পুনরায় তৈরি করুন। Screen বন্ধ হয়ে গেলেও ডিভাইসের অবস্থা বজায় থাকে।

থ্রেড নোড

যদি Thread নেটওয়ার্ক টপোলজি এই কোডল্যাবে বর্ণিত পদ্ধতি অনুযায়ী না হয়, অথবা কোনও কারণে নোডগুলি সংযোগ বিচ্ছিন্ন হয়ে যায় (সম্ভবত লিনাক্স মেশিনটি তাদের পাওয়ার প্রদানকারী স্লিপ মোডে চলে যাওয়ার কারণে), তাহলে Thread নামিয়ে আনা, নেটওয়ার্ক শংসাপত্রগুলি সাফ করা এবং Create the Thread network ধাপ থেকে আবার শুরু করা ভাল।

FTD গুলি রিসেট করতে:

## FTD Commissioner or FTD Joiner ##
------------------------------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

RCP একইভাবে ot-ctl এর মাধ্যমে রিসেট করা যেতে পারে:

## RCP Joiner ##
----------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

১২. মাল্টিকাস্ট ব্যবহার করা

মাল্টিকাস্ট ব্যবহার করা হয় একসাথে একদল ডিভাইসের সাথে তথ্য যোগাযোগ করার জন্য। একটি থ্রেড নেটওয়ার্কে, সুযোগের উপর নির্ভর করে বিভিন্ন গ্রুপের ডিভাইসের সাথে মাল্টিকাস্ট ব্যবহারের জন্য নির্দিষ্ট ঠিকানা সংরক্ষিত থাকে।

IPv6 ঠিকানা

ব্যাপ্তি

ডেলিভারি করা হয়েছে

ff02::1

লিংক-স্থানীয়

সকল FTD এবং MED

ff02::2

লিংক-স্থানীয়

সকল FTD এবং বর্ডার রাউটার

ff03::1

মেশ-স্থানীয়

সকল FTD এবং MED

ff03::2

মেশ-স্থানীয়

সকল FTD এবং বর্ডার রাউটার

যেহেতু আমরা এই কোডল্যাবে বর্ডার রাউটার ব্যবহার করছি না, তাই আসুন দুটি FTD এবং MED মাল্টিকাস্ট ঠিকানার উপর ফোকাস করি।

লিংক-লোকাল স্কোপে সমস্ত থ্রেড ইন্টারফেস থাকে যা একটি একক রেডিও ট্রান্সমিশন, অথবা একটি একক "হপ" দ্বারা পৌঁছানো যায়। নেটওয়ার্ক টপোলজি নির্দেশ করে যে কোন ডিভাইসগুলি ff02::1 মাল্টিকাস্ট ঠিকানায় পিং-এর প্রতিক্রিয়া জানায়।

FTD কমিশনারের পক্ষ থেকে পিং ff02::1 :

## FTD Commissioner ##
----------------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms

নেটওয়ার্কে আরও দুটি ডিভাইস রয়েছে (FTD Joiner এবং RCP Joiner), কিন্তু FTD কমিশনার শুধুমাত্র একটি প্রতিক্রিয়া পেয়েছেন, FTD Joiner এর Link-Local Address (LLA) থেকে। এর মানে হল যে FTD Joiner হল একমাত্র ডিভাইস যেখানে FTD কমিশনার একটি মাত্র হপ দিয়ে পৌঁছাতে পারেন।

otcodelab_top02C_02_LL.png সম্পর্কে

এখন FTD Joiner থেকে ff02::1 পিং করুন:

## FTD Joiner ##
----------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms
8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms

দুটি উত্তর! অন্যান্য ডিভাইসের IPv6 ঠিকানা পরীক্ষা করে আমরা দেখতে পাচ্ছি যে প্রথমটি ( 4b1d দিয়ে শেষ) হল FTD কমিশনারের LLA, এবং দ্বিতীয়টি ( 943b দিয়ে শেষ) হল RCP জয়েনারের LLA।

otcodelab_top02C_02_LL02.png সম্পর্কে

এর অর্থ হল FTD জয়েনার সরাসরি FTD কমিশনার এবং RCP জয়েনার উভয়ের সাথেই সংযুক্ত, যা আমাদের টপোলজি নিশ্চিত করে।

মেশ-স্থানীয়

মেশ-লোকাল স্কোপে একই থ্রেড নেটওয়ার্কের মধ্যে পৌঁছানো যায় এমন সমস্ত থ্রেড ইন্টারফেস রয়েছে। আসুন ff03::1 মাল্টিকাস্ট ঠিকানায় একটি পিংয়ের প্রতিক্রিয়াগুলি দেখি।

FTD কমিশনারের পক্ষ থেকে পিং ff03::1 :

## FTD Commissioner ##
----------------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms

এবার FTD কমিশনার দুটি প্রতিক্রিয়া পেয়েছেন, একটি FTD Joiner's Routing Locator (RLOC, b800 দিয়ে শেষ) থেকে এবং একটি RCP Joiner's Mesh-Local EID (ML-EID, d55f দিয়ে শেষ) থেকে। কারণ mesh-local স্কোপ পুরো Thread নেটওয়ার্ককে অন্তর্ভুক্ত করে। নেটওয়ার্কের যেখানেই একটি ডিভাইস থাকুক না কেন, এটি ff03::1 ঠিকানায় সাবস্ক্রাইব করা হবে।

otcodelab_top02C_02_ML.png সম্পর্কে

একই আচরণ নিশ্চিত করতে FTD Joiner থেকে ff03::1 পিং করুন:

## FTD Joiner ##
----------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms

otcodelab_top02C_02_LL02.png সম্পর্কে

উভয় পিং আউটপুটে RCP জয়েনারের রেসপন্স টাইম লক্ষ্য করুন। RCP জয়েনারের FTD কমিশনারে পৌঁছাতে (68ms) অনেক বেশি সময় লেগেছে FTD জয়েনারের (23ms) তুলনায়। কারণ FTD কমিশনারে পৌঁছাতে এটিকে দুটি হপ করতে হয়, যেখানে FTD জয়েনারের জন্য একটি হপ লাগে।

আপনি হয়তো লক্ষ্য করেছেন যে মেশ-লোকাল মাল্টিকাস্ট পিং শুধুমাত্র দুটি FTD-এর জন্য RLOC-এর সাথে সাড়া দেয়—RCP Joiner-এর জন্য নয়। এর কারণ হল FTD হল নেটওয়ার্কের মধ্যে রাউটার, যেখানে RCP হল একটি End Device।

নিশ্চিত করতে RCP জয়েনারের অবস্থা পরীক্ষা করুন:

## RCP Joiner ##
----------------

> state
child

১৩. UDP ব্যবহার করে বার্তা পাঠান

ওপেনথ্রেড যে অ্যাপ্লিকেশন পরিষেবাগুলি প্রদান করে তার মধ্যে একটি হল ইউজার ডেটাগ্রাম প্রোটোকল (UDP), একটি ট্রান্সপোর্ট লেয়ার প্রোটোকল। ওপেনথ্রেডের উপর নির্মিত একটি অ্যাপ্লিকেশন UDP API ব্যবহার করে থ্রেড নেটওয়ার্কের নোডগুলির মধ্যে বা একটি বহিরাগত নেটওয়ার্কের অন্যান্য ডিভাইসগুলিতে (যেমন ইন্টারনেট, যদি থ্রেড নেটওয়ার্কে একটি বর্ডার রাউটার থাকে) বার্তা প্রেরণ করতে পারে।

UDP সকেটগুলি OpenThread CLI এর মাধ্যমে উন্মুক্ত করা হয়। আসুন এটি ব্যবহার করে দুটি FTD এর মধ্যে বার্তা প্রেরণ করি।

FTD Joiner এর জন্য Mesh-Local EID ঠিকানাটি পান। আমরা এই ঠিকানাটি ব্যবহার করছি কারণ এটি থ্রেড নেটওয়ার্কের যেকোনো স্থান থেকে পৌঁছানো যায়।

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:b800        # Routing Locator (RLOC)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
Done

UDP শুরু করুন এবং যেকোনো IPv6 ঠিকানার জন্য এটিকে একটি সকেটে আবদ্ধ করুন:

## FTD Joiner ##
----------------

> udp open
Done
> udp bind :: 1212

FTD Commissioner এ যান, UDP শুরু করুন এবং FTD Joiner-এ সেট আপ করা সকেটের সাথে সংযোগ করুন, এর ML-EID ব্যবহার করে:

## FTD Commissioner ##
----------------------

> udp open
Done
> udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212
Done

দুটি নোডের মধ্যে UDP সংযোগটি লাইভ থাকা উচিত। FTD কমিশনারের কাছ থেকে একটি বার্তা পাঠান:

## FTD Commissioner ##
----------------------

> udp send hellothere
Done

FTD Joiner- এ, UDP বার্তাটি গৃহীত হয়েছে!

## FTD Joiner ##
----------------

> 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere

১৪. অভিনন্দন!

তুমি একটা ফিজিক্যাল থ্রেড নেটওয়ার্ক তৈরি করেছো!

b915c433e7027cc7.png সম্পর্কে

তুমি এখন জানো:

  • থ্রেড ডিভাইসের ধরণ, ভূমিকা এবং স্কোপের মধ্যে পার্থক্য
  • থ্রেড ডিভাইসগুলি নেটওয়ার্কের মধ্যে তাদের অবস্থা কীভাবে পরিচালনা করে
  • UDP ব্যবহার করে নোডের মধ্যে সহজ বার্তা কীভাবে প্রেরণ করবেন

পরবর্তী পদক্ষেপ

এই কোডল্যাব তৈরি করার জন্য, নিম্নলিখিত অনুশীলনগুলি চেষ্টা করে দেখুন:

  • ot-cli-mtd বাইনারি ব্যবহার করে FTD জয়েনার বোর্ডটিকে MTD হিসেবে রিফ্ল্যাশ করুন এবং লক্ষ্য করুন যে এটি কখনই রাউটারে আপগ্রেড করে না বা লিডার হওয়ার চেষ্টা করে না।
  • নেটওয়ার্কে আরও ডিভাইস যোগ করুন (একটি ভিন্ন প্ল্যাটফর্ম চেষ্টা করুন!) এবং রাউটার এবং চাইল্ড টেবিল ব্যবহার করে মাল্টিকাস্ট ঠিকানাগুলিতে পিং সহ টপোলজি স্কেচ করুন।
  • এনসিপি নিয়ন্ত্রণ করতে পাইস্পিনেল ব্যবহার করুন
  • ওপেনথ্রেড বর্ডার রাউটার ব্যবহার করে এনসিপিকে বর্ডার রাউটারে রূপান্তর করুন এবং আপনার থ্রেড নেটওয়ার্ককে ইন্টারনেটের সাথে সংযুক্ত করুন।

আরও পড়া

বিভিন্ন ধরণের OpenThread রিসোর্সের জন্য openthread.io এবং GitHub দেখুন, যার মধ্যে রয়েছে:

তথ্যসূত্র: