1. เกริ่นนำ
OpenThread เปิดตัวโดยทีม Google Nest เป็นการใช้งานโอเพนซอร์สของโปรโตคอลเครือข่าย Thread® ที่ออกแบบมาเพื่อเร่งการพัฒนาผลิตภัณฑ์สำหรับบ้านที่เชื่อมต่อ ข้อกำหนดเทรดกำหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์แบบไร้สายที่เชื่อถือได้ ปลอดภัย และใช้พลังงานต่ำซึ่งใช้ IPv6 สำหรับแอปพลิเคชันในอาคารและบ้านเชิงพาณิชย์
Espressif ย้ายสแต็ก OpenThread โดยอิงตาม FreeRTOS และ LwIP ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์สร้างเครือข่ายเทรดได้อย่างรวดเร็ว ซอร์สโค้ดที่เกี่ยวข้องจะหาได้จาก GitHub ในขณะเดียวกัน Espressif ยังได้นำ Thread Border Router ที่อิงตาม RTOS มาใช้
ใน Codelab นี้ คุณจะได้เขียนโปรแกรม OpenThread ในฮาร์ดแวร์จริง สร้างและจัดการเครือข่ายเทรด และส่งข้อความระหว่างโหนดต่างๆ
สิ่งที่คุณจะได้เรียนรู้
- การสร้างและการกะพริบของไบนารี OpenThread CLI กับบอร์ด ESP
- การสร้างและ Border Router ที่กะพริบไปยังบอร์ด ESP Thread Border Router
- จัดการโหนดเทรดด้วยตนเองด้วย ESP Monitor และ OpenThread CLI
- การสร้างเครือข่ายเทรดบน Border Router ของเทรด
- การรักษาความปลอดภัยให้อุปกรณ์ในเครือข่ายเทรด
- ใช้คำสั่ง ping กับที่อยู่ IPv6 ระหว่างโหนดเทรด
- การส่งข้อความระหว่างโหนดเทรดด้วย UDP
สิ่งที่ต้องมี
ฮาร์ดแวร์:
- บอร์ด ESP 2 เครื่องที่มีโมดูล IEEE 802.15.4
- บอร์ดขอบเราเตอร์ ESP Thread Border Router 1 ตัว
ซอฟต์แวร์:
2. เริ่มต้นใช้งาน
- การติดตั้ง ESP-IDF
โปรดทำตามคู่มือการเขียนโปรแกรม ESP-IDF เพื่อติดตั้งสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
- โคลน SDK ของ ESP Thread Border Router
ESP-THREAD-BR คือ ESP Thread Border Router SDK อย่างเป็นทางการ โดยจะสนับสนุนฟีเจอร์พื้นฐานทั้งหมดของเครือข่ายเพื่อสร้าง Thread Border Router และผสานรวมฟีเจอร์ระดับผลิตภัณฑ์ที่หลากหลายเพื่อการทำงานที่รวดเร็ว
$ cd <your-local-workspace> $ git clone --recursive https://github.com/espressif/esp-thread-br.git
3. สร้างและแฟลช
สำหรับการสร้างและแฟลชไฟล์ไบนารี ot-cli-ftd บนบอร์ด ESP ที่มีโมดูล IEEE 802.15.4 โปรดดูรายละเอียดเพิ่มเติมที่ตัวอย่าง ESP-IDF ot_cli
$ cd <your-idf-path>/examples/openthread/ot_cli $ idf.py set-target <your-board-type>
เปิดใช้ฟีเจอร์ตัวเชื่อมผ่าน Menuconfig:
$ idf.py menuconfig
การกำหนดค่าคอมโพเนนต์ > OpenThread > เปิดใช้ Joiner จากนั้นสร้างและ Flash
$ idf.py -p <your-local-port> build flash monitor
สำหรับการสร้างและแฟลชไฟล์ไบนารี ot-br บน ESP Thread Border Router Board คุณต้องสร้างไฟล์ไบนารี RCP ก่อน ไฟล์ไบนารี RCP นี้ไม่จำเป็นต้องได้รับการแฟลชอย่างชัดแจ้งไปยังอุปกรณ์บน ESP Thread Border Router Board โดยจะอยู่ในไฟล์ไบนารีของ Border Router และแฟลชไปยังชิป ESP32-H2 เมื่อเปิดเครื่องครั้งแรก (หรือเมื่อเปลี่ยนเฟิร์มแวร์ RCP) ดูรายละเอียดเพิ่มเติมได้ที่เอกสารสำหรับชุดข้อความของ ESP
$ 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 > เปิดใช้ Commissioner จากนั้นสร้างแล้ว Flash
$ idf.py -p <your-local-port> build flash monitor
4. การสร้างเครือข่ายเทรดบน Border Router ของเทรด
ขณะนี้คุณสามารถสร้างเครือข่ายเทรดโดยใช้บรรทัดคำสั่ง OpenThread ใน ESP Thread Border Router Board (BR Commissioner) ดังนี้
## 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. เข้าร่วมเครือข่ายเทรดผ่านคีย์เครือข่าย
ใน Codelab นี้มีบอร์ด ESP 2 อันที่มีโมดูล IEEE 802.15.4 สำหรับเข้าร่วมเครือข่ายที่สร้างขึ้น BR ในเซสชันนี้ เราจะเพิ่ม Board1 ในเครือข่าย
รับคีย์เครือข่ายจากบราซิล:
## BR Commissioner ## ---------------------- > networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done >
ตั้งค่าคีย์เครือข่ายนี้เป็นกระดาน ESP (Board1 Joiner) 1 อันที่มีโมดูล IEEE 802.15.4 ดังนี้
## 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 >
6. เข้าร่วมเครือข่ายเทรดผ่านการจัดเตรียมที่ปลอดภัย
ในเซสชันนี้ เราจะเพิ่ม Board2 ในเครือข่ายผ่านการมอบหมายความปลอดภัย
รับ PSKc และตรวจสอบค่าธรรมเนียมจาก BR Commissioner:
## BR Commissioner ## ---------------------- > pskc 54e7f18d2575014da94db09df29c5df0 Done > panid 0x1444 Done
กำหนดค่าข้อมูลเครือข่ายใน Board2 ดังนี้
## 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
รับ eui64 จาก Board2:
## Board2 Joiner ## ---------------------- > eui64 4831b7fffec02be1 Done
ใน BR Commissioner ให้เริ่มต้นค่าคอมมิชชันและระบุ eui64
ของอุปกรณ์ที่เข้าร่วมได้ รวมถึงข้อมูลเข้าสู่ระบบของ Joiner เช่น 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 Joiner เริ่มต้นบทบาท Joiner ด้วยข้อมูลเข้าสู่ระบบ Joiner ที่เพิ่งตั้งค่าใน BR Commissioner ดังนี้
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
ภายในเวลาประมาณ 1 นาที คุณจะได้รับการยืนยันการตรวจสอบสิทธิ์ที่เสร็จสมบูรณ์ ดังนี้
## Board2 Joiner ## ---------------------- > Join success
หลังจากนั้นคุณจะเริ่มและเข้าร่วมเครือข่ายเทรดที่ก่อตั้งโดย BR Commissioner ได้
เริ่มการดำเนินการโปรโตคอลเทรด:
> 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 >
ตอนนี้คุณจะได้รับเครือข่ายเทรดที่มีโทโพโลยีที่แสดงด้านล่าง
7. ใช้คำสั่ง Ping ที่อยู่ IPv6 ระหว่างโหนดเทรด
คุณสามารถใช้คำสั่ง ping เพื่อสื่อสารระหว่างบอร์ด 2 อันได้ ใช้คำสั่ง ipaddr
เพื่อพิมพ์ที่อยู่ IPv6 ของแต่ละกระดาน
## 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
เช่น หากต้องการใช้คำสั่ง ping Board2 MLE-ID จาก BR Commissioner คุณจะเรียกใช้คำสั่งนี้กับ BR Commissioner ได้
## 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. การส่งข้อความระหว่างโหนดเทรดด้วย UDP
ในเซสชันนี้ คุณจะได้เรียนรู้วิธีส่งข้อความระหว่างอุปกรณ์เทรด 2 เครื่อง เช่น เปิด 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. ยินดีด้วย
คุณได้สร้างเครือข่ายเทรดจริงโดยใช้บอร์ด ESP
ตอนนี้คุณรู้แล้วว่า:
- การสร้างและการกะพริบของไบนารี OpenThread CLI กับบอร์ด ESP
- กำลังสร้าง Border Router ที่กะพริบลงในบอร์ด ESP Thread Border Router
- จัดการโหนดเทรดด้วยตนเองด้วย ESP Monitor และ OpenThread CLI
- การสร้างเครือข่ายเทรดบน Border Router ของเทรด
- การรักษาความปลอดภัยให้อุปกรณ์ในเครือข่ายเทรด
- ใช้คำสั่ง ping กับที่อยู่ IPv6 ระหว่างโหนดเทรด
- การส่งข้อความระหว่างโหนดเทรดด้วย UDP
อ่านเพิ่มเติม
ไปที่ openthread.io และ GitHub เพื่อดูทรัพยากรของ OpenThread มากมาย ได้แก่
- แพลตฟอร์มที่รองรับ — ดูแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread รายละเอียดเพิ่มเติมในการสร้างและกำหนดค่า OpenThread
- Thread Primer — ครอบคลุมแนวคิด Thread ทั้งหมดที่มีอยู่ใน Codelab นี้
ข้อมูลอ้างอิง: