1. บทนำ
OpenThread เปิดตัวโดยทีม Google Nest เป็นการใช้งานโปรโตคอลเครือข่าย Thread® แบบโอเพนซอร์สที่ออกแบบมาเพื่อเร่งการพัฒนาผลิตภัณฑ์สำหรับบ้านที่เชื่อมต่อ ข้อกำหนดเฉพาะของเทรดกำหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์ไร้สายที่เสถียร ปลอดภัย และใช้พลังงานต่ำ โดยใช้ IPv6 สำหรับแอปพลิเคชันในบ้านและอาคารพาณิชย์
Espressif ได้พอร์ตสแต็ก OpenThread โดยอิงตาม FreeRTOS และ LwIP ซึ่งทำให้นักพัฒนาซอฟต์แวร์สร้างเครือข่าย Thread ได้อย่างรวดเร็ว ซึ่งคุณจะรับซอร์สโค้ดที่เกี่ยวข้องได้จาก GitHub ในขณะเดียวกัน Espressif ได้ติดตั้งใช้งาน Thread Border Router โดยอิงตาม RTOS
ใน Codelab นี้ คุณจะได้เขียนโปรแกรม OpenThread บนฮาร์ดแวร์จริง สร้างและจัดการเครือข่ายเทรด และส่งข้อความระหว่างโหนดต่างๆ
สิ่งที่คุณจะได้เรียนรู้
- สร้างและแฟลชไบนารี OpenThread CLI ไปยังบอร์ด ESP
- กำลังสร้างและแฟลช Border Router ไปยัง ESP Thread Border Router
- การจัดการโหนด Thread ด้วยตนเองด้วย ESP Monitor และ OpenThread CLI
- การสร้างเครือข่ายเทรดบน Thread Border Router
- การรักษาความปลอดภัยให้อุปกรณ์ในเครือข่ายเทรด
- กำลังส่งคำสั่ง Ping ที่อยู่ IPv6 ระหว่างโหนดเทรด
- การส่งข้อความระหว่างโหนดเทรดด้วย UDP
สิ่งที่ต้องมี
ฮาร์ดแวร์:
ซอฟต์แวร์:
2. เริ่มต้นใช้งาน
- การติดตั้ง ESP-IDF
โปรดทำตามคู่มือการเขียนโปรแกรม ESP-IDF เพื่อติดตั้งสภาพแวดล้อมการพัฒนาซอฟต์แวร์
- โคลน SDK Thread Border Router ของ ESP
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 มีการเปลี่ยนแปลง) ดูรายละเอียดเพิ่มเติมได้ที่เอกสาร Thread ESP 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
เปิดใช้งานฟีเจอร์ค่าคอมมิชชันผ่าน menuconfig:
$ idf.py menuconfig
การกำหนดค่าคอมโพเนนต์ > OpenThread > เปิดใช้งาน Commissioner จากนั้นสร้างและ Flash
$ idf.py -p <your-local-port> build flash monitor
4. การสร้างเครือข่ายเทรดบนเราเตอร์ Border Router เทรด
ตอนนี้คุณสามารถสร้างเครือข่าย Thread โดยใช้บรรทัดคำสั่ง 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. เข้าร่วมเครือข่าย Thread ผ่าน Networkkey
ใน Codelab นี้ มีกระดาน ESP 2 แผงพร้อมโมดูล IEEE 802.15.4 สำหรับเข้าร่วมเครือข่ายที่จัดทำโดย BR ในเซสชันนี้ เราจะเพิ่ม Board1 เข้าสู่เครือข่าย
รับคีย์เครือข่ายจาก BR:
## BR Commissioner ## ---------------------- > networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done >
ตั้งค่าคีย์เครือข่ายนี้เป็นบอร์ด ESP (Board1 Joiner) ที่มีโมดูล 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. เข้าร่วมเครือข่าย Thread ผ่านการว่าจ้างที่ปลอดภัย
ในเซสชันนี้ เราจะเพิ่ม Board2 ลงในเครือข่ายผ่านการว่าจ้างด้านการรักษาความปลอดภัย ดังนี้
รับ PSKc และ Panid จากคณะกรรมาธิการของบราซิล:
## 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
ข้อมูลเข้าสู่ระบบ Joiner คือสตริงเฉพาะอุปกรณ์ที่ประกอบด้วยอักขระที่เป็นตัวอักษรพิมพ์ใหญ่และตัวเลขคละกันทั้งหมด (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 เริ่มต้นบทบาทผู้ผนวกด้วยเอกสารรับรองผู้เข้าร่วมที่คุณเพิ่งตั้งค่าในคณะกรรมาธิการบราซิล ดังนี้
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
ภายในเวลาประมาณ 1 นาที คุณจะได้รับการยืนยันการตรวจสอบสิทธิ์ที่สําเร็จ โดยทำดังนี้
## Board2 Joiner ## ---------------------- > Join success
หลังจากนั้น คุณจะเริ่มต้นและเข้าร่วมเครือข่ายชุดข้อความที่คณะกรรมาธิการบราซิล (BR) ได้
เริ่มการดำเนินการโปรโตคอลเทรด:
> 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 เพื่อสื่อสารระหว่างกระดานสองกระดานใดก็ได้ ใช้คำสั่ง 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
ตัวอย่างเช่น หากต้องการส่ง ping2 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 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
- การจัดการโหนด Thread ด้วยตนเองด้วย ESP Monitor และ OpenThread CLI
- การสร้างเครือข่ายเทรดบน Thread Border Router
- การรักษาความปลอดภัยให้อุปกรณ์ในเครือข่ายเทรด
- กำลังส่งคำสั่ง Ping ที่อยู่ IPv6 ระหว่างโหนดเทรด
- การส่งข้อความระหว่างโหนดเทรดด้วย UDP
อ่านเพิ่มเติม
ดู openthread.io และ GitHub สำหรับทรัพยากรต่างๆ ของ OpenThread เช่น
- แพลตฟอร์มที่รองรับ — ค้นหาแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread — รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและกำหนดค่า OpenThread
- Thread Primer — ครอบคลุมแนวคิดเทรดทั้งหมดใน Codelab นี้
ข้อมูลอ้างอิง: