OpenThread गूगल द्वारा जारी की एक खुला स्रोत कार्यान्वयन है Thread® नेटवर्किंग प्रोटोकॉल। Google Nest ने कनेक्टेड होम के लिए उत्पादों के विकास में तेजी लाने के लिए डेवलपर्स के लिए व्यापक रूप से नेस्ट उत्पादों में उपयोग की जाने वाली तकनीक बनाने के लिए OpenThread जारी किया है।
थ्रेड विनिर्देशन IPv6- आधारित विश्वसनीय, सुरक्षित और कम-शक्ति वाले वायरलेस डिवाइस-टू-डिवाइस संचार प्रोटोकॉल को घरेलू अनुप्रयोगों के लिए परिभाषित करता है। OpenThread IPv6, 6LoWPAN, IEEE 802.15.4 सहित सभी थ्रेड नेटवर्किंग परतों को मैक सिक्योरिटी, मेश लिंक इंस्टालेशन और मेश राउटिंग के साथ लागू करता है।
इस कोडेलैब में, आप OpenThread को वास्तविक हार्डवेयर पर प्रोग्राम करेंगे, थ्रेड नेटवर्क बनाएँ और प्रबंधित करें, और नोड्स के बीच संदेश पास करें।
आप क्या सीखेंगे
- देव बोर्डों को ओपनथ्रेड सीएलआई बायनेरिज़ का निर्माण और चमकती
- लिनक्स मशीन और एक देव बोर्ड से मिलकर एक RCP का निर्माण
- OpenThread डेमॉन और
ot-ctl
का उपयोग करके एक आरसीपी के साथ संचार करना - स्क्रीन और OpenThread CLI के साथ मैन्युअल रूप से थ्रेड नोड्स का प्रबंधन करना
- थ्रेड नेटवर्क पर उपकरणों का सुरक्षित कमीशन
- IPv6 मल्टीकास्ट कैसे काम करता है
- UDP के साथ थ्रेड नोड्स के बीच संदेश भेजना
आपको किस चीज़ की ज़रूरत पड़ेगी
हार्डवेयर:
- 3 नॉर्डिक सेमीकंडक्टर nRF52840 देव बोर्ड
- बोर्डों को जोड़ने के लिए 3 यूएसबी टू माइक्रो-यूएसबी केबल
- कम से कम 3 यूएसबी पोर्ट के साथ एक लिनक्स मशीन
सॉफ्टवेयर:
- जीएनयू टूलचिन
- नॉर्डिक nRF5x कमांड लाइन उपकरण
- सीगर जे-लिंक सॉफ्टवेयर
- OpenThread
- गित
अन्यथा नोट किए जाने के अलावा, इस कोडेलैब की सामग्री को क्रिएटिव कॉमन्स एट्रिब्यूशन 3.0 लाइसेंस के तहत लाइसेंस दिया गया है , और कोड नमूने एपाचे 2.0 लाइसेंस के तहत लाइसेंस प्राप्त हैं ।
OpenThread सिमुलेशन
शुरुआत से पहले, आप OpenThread सिमुलेशन कोडेललैब के माध्यम से चलाना चाह सकते हैं, ताकि मूल थ्रेड अवधारणाओं और OpenThread CLI से परिचित हो सकें।
सीरियल पोर्ट टर्मिनल
आपको एक टर्मिनल के माध्यम से सीरियल पोर्ट से कनेक्ट करने के तरीके से परिचित होना चाहिए। यह कोडलैब स्क्रीन का उपयोग करता है और एक उपयोग अवलोकन प्रदान करता है, लेकिन किसी भी अन्य टर्मिनल सॉफ़्टवेयर का उपयोग किया जा सकता है।
लिनक्स मशीन
यह कोडेलैब एक i386- या x86- आधारित लिनक्स मशीन का उपयोग करने के लिए डिज़ाइन किया गया था, जो एक रेडियो सह-प्रोसेसर (आरसीपी) थ्रेड डिवाइस के मेजबान के रूप में सेवा करने के लिए, और सभी थ्रेड विकास बोर्डों को फ्लैश करने के लिए। सभी चरणों को Ubuntu 14.04.5 LTS (भरोसेमंद तहर) पर परीक्षण किया गया था।
नॉर्डिक सेमीकंडक्टर nRF52840 बोर्ड
यह कोडेलैब तीन nRF52840 PDK बोर्डों का उपयोग करता है।
SEGGER J- लिंक स्थापित करें
हम nGF52840 बोर्डों पर प्रोग्राम करने के लिए SEGGER J-Link का उपयोग करते हैं, जिसमें JTAG मॉड्यूल ऑनबोर्ड हैं। इसे अपने लिनक्स मशीन पर स्थापित करें।
अपनी मशीन के लिए उपयुक्त पैकेज डाउनलोड करें, और इसे उचित स्थान पर स्थापित करें। लिनक्स पर यह /opt/SEGGER/JLink
।
NRF5x कमांड लाइन उपकरण स्थापित करें
NRF5x कमांड लाइन टूल आपको OpenThread बायनेरिज़ को nRF52840 बोर्डों पर फ्लैश करने की अनुमति देता है। अपने लिनक्स मशीन पर उपयुक्त nRF5x-Command-Line-Tools- <OS> बिल्ड स्थापित करें।
निकाले गए पैकेज को रूट फ़ोल्डर में रखें ~/
एआरएम जीएनयू टूलचिन स्थापित करें
एआरएम जीएनयू टूलचिन का उपयोग भवन निर्माण के लिए किया जाता है।
हम आपके लिनक्स मशीन पर /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
आर्काइव को /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
रखने की सलाह देते /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
। स्थापना निर्देशों के लिए संग्रह के readme.txt
फ़ाइल में दिए गए निर्देशों का पालन करें।
स्क्रीन स्थापित करें (वैकल्पिक)
स्क्रीन एक सीरियल पोर्ट द्वारा जुड़े उपकरणों तक पहुँचने के लिए एक सरल उपकरण है। यह कोडलैब स्क्रीन का उपयोग करता है, लेकिन आप अपनी इच्छा से किसी भी सीरियल पोर्ट टर्मिनल एप्लिकेशन का उपयोग कर सकते हैं।
$ sudo apt-get install screen
OpenThread
OpenThread क्लोन और इंस्टॉल करें। script/bootstrap
कमांड सुनिश्चित करते हैं कि टूलचेन स्थापित है और पर्यावरण ठीक से कॉन्फ़िगर किया गया है:
OpenThread डेमॉन बनाएँ:
$ script/cmake-build posix -DOT_DAEMON=ONहै
अब आप NRF52840 बोर्डों पर OpenThread बनाने और फ्लैश करने के लिए तैयार हैं।
निर्माण और फ्लैश
Joiner और देशी USB कार्यक्षमता के साथ OpenThread nRF52840 उदाहरण बनाएँ। डिवाइस एक थ्रेड नेटवर्क पर सुरक्षित रूप से प्रमाणित और चालू होने के लिए योजक भूमिका का उपयोग करता है। Native USB nRF52840 और होस्ट के बीच सीरियल ट्रांसपोर्ट के रूप में USB CDC ACM के उपयोग को सक्षम करता है।
पिछले चलाकर पहले बनाता है की हमेशा रेपो साफ make clean
।
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 UART_trans
OpenThread RCP बाइनरी के साथ निर्देशिका पर नेविगेट करें, और इसे हेक्स प्रारूप में बदलें:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
NRF52840 बोर्ड पर बाहरी पावर पिन के बगल में माइक्रो-यूएसबी डिबग पोर्ट में यूएसबी केबल संलग्न करें, और फिर इसे लिनक्स मशीन में प्लग करें। VDD से nRF52840 बोर्ड पर NRF शक्ति के स्रोत स्विच सेट करें। जब सही ढंग से जुड़ा हुआ है, तो LED5 चालू है।
यदि यह लिनक्स मशीन से जुड़ा पहला बोर्ड है, तो यह सीरियल पोर्ट /dev/ttyACM0
रूप में प्रकट होता है (सभी nRF52840 बोर्ड सीरियल पोर्ट पहचानकर्ता के लिए ttyACM
उपयोग करते हैं)।
$ ls /dev/ttyACM* /dev/ttyACM0
आरसीपी के लिए उपयोग किए जा रहे nRF52840 बोर्ड के सीरियल नंबर पर ध्यान दें:
NRFx कमांड लाइन टूल्स के स्थान पर नेविगेट करें, और OpenRhread RCP हेक्स फ़ाइल को nRF52840 बोर्ड पर फ्लैश करें, बोर्ड के सीरियल नंबर का उपयोग करके:
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --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 होस्ट (Linux मशीन) से संवाद करने के लिए nRF52840 बोर्ड पर nRF USB पोर्ट का उपयोग करना चाहिए।
USB केबल के माइक्रो-यूएसबी छोर को फ्लैश किए गए nRF52840 बोर्ड के डिबग पोर्ट से अलग करें, फिर RESET बटन के बगल में माइक्रो-यूएसबी nRF USB पोर्ट पर रीटच करें। USB पर nRF पावर सोर्स स्विच सेट करें।
OpenThread Daemon प्रारंभ करें
RCP डिज़ाइन में, थ्रेड डिवाइस के साथ संचार करने और प्रबंधित करने के लिए OpenThread Daemon का उपयोग करें। ot-daemon
को -v
वर्बोज़ फ़्लैग के साथ शुरू करें ताकि आप लॉग आउटपुट देख सकें और पुष्टि कर सकें कि यह चल रहा है:
$ cd ~/src/openthread $ ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'
सफल होने पर, वर्बोज़ मोड में ot-daemon
निम्नलिखित के समान आउटपुट उत्पन्न करता है:
ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15 ot-daemon[228024]: Thread version: 2 ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08
इस टर्मिनल विंडो को खुला छोड़ दें ताकि ot-daemon
से लॉग देखे जा सकें।
RCP नोड के साथ संचार करने के लिए ot-ctl
का उपयोग करें। ओटी- ot-ctl
OpenThread CLI ऐप के समान CLI का उपयोग करता है। इसलिए, आप अन्य सिम्युलेटेड थ्रेड डिवाइसों की तरह ही ot-daemon
नोड्स को नियंत्रित कर सकते हैं।
दूसरे टर्मिनल विंडो में, ot-ctl
शुरू करें:
$ ./output/posix/bin/ot-ctl >
state
की जाँच करें नोड 2 (आरसीपी नोड) जिसे आपने ot-daemon
साथ शुरू किया था:
> state disabled Done
इस कोडेलैब में प्रयुक्त अन्य दो थ्रेड नोड्स मानक सिस्टम-ऑन-चिप (SoC) डिज़ाइन पर पूर्ण थ्रेड डिवाइसेस (FTDs) हैं। वे wpantund
उपयोग नहीं करते हैं, और उपयोगकर्ता मैन्युअल रूप से उन्हें OpenThread CLI के साथ प्रबंधित करता है।
एक उपकरण आयुक्त के रूप में कार्य करता है, उस नेटवर्क पर उपकरणों को सुरक्षित रूप से प्रमाणित करने और कमीशन करने के लिए। अन्य डिवाइस एक योजक के रूप में कार्य करता है जो आयुक्त थ्रेड नेटवर्क को प्रमाणित कर सकता है।
निर्माण और फ्लैश
NRF52840 प्लेटफ़ॉर्म के लिए OpenThread FTD उदाहरण बनाएँ, जिसमें कमिश्नर और जॉइनर सक्षम हैं:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 UART_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 बोर्ड पर बाहरी पावर पिन के बगल में माइक्रो-यूएसबी पोर्ट में यूएसबी केबल संलग्न करें, और फिर इसे लिनक्स मशीन में प्लग करें। यदि RCP अभी भी लिनक्स मशीन से जुड़ा हुआ है, तो यह नया बोर्ड सीरियल पोर्ट /dev/ttyACM1
(सभी nRF52840 बोर्ड सीरियल पोर्ट पहचानकर्ता के लिए ttyACM
उपयोग ttyACM
) के रूप में दिखाई देना चाहिए।
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
पहले की तरह, FTD के लिए उपयोग किए जा रहे nRF52840 बोर्ड के सीरियल नंबर पर ध्यान दें:
NRFx कमांड लाइन टूल्स के स्थान पर नेविगेट करें, और nRF52840 बोर्ड पर OpenThread CLI FTD हेक्स फ़ाइल को बोर्ड के सीरियल नंबर का उपयोग करके फ्लैश करें:
056311 सी 630बोर्ड को "आयुक्त।"
निर्माण सत्यापित करें
टर्मिनल विंडो से 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 जॉइनर सेट करें
तीसरे nRF52840 बोर्ड को फ्लैश करने के लिए उपरोक्त प्रक्रिया को दोहराएँ, मौजूदा ot-cli-ftd.hex
बिल्ड का उपयोग करके।
यदि यह तीसरा बोर्ड संलग्न होने पर अन्य दो नोड्स लिनक्स मशीन से जुड़े होते हैं, तो इसे सीरियल पोर्ट /dev/ttyACM2
रूप में प्रदर्शित होना चाहिए:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
लेबल "जॉइनर।"
कमांड लाइन से स्क्रीन का एक नया उदाहरण बनाने के बजाय, स्क्रीन का उपयोग करते हुए सत्यापित करें, मौजूदा एक को रीटच करें और इसके भीतर एक नई विंडो बनाएं (जो कि आपने FTD आयुक्त के लिए उपयोग किया है):
$ screen -r
Ctrl + a → के साथ स्क्रीन के भीतर नई विंडो बनाएँ
c
**। ** एक नई कमांड लाइन प्रॉम्प्ट दिखाई देती है। FTT योजक के लिए OpenThread CLI पर पहुँचें:
इस नई विंडो में, OpenThread CLI >
प्रॉम्प्ट को लाने के लिए कीबोर्ड पर रिटर्न को कुछ बार दबाएं। IPv6 इंटरफ़ेस लाओ और पते की जाँच करें:
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
अब जबकि FTD Joiner CLI स्क्रीन के उसी उदाहरण में है जैसे FTD कमिश्नर, आप Ctrl + a → n
का उपयोग करके उनके बीच स्विच कर सकते हैं।
Ctrl + a → का उपयोग करें
d
किसी भी समय स्क्रीन से बाहर निकलने के लिए।
आगे बढ़ते हुए, आप थ्रेड उपकरणों के बीच अक्सर स्विच करते रहेंगे, इसलिए सुनिश्चित करें कि वे सभी लाइव और आसानी से उपलब्ध हैं। अब तक, हम दो FTDs का उपयोग करने के लिए स्क्रीन का उपयोग कर रहे हैं, और यह उपकरण समान टर्मिनल विंडो पर स्क्रीन को विभाजित करने की भी अनुमति देता है। यह देखने के लिए कि एक नोड दूसरे पर जारी आदेशों पर कैसे प्रतिक्रिया करता है।
आदर्श रूप से, आपके पास चार खिड़कियां आसानी से उपलब्ध होनी चाहिए:
-
ot-daemon
सेवा / लॉग - ओटीसी
ot-ctl
माध्यम से आरसीपी जॉइनर - OpenThread CLI के माध्यम से FTD कमिश्नर
- OpenThread CLI के माध्यम से FTD योजक
यदि आप अपने स्वयं के टर्मिनल / सीरियल पोर्ट कॉन्फ़िगरेशन या टूल का उपयोग करना चाहते हैं, तो अगले चरण पर जाने के लिए स्वतंत्र महसूस करें। उस तरह से सभी उपकरणों के लिए टर्मिनल विंडो कॉन्फ़िगर करें जो आपके लिए सबसे अच्छा काम करता है।
स्क्रीन का उपयोग करना
उपयोग में आसानी के लिए, केवल एक स्क्रीन सत्र शुरू करें। आपके पास पहले से ही एक होना चाहिए जब आप दोनों FTDs सेट करते हैं।
स्क्रीन के भीतर सभी कमांड Ctrl + a के साथ शुरू होती हैं।
बेसिक स्क्रीन कमांड:
स्क्रीन सत्र के लिए रीटच (कमांड लाइन से) | |
स्क्रीन सत्र छोड़ दें | Ctrl + a → |
स्क्रीन सत्र के भीतर नई विंडो बनाएं | Ctrl + a → |
एक ही स्क्रीन सत्र में खिड़कियों के बीच स्विच करें | Ctrl + a → |
स्क्रीन सत्र में वर्तमान विंडो को मारें | Ctrl + a → |
विभाजित स्क्रीन
स्क्रीन के साथ, आप टर्मिनल को कई विंडो में विभाजित कर सकते हैं:
Ctrl + a के उपयोग से screen
कमांड को एक्सेस किया जाता है। प्रत्येक कमांड को इस एक्सेस कुंजी कॉम्बो के साथ शुरू करना चाहिए।
यदि आप बिल्कुल कोडेलैब का अनुसरण कर रहे हैं, तो आपके पास एक ही स्क्रीन उदाहरण पर दो विंडो (FTD कमिश्नर, FTD Joiner) होनी चाहिए। स्क्रीन को दोनों के बीच विभाजित करने के लिए, पहले अपना मौजूदा स्क्रीन सत्र दर्ज करें:
$ screen -r
आपको FTD उपकरणों में से एक पर होना चाहिए। स्क्रीन में इन चरणों का पालन करें:
- Ctrl + a →
S
विंडो को क्षैतिज रूप से विभाजित करने के लिए - Ctrl + a →
Tab
को कर्सर को नई खाली विंडो में ले जाने के लिए - Ctrl + a →
n
उस नई विंडो को अगले एक पर स्विच करने के लिए - यदि यह शीर्ष विंडो के समान है, तो Ctrl + a →
n
फिर से अन्य FTD डिवाइस को देखने के लिए
वे अब दोनों दिखाई दे रहे हैं। Ctrl + a → Tab
का उपयोग करके उनके बीच स्विच करें। यह आपको भ्रम से बचने के लिए Ctrl + a → A
साथ प्रत्येक विंडो को फिर से बनाने की सलाह देता है।
उन्नत उपयोग
आगे स्क्रीन को क्वैडंट में विभाजित करने और ot-daemon
लॉग और आरसीपी जॉइनर ot-ctl
, उन सेवाओं को इसी स्क्रीन उदाहरण के भीतर शुरू किया जाना चाहिए। ऐसा करने के लिए, ot-daemon
रोकें और ot-ctl
बाहर निकलें, और उन्हें नए स्क्रीन विंडो (Ctrl + a → c
) के भीतर पुनरारंभ करें।
इस सेटअप की आवश्यकता नहीं है और इसे उपयोगकर्ता के लिए एक अभ्यास के रूप में छोड़ दिया जाता है।
निम्न आदेशों के साथ विंडो के बीच विभाजन और नेविगेट करें:
नई विंडो बनाएं | Ctrl + a → |
खड़खड़ खिड़की खड़ी | Ctrl + a |
क्षैतिज रूप से विभाजित विंडो | Ctrl + a → |
अगली प्रदर्शित विंडो पर जाएं | Ctrl + a → |
प्रदर्शित विंडो को आगे या पीछे स्विच करें | Ctrl + a → |
वर्तमान विंडो का नाम बदलें | Ctrl + a → |
Ctrl + a → d
साथ किसी भी समय स्क्रीन छोड़ दें और कमांड लाइन से screen -r
साथ reattach करें।
स्क्रीन पर अधिक जानकारी के लिए, 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 Master 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 | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
FTD योजक पर OpenThread CLI से:
## FTD Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
यदि "कोडलैब" नेटवर्क सूची में दिखाई नहीं देता है, तो फिर से स्कैन करने का प्रयास करें।
आप ध्यान दें कि दोनों स्कैन में, नेटवर्क जुड़ने योग्य नहीं लगता है (RCP जॉइनर और FTD जॉइनर पर J कॉलम)। इसका मतलब केवल यह है कि थ्रेड कमीशन नेटवर्क पर सक्रिय नहीं है। यह अभी भी आउट-ऑफ-बैंड में शामिल हो सकता है, मैन्युअल रूप से योजक डिवाइस में नेटवर्क मास्टर कुंजी दर्ज करके।
चलो हमारे द्वारा बनाए गए थ्रेड नेटवर्क में RCP जॉइनर जोड़ते हैं, एक आउट-ऑफ-बैंड प्रक्रिया का उपयोग करते हुए। RCP योजक पर नेटवर्क के लिए स्कैन करें:
## RCP Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
शामिल होने के लिए, अपने सक्रिय डेटासेट में RCP जॉइनर पर नेटवर्क मास्टर कुंजी (हम सिर्फ FTD कमिश्नर से प्राप्त करें) सेट करें।
## RCP Joiner ## ---------------- > dataset masterkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
यह सुनिश्चित करने के लिए डेटासेट की जाँच करें कि यह सही तरीके से सेट है।
## RCP Joiner ## ---------------- > dataset Master Key: 1234c0de7ab51234c0de7ab51234c0de
थ्रेड अप करें ताकि आरसीपी जॉइनर "कोडलैब" नेटवर्क में शामिल हो जाए। कुछ सेकंड रुकें, राज्य, RLOC16 और उसके IPv6 पतों की जाँच करें:
## RCP Joiner ## ---------------- > 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
मेश-लोकल आईपीवी 6 एड्रेस ( 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 योजक (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
अब हमारे पास एक थ्रेड नेटवर्क है जिसमें दो नोड्स हैं, जो इस टोपोलॉजी आरेख द्वारा सचित्र हैं:
टोपोलॉजी आरेख
जब आप बाकी कोडेलैब के माध्यम से काम करते हैं, तो जब भी नेटवर्क में परिवर्तन होता है, हम एक नया थ्रेड टोपोलॉजी आरेख प्रदर्शित करेंगे। नोड भूमिकाओं को निम्नानुसार दर्शाया जाता है:
राउटर हमेशा पेंटागन होते हैं, और एंड डिवाइसेस हमेशा सर्कल होते हैं। प्रत्येक नोड पर संख्या उस समय प्रत्येक नोड की वर्तमान भूमिका और स्थिति के आधार पर, सीएलआई आउटपुट में दिखाए गए राउटर आईडी या चाइल्ड आईडी का प्रतिनिधित्व करती है।
अब तीसरे थ्रेड डिवाइस को "कोडलैब" नेटवर्क में जोड़ें। इस बार हम अधिक सुरक्षित इन-बैंड कमीशन प्रक्रिया का उपयोग करने जा रहे हैं। FTD योजक पर , नेटवर्क के लिए स्कैन करें:
## FTD Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | f65ae2853ff0c4e4 | 11 | -36 | 57 |
J कॉलम में A 0
इंगित करता है कि थ्रेड कमीशनिंग डिवाइस पर सक्रिय नहीं है।
आइए इस विशिष्ट उपकरण पर कमीशन करते समय विशिष्ट हों, और केवल FTD जॉइनर को शामिल होने दें। फिर भी FTD जॉइनर पर, eui64
प्राप्त करें, इसलिए FTD कमिश्नर इसकी पहचान कर सकते हैं:
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
eui64
कमिश्नर पर , कमिश्नर को शुरू करें और डिवाइस के eui64
को निर्दिष्ट करें जो जॉइनर क्रेडेंशियल के साथ जुड़ सकते हैं। योजक क्रेडेंशियल एक डिवाइस-विशिष्ट पासफ़्रेज़ है।
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
FTD जॉइनर , और rescan पर स्विच करें:
0bd2b290 जैसा कि J कॉलम में 1
द्वारा दर्शाया गया है, थ्रेड कमीशनिंग अब नेटवर्क पर सक्रिय है। जॉइनर क्रेडेंशियल के साथ जॉइनर की भूमिका शुरू करें जिसे आपने एफटीडी कमिश्नर के सामने रखा था:
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
एक या दो मिनट के भीतर, आपको एक सफल प्रमाणीकरण की पुष्टि मिल जाती है:
## FTD Joiner ## ---------------- > Join successहै
थ्रेड को ऊपर लाएं ताकि एफटीडी जॉइनर "कोडलैब" नेटवर्क में शामिल हो जाए, और तुरंत राज्य और आरएलओसी 16 की जांच करें:
## FTD Joiner ## ---------------- > thread start Done > state child Done > rloc16 0c02 Done
डिवाइस के आईपीवी 6 पते की जांच करें। ध्यान दें कि कोई 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 कमिश्नर के पास जाएं और "कोडलैब" नेटवर्क में तीन डिवाइस मौजूद हैं, इसकी पुष्टि करने के लिए राउटर और चाइल्ड टेबल की जांच करें:
## 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
आरएलओसी 16 के आधार पर, एफटीडी जॉइनर ने एंड डिवाइस (बच्चे) के रूप में नेटवर्क से जुड़ा है। यहाँ हमारे अद्यतन टोपोलॉजी है:
इस कोडेलैब में थ्रेड डिवाइस एक विशिष्ट प्रकार का फुल थ्रेड डिवाइस (FTD) है, जिसे राउटर एलिगेंट एंड डिवाइस (REED) कहा जाता है। इसका मतलब है कि वे राउटर या एंड डिवाइस के रूप में कार्य कर सकते हैं, और एक एंड डिवाइस से एक राउटर तक खुद को बढ़ावा दे सकते हैं।
थ्रेड 32 राउटर तक का समर्थन कर सकता है, लेकिन 16 और 23 के बीच राउटर की संख्या को रखने की कोशिश करता है। अगर एक आरईडी एक एंड डिवाइस (बच्चे) के रूप में संलग्न करता है और राउटर की संख्या 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 जॉइनर (एक्सटेंडेड मैक = e6cdd2d93249a243
) ने खुद को एक राउटर में प्रमोट किया है। ध्यान दें कि RLOC16 अलग है ( b800
बजाय 0c02
)। ऐसा इसलिए है क्योंकि RLOC16 डिवाइस के राउटर आईडी और चाइल्ड आईडी पर आधारित है। जब यह एंड डिवाइस से राउटर में स्थानांतरित होता है, तो इसकी राउटर आईडी और चाइल्ड आईडी मान बदल जाते हैं, और इसी तरह RLOC16 होता है।
नए राज्य और RLOC16 की पुष्टि FTD जॉइनर पर करें :
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Doneहै
FTD जॉइनर को डाउनग्रेड करें
आप इस व्यवहार को मैन्युअल रूप से FTD योजक को एक राउटर से एंड डिवाइस पर अपग्रेड करके परीक्षण कर सकते हैं। बच्चे को राज्य बदलें और RLOC16 की जाँच करें:
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
FTD कमिश्नर पर , FTD जॉइनर को अब चाइल्ड टेबल (ID = 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
के b800
साथ एक राउटर में वापस आ जाएगा।
नेता को हटाओ
लीडर सभी थ्रेड राउटर्स में सेल्फ-निर्वाचित होता है। इसका अर्थ है कि यदि थ्रेड नेटवर्क से वर्तमान लीडर को हटा दिया जाता है, तो अन्य राउटर्स में से एक नया लीडर बन जाएगा।
FTD कमिश्नर पर , थ्रेड नेटवर्क से इसे हटाने के लिए थ्रेड को बंद करें:
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
दो मिनट के भीतर, FTD Joiner नया थ्रेड लीडर बन जाता है। सत्यापित करने के लिए 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
बच्चे की मेज की जाँच करें। ध्यान दें कि एक नया RLOC16 है। यह आरसीपी जॉइनर है, जैसा कि इसकी आईडी और विस्तारित मैक द्वारा इंगित किया गया है। थ्रेड नेटवर्क को एक साथ रखने के लिए, इसने पैरंट राउटर्स को बदल दिया है, 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
एक बच्चे के रूप में एफटीडी जॉइनर को संलग्न करने के लिए आपको आरसीपी जॉइनर के लिए कुछ मिनट इंतजार करना पड़ सकता है। पुष्टि करने के लिए राज्य और 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
हमारे थ्रेड नेटवर्क में तीन नोड्स होते हैं।
विभिन्न टर्मिनल या स्क्रीन विंडो पर कई उपकरणों के साथ थ्रेड नेटवर्क का प्रबंधन जटिल हो सकता है। यदि आप समस्याओं का सामना करते हैं तो नेटवर्क या अपने कार्यक्षेत्र की स्थिति को "रीसेट" करने के लिए इन युक्तियों का उपयोग करें।
स्क्रीन
यदि आप कभी भी अपने कॉन्फ़िगरेशन (बहुत अधिक स्क्रीन विंडो, या स्क्रीन के भीतर स्क्रीन) में खो जाते हैं, तो Ctrl + a → k के साथ स्क्रीन विंडो को तब तक screen -ls
जब तक कोई मौजूद न हो और कमांड लाइन आउटपुट पर screen -ls
No Sockets found
। फिर प्रत्येक डिवाइस के लिए स्क्रीन विंडोज को फिर से बनाएँ। स्क्रीन मारे जाने पर भी डिवाइस की स्थिति बरकरार रहती है।
थ्रेड नोड्स
यदि थ्रेड नेटवर्क टोपोलॉजी इस कोडेलैब में वर्णित नहीं है, या नोड्स किसी कारण से डिस्कनेक्ट हो जाते हैं (शायद इसलिए कि लिनक्स मशीन उन्हें सो गई थी), थ्रेड को नीचे लाना सबसे अच्छा है, नेटवर्क क्रेडेंशियल्स को साफ़ करें, और फिर से शुरू करें थ्रेड नेटवर्क चरण।
FTDs रीसेट करने के लिए:
## 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 पता | क्षेत्र | को पहुंचा दिया गया |
| लिंक स्थानीय | सभी एफटीडी और मेड |
| लिंक स्थानीय | सभी FTDs और बॉर्डर राउटर |
| मेष- स्थानीय | सभी एफटीडी और मेड्स |
| मेष- स्थानीय | सभी FTDs और बॉर्डर राउटर |
चूंकि हम इस कोडेलैब में बॉर्डर राउटर का उपयोग नहीं कर रहे हैं, आइए दो एफटीडी और मेड मल्टीकास्ट पते पर ध्यान केंद्रित करें।
लिंक स्थानीय
लिंक-लोकल स्कोप में एकल रेडियो प्रसारण, या एकल "हॉप" द्वारा उपलब्ध सभी थ्रेड इंटरफेस शामिल हैं। नेटवर्क टोपोलॉजी तय करता है कि कौन से उपकरण ff02::1
मल्टीकास्ट एड्रेस के लिए पिंग का जवाब देते हैं।
ff02::1
आयुक्त से पिंग 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 जॉइनर के लिंक-लोकल एड्रेस (LLA) से। इसका मतलब यह है कि एफटीडी जॉइनर एकमात्र उपकरण है जो एफटीडी कमिश्नर एकल हॉप के साथ पहुंच सकता है।
अब ff02::1
को FTD जॉइनर से :
## 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 है।
इसका मतलब है कि FTD जॉइनर सीधे FTD कमिश्नर और RCP जॉइनर दोनों से जुड़ा है, जो हमारे टोपोलॉजी की पुष्टि करता है।
मेष- स्थानीय
मेश-लोकल स्कोप में समान थ्रेड नेटवर्क के भीतर उपलब्ध सभी थ्रेड इंटरफेस शामिल हैं। आइए देखें पिंग की प्रतिक्रियाओं को ff03::1
मल्टीकास्ट एड्रेस।
ff03::1
आयुक्त से पिंग 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
इस बार एफटीडी कमिश्नर को दो प्रतिक्रियाएँ मिलीं, एक b800
लोकेटर ( b800
, b800
में समाप्त) और एक आरसीपी जॉइनर मेष-लोकल ईआईडी (एमएल-ईआईडी, d55f
में समाप्त) से। ऐसा इसलिए है क्योंकि मेष-स्थानीय गुंजाइश में संपूर्ण थ्रेड नेटवर्क शामिल है। कोई फर्क नहीं पड़ता कि नेटवर्क में कोई उपकरण कहां है, इसे ff03::1
पते पर सब्सक्राइब किया जाएगा।
उसी व्यवहार की पुष्टि करने के लिए 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
दोनों पिंग आउटपुट में आरसीपी जॉइनर के लिए प्रतिक्रिया समय पर ध्यान दें। RCP जॉइनर को FTD कमिश्नर (68ms) तक पहुँचने में ज्यादा समय लगता है, जितना कि FTD जॉइनर (23ms) तक पहुँचने में। ऐसा इसलिए है क्योंकि FTD जॉइनर के लिए एक हॉप की तुलना में, FTD कमिश्नर तक पहुंचने के लिए इसे दो हॉप्स बनाने पड़ते हैं।
आपने यह भी देखा होगा कि मेष-स्थानीय मल्टीकास्ट पिंग ने RLOC के साथ केवल दो FTDs के लिए प्रतिसाद दिया था - RCP जॉइनर नहीं। ऐसा इसलिए है क्योंकि एफटीडी नेटवर्क के भीतर राउटर हैं, जबकि आरसीपी एक एंड डिवाइस है।
पुष्टि करने के लिए RCP जॉइनर की स्थिति की जाँच करें:
## RCP Joiner ## ---------------- > state child
OpenThread द्वारा प्रदान की जाने वाली एप्लिकेशन सेवाओं में से एक उपयोगकर्ता डेटाग्राम प्रोटोकॉल (UDP), एक ट्रांसपोर्ट लेयर प्रोटोकॉल है। OpenThread पर बनाया गया एक एप्लिकेशन थ्रेड नेटवर्क में नोड्स के बीच या बाहरी नेटवर्क में अन्य डिवाइसों (जैसे कि थ्रेड नेटवर्क में एक बॉर्डर राउटर की सुविधा है) के बीच संदेशों को पास करने के लिए UDP API का उपयोग कर सकता है।
UDP सॉकेट्स को OpenThread CLI के माध्यम से उजागर किया जाता है। आइए इसका उपयोग दो एफटीडी के बीच संदेशों को पारित करने के लिए करें।
FTD योजक के लिए मेष-स्थानीय ईआईडी पता प्राप्त करें। हम इस पते का उपयोग कर रहे हैं क्योंकि यह थ्रेड नेटवर्क में कहीं से भी पहुंच योग्य है।
## 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 open Done > udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212 Done
यूडीपी कनेक्शन को दो नोड्स के बीच रहना चाहिए। FTD आयुक्त से एक संदेश भेजें:
## FTD Commissioner ## ---------------------- > udp send hellothere Done
एफटीडी जॉइनर पर , यूडीपी संदेश प्राप्त हुआ है!
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
आपने एक भौतिक थ्रेड नेटवर्क बनाया है!
अब आप जानते हैं:
- थ्रेड डिवाइस के प्रकार, भूमिका और स्कोप के बीच का अंतर
- थ्रेड डिवाइस नेटवर्क के भीतर अपने राज्यों का प्रबंधन कैसे करते हैं
- यूडीपी का उपयोग करके नोड्स के बीच सरल संदेश कैसे पास करें
अगले कदम
इस कोडेलैब का निर्माण, निम्नलिखित अभ्यास आज़माएं:
- FTD योजक बोर्ड को MTD के रूप में
ot-cli-mtd
बाइनरी का उपयोग करकेot-cli-mtd
, और निरीक्षण करें कि यह कभी भी खुद को राउटर में अपग्रेड नहीं करता है या लीडर बनने की कोशिश नहीं करता है। - नेटवर्क में अधिक डिवाइस जोड़ें (एक अलग प्लेटफ़ॉर्म पर प्रयास करें!) राउटर और चाइल्ड टेबल का उपयोग करके टोपोलॉजी को स्केच करें और साथ ही मल्टीकास्ट पते पर पिंग करें
- NCP को नियंत्रित करने के लिए pyspinel का उपयोग करें
- OpenThread Border Router का उपयोग करके NCP को बॉर्डर राउटर में बदलें और अपने थ्रेड नेटवर्क को इंटरनेट से कनेक्ट करें
अग्रिम पठन
OpenThread संसाधनों की एक किस्म के लिए opIIIread.io और GitHub देखें :
- समर्थित प्लेटफ़ॉर्म - उन सभी प्लेटफार्मों की खोज करता है जो OpenThread का समर्थन करते हैं
- OpenThread का निर्माण करें - OpenThread के निर्माण और विन्यास पर अधिक जानकारी
- थ्रेड प्राइमर - इस कोडेलैब में चित्रित सभी थ्रेड अवधारणाओं को कवर करता है
संदर्भ: