1. परिचय
OpenThread को Google Nest की टीम रिलीज़ करती है. यह Thread® नेटवर्किंग प्रोटोकॉल का एक ओपन-सोर्स लागू करने वाला ऐप्लिकेशन है. इसे कनेक्टेड होम के लिए प्रॉडक्ट के डेवलपमेंट में तेज़ी लाने के लिए डिज़ाइन किया गया है. Thread की खास जानकारी में घर और कारोबार की बिल्डिंग ऐप्लिकेशन के लिए, आईपीवी6 आधारित भरोसेमंद, सुरक्षित, और कम पावर वाले वायरलेस डिवाइस-टू-डिवाइस कम्यूनिकेशन प्रोटोकॉल के बारे में बताया गया है.
Espressif ने FreeRTOS और LwIP पर आधारित OpenThread स्टैक को पोर्ट किया है. इससे डेवलपर तेज़ी से Thread नेटवर्क बना सकते हैं. मिलते-जुलते सोर्स कोड को GitHub से लिया जा सकता है. साथ ही, Espressif ने आरटीओएस के आधार पर Thread Border राऊटर को भी लागू किया है.
इस कोडलैब में, OpenThread को असल हार्डवेयर पर प्रोग्राम किया जाएगा, Thread नेटवर्क बनाया और मैनेज किया जाएगा, और मैसेज को नोड के बीच पास किया जाएगा.
आप इन चीज़ों के बारे में जानेंगे
- ईएसपी बोर्ड पर, OpenThread CLI बाइनरी बनाना और उन्हें फ़्लैश करना.
- ESP Thread बॉर्डर राऊटर बोर्ड पर बॉर्डर राऊटर को बनाया और फ़्लैश किया जा रहा है.
- ESP मॉनिटर और OpenThread सीएलआई की मदद से, थ्रेड नोड को मैन्युअल तरीके से मैनेज करें.
- Thread बॉर्डर राऊटर पर Thread नेटवर्क बनाया जा रहा है.
- Thread नेटवर्क पर डिवाइसों को सुरक्षित रूप से चालू करना.
- थ्रेड नोड के बीच IPv6 पते को पिंग करना.
- यूडीपी वाले थ्रेड नोड के बीच मैसेज पास करना.
आपको इनकी ज़रूरत होगी
हार्डवेयर:
- आईईईई 802.15.4 मॉड्यूल के साथ दो ईएसपी बोर्ड.
- 1 ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड.
सॉफ़्टवेयर:
2. शुरू करना
- ईएसपी-आईडीएफ़ इंस्टॉलेशन.
सॉफ़्टवेयर डेवलपमेंट एनवायरमेंट को इंस्टॉल करने के लिए, कृपया ईएसपी-आईडीएफ़ प्रोग्रामिंग गाइड को अपनाएं.
- ESP Thread Border राऊटर SDK टूल का क्लोन बनाएं.
ESP-THREAD-BR, आधिकारिक ईएसपी Thread बॉर्डर राऊटर SDK टूल है. यह Thread बॉर्डर राऊटर को बनाने के लिए, नेटवर्क की सभी बुनियादी सुविधाओं के साथ काम करता है. साथ ही, इसे तेज़ी से प्रॉडक्ट बनाने के लिए, प्रॉडक्ट लेवल की बेहतरीन सुविधाओं को भी इंटिग्रेट करता है.
$ cd <your-local-workspace> $ git clone --recursive https://github.com/espressif/esp-thread-br.git
3. बिल्ड और फ़्लैश
IEEE 802.15.4 मॉड्यूल वाले ईएसपी बोर्ड पर ot-cli-ftd बाइनरी फ़ाइल बनाने और उसे फ़्लैश करने के लिए, ज़्यादा जानकारी के लिए ईएसपी-आईडीएफ़ का उदाहरण ot_cli देखें:
$ cd <your-idf-path>/examples/openthread/ot_cli $ idf.py set-target <your-board-type>
मेन्यू कॉन्फ़िगरेशन की मदद से जॉइनर की सुविधा चालू करें:
$ idf.py menuconfig
कॉम्पोनेंट कॉन्फ़िगरेशन > OpenThread > योजक सक्षम करें, फिर बिल्ड और फ़्लैश करें.
$ idf.py -p <your-local-port> build flash monitor
ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड पर ot-br बाइनरी फ़ाइल बनाने और उसे फ़्लैश करने के लिए, आपको पहले आरसीपी बाइनरी फ़ाइल बनानी होगी. इस आरसीपी बाइनरी फ़ाइल को, ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड पर मौजूद डिवाइस पर साफ़ तौर पर फ़्लैश करने की ज़रूरत नहीं है. इसे बॉर्डर राऊटर की बाइनरी फ़ाइल में शामिल किया जाएगा. साथ ही, इसे पहली बार चालू करने पर, ESP32-H2 चिप में फ़्लैश किया जाएगा या आरसीपी फ़र्मवेयर में बदलाव किया जाएगा. ज़्यादा जानकारी के लिए, ESP Thread BR दस्तावेज़ को देखें:
$ cd <your-idf-path>/examples/openthread/ot_rcp $ idf.py set-target esp32h2 $ idf.py build $ cd <your-esp-thread-br-path>/examples/basic_thread_border_router $ idf.py set-target esp32s3
मेन्यू कॉन्फ़िगरेशन की मदद से कमिश्नर की सुविधा चालू करें:
$ idf.py menuconfig
कॉम्पोनेंट कॉन्फ़िगरेशन > OpenThread > कमिश्नर को सक्षम करें, फिर बनाएं और फ़्लैश करें.
$ idf.py -p <your-local-port> build flash monitor
4. Thread बॉर्डर राऊटर पर Thread नेटवर्क बनाना
अब ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड (बीआर कमिश्नर) पर, OpenThread कमांड लाइन का इस्तेमाल करके Thread नेटवर्क बनाया जा सकता है:
## BR Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 21 Channel Mask: 0x07fff800 Ext PAN ID: 151975d11bea97b5 Mesh Local Prefix: fd6a:b54b:d6a3:b05a::/64 Network Key: 731ab6a60a64a0a0b14b259b86b2be01 Network Name: OpenThread-1444 PAN ID: 0x1444 PSKc: 54e7f18d2575014da94db09df29c5df0 Security Policy: 672 onrc 0 Done
इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:
> dataset commit active Done
IPv6 इंटरफ़ेस खोलें:
> ifconfig up I (59329) OPENTHREAD: Platform UDP bound to port 49153 Done I (59329) OT_STATE: netif up
Thread प्रोटोकॉल पर कार्रवाई शुरू करें:
> thread start I(61709) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(62469) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(69079) OPENTHREAD:[N] RouterTable---: Allocate router id 11 I(69079) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c00 I(69089) OPENTHREAD:[N] Mle-----------: Role detached -> leader I(69089) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 I (69099) OPENTHREAD: Platform UDP bound to port 49154
कुछ देर बाद, डिवाइस की स्थिति देखें. यह लीडर होना चाहिए.
> state leader Done >
5. नेटवर्क कुंजी के ज़रिए Thread नेटवर्क में शामिल हों
इस कोडलैब में, आईईईई 802.15.4 मॉड्यूल वाले दो ईएसपी बोर्ड, बीआर फ़ॉर्मैट वाले नेटवर्क में शामिल होने के लिए तैयार हैं. इस सेशन में, हम Board1 को नेटवर्क में जोड़ देंगे.
BR से नेटवर्क कुंजी पाएं:
## BR Commissioner ## ---------------------- > networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done >
इस नेटवर्ककी को IEEE 802.15.4 मॉड्यूल वाले एक ईएसपी बोर्ड (Board1 जॉइनर) पर सेट करें:
## Board1 Joiner ## ---------------------- > dataset networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done
इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:
> dataset commit active Done
IPv6 इंटरफ़ेस खोलें:
> ifconfig up Done I (20308) OT_STATE: netif up
Thread प्रोटोकॉल पर कार्रवाई शुरू करें:
> thread start I(23058) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(23408) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(30028) OPENTHREAD:[N] Mle-----------: Attach attempt 1 unsuccessful, will try again in 0.288 seconds I(30328) OPENTHREAD:[N] Mle-----------: Attach attempt 2, AnyPartition I(33498) OPENTHREAD:[N] Mle-----------: Delay processing Announce - channel 21, panid 0x1444 I(33758) OPENTHREAD:[N] Mle-----------: Processing Announce - channel 21, panid 0x1444 I(33758) OPENTHREAD:[N] Mle-----------: Role detached -> disabled I(33758) OPENTHREAD:[N] Mle-----------: Role disabled -> detached I(34178) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition I(35068) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c01 I(35068) OPENTHREAD:[N] Mle-----------: Role detached -> child
कुछ देर बाद, डिवाइस की स्थिति देखें. यह चाइल्ड खाता होना चाहिए.
> state child Done
राऊटर की भूमिका सेट करें.
> state router Done I(51028) OPENTHREAD:[N] Mle-----------: RLOC16 2c01 -> 2800 I(51028) OPENTHREAD:[N] Mle-----------: Role child -> router I(51028) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 >
6. सुरक्षित कमीशन की मदद से, Thread नेटवर्क में शामिल हों
इस सेशन में, हम सिक्योरिटी कमीशनिंग के ज़रिए इस नेटवर्क में Board2 को शामिल करेंगे:
बीआर कमिश्नर से पीएसकेसी और पैनिड पाएं:
## BR Commissioner ## ---------------------- > pskc 54e7f18d2575014da94db09df29c5df0 Done > panid 0x1444 Done
बोर्ड2 के लिए नेटवर्क की जानकारी कॉन्फ़िगर करें:
## Board2 Joiner ## ---------------------- > dataset pskc 54e7f18d2575014da94db09df29c5df0 Done > dataset panid 0x1444 Done
इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:
## Board2 Joiner ## ---------------------- > dataset commit active Done
IPv6 इंटरफ़ेस खोलें:
## Board2 Joiner ## ---------------------- > ifconfig up Done I (29146) OT_STATE: netif up
Board2 से eui64 पाएं:
## Board2 Joiner ## ---------------------- > eui64 4831b7fffec02be1 Done
BR कमिश्नर पर कमिश्नर शुरू करें और जॉइन करने वाले क्रेडेंशियल के साथ उस डिवाइस का eui64
बताएं जो जॉइन कर सकता है, जैसे कि J01NME
. जॉइनर क्रेडेंशियल, डिवाइस के हिसाब से बनी एक स्ट्रिंग है. इसमें अंग्रेज़ी के बड़े अक्षर वाले सभी वर्ण, यानी 0-9 और A-Y शामिल होते हैं. इनमें पढ़ने के लिहाज़ से I, O, Q, और Z शामिल नहीं होते. इसमें 6 से 32 वर्ण होते हैं.
## BR Commissioner ## ---------------------- > commissioner start Commissioner: petitioning Done Commissioner: active > commissioner joiner add 4831b7fffec02be1 J01NME Done
Board2 जॉइनर पर स्विच करें. बीआर कमिश्नर पर सेट अप किए गए जॉइनर क्रेडेंशियल की मदद से, जॉइनर की भूमिका शुरू करें:
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
एक मिनट के अंदर, आपको पुष्टि होने की पुष्टि करने वाला मैसेज मिलेगा:
## Board2 Joiner ## ---------------------- > Join success
इसके बाद, बीआर कमिश्नर के बनाए गए Thread नेटवर्क को शुरू करके उसमें शामिल हुआ जा सकता है.
Thread प्रोटोकॉल पर कार्रवाई शुरू करें:
> thread start I(35727) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(36197) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(37007) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2801 I(37007) OPENTHREAD:[N] Mle-----------: Role detached -> child
राऊटर की भूमिका सेट करें.
> state router Done I(46057) OPENTHREAD:[N] Mle-----------: RLOC16 2801 -> 4400 I(46057) OPENTHREAD:[N] Mle-----------: Role child -> router I(46057) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 >
अब आपको नीचे बताई गई टोपोलॉजी के साथ Thread नेटवर्क मिलता है:
7. थ्रेड नोड के बीच IPv6 पते को पिंग करना
किसी भी दो बोर्ड के बीच संपर्क करने के लिए, पिंग कमांड का इस्तेमाल किया जा सकता है. हर बोर्ड का IPv6 पता प्रिंट करने के लिए, ipaddr
निर्देश का इस्तेमाल करें:
## BR Commissioner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fd6a:b54b:d6a3:b05a:0:ff:fe00:2c00 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 # Mesh-Local EID (ML-EID) fe80:0:0:0:687c:7248:cc14:9c4d # Link-Local Address (LLA) Done >
## Board1 Joiner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:2800 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 # Mesh-Local EID (ML-EID) fe80:0:0:0:18ac:df04:4671:6a45 # Link-Local Address (LLA) Done
## Board2 Joiner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:4400 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc # Mesh-Local EID (ML-EID) fe80:0:0:0:a8cc:1483:f696:91a2 # Link-Local Address (LLA) Done
उदाहरण के लिए, बीआर कमिश्नर से बोर्ड2 MLE-ID को पिंग करने के लिए, इस कमांड को BR कमिश्नर पर चलाया जा सकता है:
## BR Commissioner ## ---------------------- > ping fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc 16 bytes from fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc: icmp_seq=1 hlim=255 time=123ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 123/123.0/123 ms. Done
8. यूडीपी वाले थ्रेड नोड के बीच मैसेज पास करना
इस सेशन में, आपको Thread डिवाइसों के बीच मैसेज भेजने का तरीका बताया गया है. उदाहरण के लिए, udp खोलें और उसे 20617
पोर्ट पर बाइंड करें. साथ ही, BR पर सभी पतों को सुनें:
## BR Commissioner ## ---------------------- > udp open Done > udp bind :: 20617 I (1298739) OPENTHREAD: Platform UDP bound to port 20617 Done
इसके बाद, Board1 से BR MLE-ID पते और पोर्ट 20617
पर मैसेज भेजें:
## Board1 Joiner ## ---------------------- > udp open Done > udp send fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 20617 ESP
आप ब्राज़ील पर मिले मैसेज को देख सकते हैं:
## BR Commissioner ## ---------------------- 3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP
9. बधाई हो!
आपने ईएसपी बोर्ड का इस्तेमाल करके, फ़िज़िकल Thread नेटवर्क बनाया है!
अब आपको पता है:
- ईएसपी बोर्ड पर, OpenThread CLI बाइनरी बनाना और उन्हें फ़्लैश करना.
- ESP Thread बॉर्डर राऊटर बोर्ड पर फ़्लैश करता हुआ बॉर्डर राऊटर बनाया जा रहा है.
- ESP मॉनिटर और OpenThread सीएलआई की मदद से, थ्रेड नोड को मैन्युअल तरीके से मैनेज करें.
- Thread बॉर्डर राऊटर पर Thread नेटवर्क बनाया जा रहा है.
- Thread नेटवर्क पर डिवाइसों को सुरक्षित रूप से चालू करना.
- थ्रेड नोड के बीच IPv6 पते को पिंग करना.
- यूडीपी वाले थ्रेड नोड के बीच मैसेज पास करना.
इसके बारे में और पढ़ें
OpenThread के अलग-अलग संसाधनों के लिए, openthread.io और GitHub पर जाएं. इनमें ये संसाधन भी शामिल हैं:
- इस्तेमाल किए जा सकने वाले प्लैटफ़ॉर्म — ऐसे सभी प्लैटफ़ॉर्म खोजें जिन पर OpenThread की सुविधा काम करती हो
- OpenThread बनाएं — OpenThread को बनाने और कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी
- Thread Primer: इसमें इस कोडलैब में दिखाए गए Thread के सभी कॉन्सेप्ट शामिल होते हैं
संदर्भ: