ESP32H2 और ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड की मदद से, Thread नेटवर्क बनाना

1. शुरुआती जानकारी

26b7f4f6b3ea0700.png

OpenThread को Google Nest की टीम ने रिलीज़ किया है. यह Thread® नेटवर्किंग प्रोटोकॉल को ओपन सोर्स में लागू करता है. इसे कनेक्टेड होम के लिए प्रॉडक्ट के डेवलपमेंट में तेज़ी लाने के लिए डिज़ाइन किया गया है. थ्रेड की खास बातें, घर और व्यावसायिक बिल्डिंग ऐप्लिकेशन के लिए IPv6-आधारित भरोसेमंद, सुरक्षित, और कम पावर वाले वायरलेस डिवाइस-से-डिवाइस कम्यूनिकेशन प्रोटोकॉल के बारे में बताती हैं.

Espressif ने FreeRTOS और LwIP के आधार पर OpenThread स्टैक को पोर्ट किया है, ताकि डेवलपर तेज़ी से Thread नेटवर्क बना सकें. इससे जुड़ा सोर्स कोड, GitHub से लिया जा सकता है. साथ ही, Espressif ने RTOS पर आधारित एक Thread Border राऊटर को भी लागू किया है.

इस कोडलैब में, आपको OpenThread को असली हार्डवेयर पर प्रोग्राम करना होगा. साथ ही, Thread नेटवर्क को बनाना और मैनेज करना होगा. साथ ही, मैसेज को एक नोड से दूसरे नोड पर भेजना होगा.

Espressif_hardware_setup.jpg

आप इन चीज़ों के बारे में जानेंगे

  • ईएसपी बोर्ड में OpenThread सीएलआई बाइनरी बनाना और उन्हें फ़्लैश करना.
  • ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड पर बिल्डिंग और बॉर्डर राऊटर बनाना.
  • ESP Monitoring और OpenThread CLI की मदद से थ्रेड नोड को मैन्युअल तरीके से मैनेज करना.
  • Thread Border राऊटर पर Thread नेटवर्क न बनाया जा रहा है.
  • Thread नेटवर्क पर डिवाइसों को चालू करना.
  • थ्रेड नोड के बीच IPv6 पते को पिंग करना.
  • यूडीपी की मदद से थ्रेड नोड के बीच मैसेज भेजे जा रहे हैं.

आपको इनकी ज़रूरत होगी

हार्डवेयर:

  • आईईई 802.15.4 मॉड्यूल वाले दो ईएसपी बोर्ड.
  • 1 ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड.

सॉफ़्टवेयर:

2. शुरुआत करना

  1. ESP-IDF इंस्टॉल करने की प्रक्रिया.

सॉफ़्टवेयर डेवलपमेंट एनवायरमेंट को इंस्टॉल करने के लिए, कृपया ESP-IDF प्रोग्रामिंग गाइड में दिए गए निर्देशों का पालन करें.

  1. ESP Thread Border राऊटर SDK टूल का क्लोन बनाएं.

ESP-thread-BR, ESP Thread Border Router SDK टूल का आधिकारिक SDK टूल है. यह Thread Border राऊटर बनाने के लिए, नेटवर्क की सभी बुनियादी सुविधाओं के साथ काम करता है. साथ ही, इसमें प्रॉडक्ट लेवल की बेहतर सुविधाएं भी शामिल हैं, ताकि प्रॉडक्ट तेज़ी से बनाया जा सके.

$ cd <your-local-workspace>
$ git clone --recursive https://github.com/espressif/esp-thread-br.git

3. बनाएं और फ़्लैश करें

आईईई 802.15.4 मॉड्यूल वाले ईएसपी बोर्ड पर ot-cli-ftd बाइनरी फ़ाइल बनाने और फ़्लैश करने के लिए, ज़्यादा जानकारी के लिए ESP-IDF का उदाहरण ot_cli देखें:

$ cd <your-idf-path>/examples/openthread/ot_cli
$ idf.py set-target <your-board-type>

Menuconfig की मदद से, जॉइनर सुविधा चालू करें:

$ idf.py menuconfig

कॉम्पोनेंट कॉन्फ़िगरेशन > OpenThread > जॉइनर चालू करें. इसके बाद, बिल्ड और फ़्लैश करें.

$ idf.py -p <your-local-port> build flash monitor

ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड पर ot-br बाइनरी फ़ाइल बनाने और फ़्लैश करने के लिए, आपको पहले आरसीपी बाइनरी फ़ाइल बनानी होगी. इस आरसीपी बाइनरी फ़ाइल को ईएसपी थ्रेड बॉर्डर राऊटर बोर्ड पर मौजूद डिवाइस पर फ़्लैश करने की ज़रूरत नहीं है. इसे बॉर्डर राऊटर बाइनरी फ़ाइल में शामिल किया जाएगा. साथ ही, पहली बार बूट करने (या आरसीपी फ़र्मवेयर बदलने पर) पर इसे ESP32-H2 चिप पर फ़्लैश किया जाएगा. ज़्यादा जानकारी के लिए, ESP Thread BR Docs को देखें:

$ 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

Menuconfig की मदद से कमिश्नर की सुविधा चालू करने के लिए:

$ idf.py menuconfig

कॉम्पोनेंट कॉन्फ़िगरेशन > OpenThread > कमिश्नर को चालू करें. इसके बाद, बिल्ड और फ़्लैश करें.

$ idf.py -p <your-local-port> build flash monitor

4. Thread बॉर्डर राऊटर पर Thread नेटवर्क को बनाना

अब ESP Thread Border राऊटर बोर्ड (BR कमिश्नर) पर 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 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. networkkey के ज़रिए 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 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
> 

esp_ot_tp_LR.jpg

6. सुरक्षित तरीके से कमीशन की मदद से Thread नेटवर्क में शामिल हों

इस सेशन में, हम सिक्योरिटी कमीशन के ज़रिए बोर्ड2 को नेटवर्क से जोड़ेंगे:

BR कमिश्नर से PSKc और पैनिड पाएं:

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

बोर्ड2 से 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 जॉइनर पर स्विच करें. जॉइनर की भूमिका, उस जॉइनर क्रेडेंशियल से शुरू करें जिसे आपने हाल ही में BR कमिश्नर के खाते पर सेट अप किया है:

## Board2 Joiner ##
----------------------
> ifconfig up
Done
> joiner start J01NME
Done

करीब एक मिनट के अंदर, आपको पुष्टि हो जाने का मैसेज मिलता है:

## Board2 Joiner ##
----------------------
>
Join success

इसके बाद, बीआर कमिश्नर के बनाए गए 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 नेटवर्क की जानकारी मिलती है:

esp_ot_tp_LRR.jpg

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

उदाहरण के लिए, BR कमिश्नर से Board2 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 पर मिला मैसेज देख सकते हैं:

## BR Commissioner ##
----------------------
3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP

9. बधाई हो!

आपने ईएसपी बोर्ड का इस्तेमाल करके फ़िज़िकल Thread नेटवर्क बनाया है!

esp_ot_final_topology.jpg

अब आपको पता है:

  • ईएसपी बोर्ड में OpenThread सीएलआई बाइनरी बनाना और उन्हें फ़्लैश करना.
  • ESP Thread Border राऊटर बोर्ड के लिए फ़्लैशिंग बॉर्डर राऊटर बनाना.
  • ESP Monitoring और OpenThread CLI की मदद से थ्रेड नोड को मैन्युअल तरीके से मैनेज करना.
  • Thread Border राऊटर पर Thread नेटवर्क न बनाया जा रहा है.
  • Thread नेटवर्क पर डिवाइसों को चालू करना.
  • थ्रेड नोड के बीच IPv6 पते को पिंग करना.
  • यूडीपी की मदद से थ्रेड नोड के बीच मैसेज भेजे जा रहे हैं.

इसके बारे में और पढ़ें

OpenThread.io के कई तरह के संसाधनों के लिए, openthread.io और GitHub देखें. इनमें ये संसाधन शामिल हैं:

रेफ़रंस: