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

1। পরিচিতি

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

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

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

সফটওয়্যার:

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

2. শুরু করা

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

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

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

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

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

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

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

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

a6693da3ce213856.png

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

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

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

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

নিষ্কাশিত প্যাকেজটি রুট ফোল্ডারে রাখুন ~/

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

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

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

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

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

$ sudo apt-get install screen

3. ক্লোন সংগ্রহস্থল

ওপেন থ্রেড

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

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

OpenThread ডেমন তৈরি করুন:

$ script/cmake-build posix -DOT_DAEMON=ON

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

4. RCP যোগদানকারী সেট আপ করুন

বিল্ড এবং ফ্ল্যাশ

Joiner এবং নেটিভ USB কার্যকারিতা সহ OpenThread nRF52840 উদাহরণ তৈরি করুন। একটি ডিভাইস সুরক্ষিতভাবে প্রমাণীকরণ এবং একটি থ্রেড নেটওয়ার্কে চালু করার জন্য যোগদানকারীর ভূমিকা ব্যবহার করে। নেটিভ ইউএসবি 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 কেবলটি সংযুক্ত করুন এবং তারপরে এটি লিনাক্স মেশিনে প্লাগ করুন। nRF52840 বোর্ডে nRF পাওয়ার সোর্স সুইচ VDD এ সেট করুন। সঠিকভাবে সংযুক্ত হলে, LED5 চালু থাকে।

20a3b4b480356447.png

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

$ ls /dev/ttyACM*
/dev/ttyACM0

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

c00d519ebec7e5f0.jpeg

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" লেবেল করুন যাতে পরে আপনি বোর্ডের ভূমিকাগুলিকে বিভ্রান্ত না করেন৷

নেটিভ ইউএসবি-তে সংযোগ করুন

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

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

46e7b670d2464842.png

OpenThread ডেমন শুরু করুন

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

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

সফল হলে, ভার্বোজ মোডে 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
>

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

> state
disabled
Done

5. FTDs সেট আপ করুন

এই কোডল্যাবে ব্যবহৃত অন্য দুটি থ্রেড নোড হল স্ট্যান্ডার্ড সিস্টেম-অন-চিপ (এসওসি) ডিজাইনে ফুল থ্রেড ডিভাইস (এফটিডি)। একটি প্রোডাকশন সেটিংয়ে, কেউ ওপেনথ্রেড এনসিপি দৃষ্টান্তগুলি নিয়ন্ত্রণ করতে wpantund , একটি প্রোডাকশন-গ্রেড নেটওয়ার্ক ইন্টারফেস ড্রাইভার ব্যবহার করতে পারে, কিন্তু এই কোডল্যাবে, আমরা ot-ctl , OpenThread CLI ব্যবহার করব।

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

বিল্ড এবং ফ্ল্যাশ

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

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

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

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

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

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

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

c00d519ebec7e5f0.jpeg

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

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

নেটিভ ইউএসবি-তে সংযোগ করুন

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

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

46e7b670d2464842.png

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

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

$ screen /dev/ttyACM1 115200

নতুন উইন্ডোতে, OpenThread CLI > প্রম্পট আনতে কীবোর্ডে কয়েকবার রিটার্ন টিপুন। 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 Joiner সেট আপ করুন

বিদ্যমান 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 115200

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

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

এখন যেহেতু এফটিডি যোগকারী সিএলআই এফটিডি কমিশনারের মতো স্ক্রীনের একই উদাহরণে রয়েছে, আপনি Ctrl+a → n ব্যবহার করে তাদের মধ্যে স্যুইচ করতে পারেন।

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

d যেকোনো সময় স্ক্রীন থেকে প্রস্থান করুন।

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

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

আদর্শভাবে, আপনার চারটি উইন্ডো সহজেই উপলব্ধ থাকা উচিত:

  1. ot-daemon পরিষেবা / লগ
  2. ot-ctl এর মাধ্যমে RCP যোগদানকারী
  3. OpenThread CLI এর মাধ্যমে FTD কমিশনার
  4. OpenThread CLI এর মাধ্যমে FTD যোগকারী

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

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

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

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

মৌলিক স্ক্রীন কমান্ড:

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

screen -r

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

Ctrl+a → d

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

Ctrl+a → c

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

Ctrl+a → n (ফরোয়ার্ড)Ctrl+a → p (পিছনে)

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

Ctrl+a → k

বিভক্ত পর্দা

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

f1cbf1258cf0a5a.png

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

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

$ screen -r

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

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

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

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

স্ক্রীনটিকে আরও চতুর্ভুজে বিভক্ত করতে এবং ot-daemon লগ এবং RCP Joiner ot-ctl দেখতে, এই একই স্ক্রীন ইনস্ট্যান্সের মধ্যে এই পরিষেবাগুলি শুরু করতে হবে। এটি করতে, ot-daemon বন্ধ করুন এবং ot-ctl থেকে প্রস্থান করুন, এবং নতুন স্ক্রীন উইন্ডোগুলির মধ্যে পুনরায় চালু করুন (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 -r এর সাথে পুনরায় সংযুক্ত করুন।

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

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

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

## 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 Joiner ##
----------------

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

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

8. RCP যোগকারী যোগ করুন

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

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

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

এর পরে, RCP যোগদানকারীতে , 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

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

এফটিডি কমিশনারে ফিরে যান, উভয় ডিভাইস একই নেটওয়ার্কের অংশ কিনা তা নিশ্চিত করতে রাউটার এবং চাইল্ড টেবিল চেক করুন। 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 যোগদানকারীর মেশ-স্থানীয় ঠিকানা (RCP যোগদানকারীর ipaddr আউটপুট থেকে প্রাপ্ত মেশ-স্থানীয় ঠিকানা) পিং করুন:

## 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 আউটপুটে দেখানো রাউটার আইডি বা চাইল্ড আইডি উপস্থাপন করে।

9. FTD যোগদানকারীকে কমিশন করুন

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

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

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

> eui64
2f57d222545271f1
Done

FTD কমিশনার- এ, কমিশনার শুরু করুন এবং যোগদানকারী শংসাপত্রের সাথে যোগ দিতে পারে এমন ডিভাইসের eui64 উল্লেখ করুন, উদাহরণস্বরূপ J01NME । যোগকারী শংসাপত্র হল একটি ডিভাইস-নির্দিষ্ট স্ট্রিং যার দৈর্ঘ্য 6 থেকে 32 অক্ষরের মধ্যে রয়েছে।

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

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

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

## 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 নেই। এর কারণ এই ডিভাইসটি নেতা নয়, বা এটি কোনো অ্যানিকাস্ট-নির্দিষ্ট ভূমিকা রাখে না যার জন্য একটি 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 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

10. কর্ম থ্রেড

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

থ্রেড 32টি রাউটার পর্যন্ত সমর্থন করতে পারে, কিন্তু রাউটারের সংখ্যা 16 থেকে 23 এর মধ্যে রাখার চেষ্টা করে। যদি একটি REED একটি শেষ ডিভাইস (শিশু) হিসাবে সংযুক্ত করে এবং রাউটারের সংখ্যা 16-এর নিচে হয়, দুই মিনিটের মধ্যে একটি র্যান্ডম সময়ের পরে এটি স্বয়ংক্রিয়ভাবে একটি রাউটারে নিজেকে উন্নীত করে।

FTD যোগকারী যোগ করার পর আপনার থ্রেড নেটওয়ার্কে যদি দুটি সন্তান থাকে, তাহলে কমপক্ষে দুই মিনিট অপেক্ষা করুন এবং তারপর 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 যোগদানকারী (এক্সটেন্ডেড MAC = e6cdd2d93249a243 ) নিজেকে একটি রাউটারে উন্নীত করেছে। উল্লেখ্য যে RLOC16 ভিন্ন ( 0c02 এর পরিবর্তে b800 )। কারণ RLOC16 একটি ডিভাইসের রাউটার আইডি এবং চাইল্ড আইডির উপর ভিত্তি করে। যখন এটি শেষ ডিভাইস থেকে রাউটারে রূপান্তরিত হয়, তখন এর রাউটার আইডি এবং চাইল্ড আইডি মান পরিবর্তন হয় এবং RLOC16ও পরিবর্তন হয়।

otcodelab_top01C.png

FTD যোগদানকারীতে নতুন রাজ্য এবং RLOC16 নিশ্চিত করুন:

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

> state
router
Done
> rloc16
b800
Done

FTD Joiner ডাউনগ্রেড করুন

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

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

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

এফটিডি কমিশনারে ফিরে, এফটিডি যোগদানকারীকে এখন চাইল্ড টেবিলে উপস্থিত হওয়া উচিত (আইডি = 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 সহ একটি রাউটারে ফিরে যাবে।

otcodelab_top01C.png

নেতাকে সরান

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

এফটিডি কমিশনারে , থ্রেড নেটওয়ার্ক থেকে থ্রেড অপসারণ করতে থ্রেড বন্ধ করুন:

## 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 যোগকারী, যেমনটি এর আইডি এবং এক্সটেন্ডেড MAC দ্বারা নির্দেশিত। থ্রেড নেটওয়ার্ককে একসাথে রাখার জন্য, এটি FTD কমিশনার থেকে FTD যোগদানকারীতে অভিভাবক রাউটারগুলি স্যুইচ করেছে। এর ফলে RCP যোগদানকারীর জন্য একটি নতুন RLOC16 আসে (কারণ এর রাউটার আইডি পরিবর্তিত হয়েছে, 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

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

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

> state
child
> rloc16
b801

FTD কমিশনারকে পুনরায় সংযুক্ত করুন

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

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

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

> ifconfig up
Done
> thread start
Done

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

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

> state
router
Done

যাচাই করতে FTD Joiner- এ রাউটার এবং চাইল্ড টেবিল চেক করুন:

## 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

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

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

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

পর্দা

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

থ্রেড নোড

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

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

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

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

IPv6 ঠিকানা

ব্যাপ্তি

বিতরণ করা হয়েছে

ff02::1

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

সমস্ত FTDs এবং MEDs

ff02::2

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

সমস্ত FTD এবং বর্ডার রাউটার

ff03::1

জাল-স্থানীয়

সমস্ত FTDs এবং MEDs

ff03::2

জাল-স্থানীয়

সমস্ত FTD এবং বর্ডার রাউটার

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

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

FTD কমিশনার থেকে Ping 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 হল একমাত্র ডিভাইস যা 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 কমিশনার থেকে Ping 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 এ শেষ হয়েছে) থেকে। কারণ জাল-স্থানীয় সুযোগ সমগ্র থ্রেড নেটওয়ার্ক নিয়ে গঠিত। নেটওয়ার্কে একটি ডিভাইস যেখানেই থাকুক না কেন, এটি ff03::1 ঠিকানায় সাবস্ক্রাইব করা হবে।

otcodelab_top02C_02_ML.png

একই আচরণ নিশ্চিত করতে FTD যোগদানকারী থেকে 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 যোগকারী নয়। এর কারণ হল এফটিডি হল নেটওয়ার্কের মধ্যে রাউটার, আর আরসিপি হল একটি এন্ড ডিভাইস।

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

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

> state
child

13. UDP দিয়ে বার্তা পাঠান

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

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

FTD যোগদানকারীর জন্য মেশ-স্থানীয় 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 জয়নারে যে সকেট সেট করেছেন তার সাথে সংযোগ করুন:

## 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

14. অভিনন্দন!

আপনি একটি শারীরিক থ্রেড নেটওয়ার্ক তৈরি করেছেন!

b915c433e7027cc7.png

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

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

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

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

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

আরও পড়া

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

তথ্যসূত্র: