1. บทนำ

OpenThread ที่ Google เปิดตัวเป็นการใช้งานโปรโตคอลเครือข่าย Thread แบบโอเพนซอร์ส Google Nest ได้เปิดตัว OpenThread เพื่อให้เทคโนโลยีที่ใช้ในผลิตภัณฑ์ Nest พร้อมให้บริการแก่นักพัฒนาซอฟต์แวร์อย่างกว้างขวางเพื่อเร่งการพัฒนาผลิตภัณฑ์สำหรับบ้านอัจฉริยะ
ข้อกำหนดของ Thread กำหนดโปรโตคอลการสื่อสารแบบไร้สายที่เชื่อถือได้ ปลอดภัย และใช้พลังงานต่ำจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่งที่ใช้ IPv6 สำหรับแอปพลิเคชันในบ้าน OpenThread ใช้เลเยอร์เครือข่าย Thread ทั้งหมด ซึ่งรวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีการรักษาความปลอดภัย MAC, การสร้างลิงก์ Mesh และการกำหนดเส้นทาง Mesh
Codelab นี้จะแนะนำวิธีจำลองเครือข่าย Thread ในอุปกรณ์จำลอง
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าเครื่องมือเชนบิลด์ OpenThread
- วิธีจำลองเครือข่าย Thread
- วิธีตรวจสอบสิทธิ์โหนด Thread
- วิธีจัดการเครือข่าย Thread ด้วย OpenThread Daemon
สิ่งที่คุณต้องมี
- git
- ความรู้พื้นฐานเกี่ยวกับ Linux, การกำหนดเส้นทางเครือข่าย
2. ตั้งค่าระบบบิลด์
Git
คุณต้องใช้ Git เพื่อทำ Codelab นี้ให้เสร็จสมบูรณ์ ดาวน์โหลดและติดตั้งก่อนดำเนินการต่อ
เมื่อติดตั้งแล้ว ให้ทำตามวิธีการสำหรับระบบปฏิบัติการของคุณเพื่อดาวน์โหลดและสร้าง OpenThread
XCode สำหรับ Mac OS X
คุณต้องมี XCode เพื่อติดตั้งและสร้าง OpenThread ใน Mac OS X
หลังจากติดตั้ง XCode แล้ว ให้ติดตั้งเครื่องมือบรรทัดคำสั่ง XCode โดยทำดังนี้
$ xcode-select --install
สร้างใน Linux / Mac OS X
วิธีการติดตั้งเหล่านี้ได้รับการทดสอบใน Ubuntu Server 14.04 LTS และ Mac OS X Sierra 10.12.6
ติดตั้ง OpenThread คำสั่ง bootstrap จะตรวจสอบว่าได้ติดตั้ง Toolchain และกำหนดค่าสภาพแวดล้อมอย่างถูกต้อง
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
การใช้ Windows
หากต้องการใช้ Windows เราขอแนะนำให้ลองใช้ Codelab เวอร์ชัน Docker
3. สร้างแอปพลิเคชัน OpenThread
เมื่อติดตั้งเสร็จแล้ว ให้สร้างแอปพลิเคชัน OpenThread ตัวอย่าง สำหรับ Codelab นี้ เราจะใช้ตัวอย่างการจำลอง
$ cd ~/src/openthread $ ./script/cmake-build simulation
ตอนนี้ให้สร้าง OpenThread Daemon โดยทำดังนี้
$ ./script/cmake-build posix -DOT_DAEMON=ON
4. จำลองเครือข่าย Thread
แอปพลิเคชันตัวอย่างที่คุณจะใช้ใน Codelab นี้แสดงแอปพลิเคชัน OpenThread ที่มีฟังก์ชันน้อยที่สุดซึ่งแสดงอินเทอร์เฟซการกำหนดค่าและการจัดการ OpenThread ผ่านอินเทอร์เฟซบรรทัดคำสั่ง (CLI) พื้นฐาน
แบบฝึกหัดนี้จะแนะนำขั้นตอนขั้นต่ำที่จำเป็นในการ Ping อุปกรณ์ Thread จำลองเครื่องหนึ่งจากอุปกรณ์ Thread จำลองอีกเครื่องหนึ่ง
รูปที่ด้านล่างอธิบายโทโพโลยีเครือข่าย Thread พื้นฐาน สำหรับการฝึกนี้ เราจะจำลองโหนด 2 โหนดภายในวงกลมสีเขียว ได้แก่ Thread Leader และ Thread Router ที่มีการเชื่อมต่อเดียวระหว่างกัน

Ping โหนด
1. เริ่มโหนด 1
ไปที่ไดเรกทอรี openthread แล้วสร้างกระบวนการ CLI สำหรับอุปกรณ์ Thread จำลองโดยใช้ไบนารี ot-cli-ftd
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
หมายเหตุ: หากไม่เห็นข้อความแจ้ง > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter
ไบนารีนี้จะติดตั้งใช้งานอุปกรณ์ OpenThread ที่จำลองไว้บน POSIX ไดรเวอร์วิทยุ IEEE 802.15.4 ได้รับการติดตั้งใช้งานบน UDP (เฟรม IEEE 802.15.4 จะส่งผ่านภายในเพย์โหลด UDP)
อาร์กิวเมนต์ของ 1 คือตัวอธิบายไฟล์ที่แสดงบิตที่สำคัญน้อยที่สุดของ IEEE EUI-64 ที่ "กำหนดจากโรงงาน" สำหรับอุปกรณ์จำลอง ค่านี้ยังใช้เมื่อเชื่อมโยงกับพอร์ต UDP สำหรับการจำลองวิทยุ IEEE 802.15.4 (พอร์ต = 9000 + ตัวอธิบายไฟล์) อินสแตนซ์แต่ละรายการของอุปกรณ์ Thread จำลองใน Codelab นี้จะใช้ตัวอธิบายไฟล์ที่แตกต่างกัน
หมายเหตุ: ใช้เฉพาะตัวอธิบายไฟล์ของ 1 ขึ้นไปตามที่ระบุไว้ใน Codelab นี้เมื่อสร้างกระบวนการสำหรับอุปกรณ์จำลอง ระบบสงวนตัวอธิบายไฟล์ของ 0 ไว้สำหรับการใช้งานอื่นๆ
สร้างชุดข้อมูลการดำเนินงานใหม่และส่งเป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลการทำงานคือการกำหนดค่าสำหรับเครือข่าย Thread ที่คุณสร้าง
> dataset init new Done > dataset Active Timestamp: 1 Channel: 20 Channel Mask: 07fff800 Ext PAN ID: d6263b6d857647da Mesh Local Prefix: fd61:2344:9a52:ede0/64 Network Key: e4344ca17d1dca2a33f064992f31f786 Network Name: OpenThread-c169 PAN ID: 0xc169 PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่
> dataset commit active Done
เปิดอินเทอร์เฟซ IPv6
> ifconfig up Done
เริ่มการดำเนินการโปรโตคอล Thread
> thread start Done
รอสักครู่แล้วตรวจสอบว่าอุปกรณ์ได้กลายเป็น Thread Leader แล้ว ผู้นำคืออุปกรณ์ที่มีหน้าที่จัดการการกำหนดรหัสเราเตอร์
> state leader Done
ดูที่อยู่ IPv6 ที่กำหนดให้กับอินเทอร์เฟซ Thread ของโหนด 1 (เอาต์พุตของคุณจะแตกต่างกัน)
> ipaddr fd61:2344:9a52:ede0:0:ff:fe00:fc00 fd61:2344:9a52:ede0:0:ff:fe00:5000 fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 fe80:0:0:0:94da:92ea:1353:4f3b Done
โปรดทราบประเภทที่อยู่ IPv6 ที่เฉพาะเจาะจงดังนี้
- เริ่มต้นด้วย
fd= mesh-local - เริ่มต้นด้วย
fe80= ลิงก์เฉพาะ
ประเภทที่อยู่ภายใน Mesh จะได้รับการจัดประเภทเพิ่มเติมดังนี้
- มี
ff:fe00= ตัวระบุตำแหน่งเราเตอร์ (RLOC) - ไม่มี
ff:fe00= ตัวระบุปลายทาง (EID)
ระบุ EID ในเอาต์พุตของคอนโซลและจดบันทึกไว้เพื่อใช้ในภายหลัง ในเอาต์พุตตัวอย่างด้านบน EID คือ
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. เริ่มต้นโหนด 2
เปิดเทอร์มินัลใหม่และไปที่ไดเรกทอรี openthread แล้วเรียกใช้กระบวนการ CLI นี่คืออุปกรณ์ Thread จำลองเครื่องที่ 2
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 2
หมายเหตุ: หากไม่เห็นข้อความแจ้ง > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter
กำหนดค่าคีย์เครือข่าย Thread และ PAN ID โดยใช้ค่าเดียวกับชุดข้อมูลการทำงานของโหนด 1 ดังนี้
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่
> dataset commit active Done
เปิดอินเทอร์เฟซ IPv6
> ifconfig up Done
เริ่มการดำเนินการโปรโตคอล Thread
> thread start Done
อุปกรณ์จะเริ่มต้นตัวเองเป็นอุปกรณ์ของเด็ก อุปกรณ์ย่อยของ Thread เทียบเท่ากับอุปกรณ์ปลายทาง ซึ่งเป็นอุปกรณ์ Thread ที่ส่งและรับการรับส่งข้อมูลแบบ Unicast กับอุปกรณ์หลักเท่านั้น
> state child Done
ภายใน 2 นาที คุณควรเห็นสถานะเปลี่ยนจาก child เป็น router เราเตอร์ Thread สามารถกำหนดเส้นทางการรับส่งข้อมูลระหว่างอุปกรณ์ Thread ได้ ซึ่งเรียกอีกอย่างว่า "ผู้ปกครอง"
> state router Done
ยืนยันเครือข่าย
วิธีง่ายๆ ในการยืนยันเครือข่าย Mesh คือการดูตารางเราเตอร์
1. ตรวจสอบการเชื่อมต่อ
รับ RLOC16 ในโหนด 2 RLOC16 คือ 16 บิตสุดท้ายของที่อยู่ IPv6 ของ RLOC ของอุปกรณ์
> rloc16 5800 Done
ในโหนด 1 ให้ตรวจสอบตารางเราเตอร์สำหรับ RLOC16 ของโหนด 2 ตรวจสอบว่าโหนด 2 เปลี่ยนเป็นสถานะเราเตอร์ก่อน
> router table | ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC | +----+--------+----------+----------+-------+---------+-----+------------------+ | 20 | 0x5000 | 63 | 0 | 0 | 0 | 0 | 96da92ea13534f3b | | 22 | 0x5800 | 63 | 0 | 3 | 3 | 23 | 5a4eb647eb6bc66c |
RLOC ของ 0xa800 ของโหนด 1 จะอยู่ในตาราง ซึ่งยืนยันว่าเชื่อมต่อกับ Mesh แล้ว
2. Ping โหนด 1 จากโหนด 2
ยืนยันการเชื่อมต่อระหว่างอุปกรณ์ Thread ที่จำลอง 2 เครื่อง ในโหนด 2 ping EID ที่กำหนดให้กับโหนด 1:
> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 > 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1 hlim=64 time=12ms
กด enter เพื่อกลับไปที่พรอมต์ > CLI
ทดสอบเครือข่าย
ตอนนี้คุณสามารถ Ping ระหว่างอุปกรณ์ Thread ที่จำลอง 2 เครื่องได้สำเร็จแล้ว ให้ทดสอบเครือข่าย Mesh โดยนำโหนด 1 โหนดออกจากระบบ
กลับไปที่โหนด 1 แล้วหยุด Thread โดยทำดังนี้
> thread stop Done
เปลี่ยนไปใช้โหนด 2 แล้วตรวจสอบสถานะ ภายใน 2 นาที โหนด 2 จะตรวจพบว่าผู้นำ (โหนด 1) ออฟไลน์ และคุณควรเห็นโหนด 2 เปลี่ยนไปเป็นleaderของเครือข่าย
> state router Done ... > state leader Done
เมื่อยืนยันแล้ว ให้หยุด Thread และรีเซ็ตเป็นค่าเริ่มต้นใน Node 2 ก่อนออก การรีเซ็ตเป็นค่าเริ่มต้นจะช่วยให้มั่นใจได้ว่าข้อมูลเข้าสู่ระบบเครือข่าย Thread ที่เราใช้ในแบบฝึกหัดนี้จะไม่ถูกนำไปใช้ในแบบฝึกหัดถัดไป
> thread stop Done > factoryreset > > exit
นอกจากนี้ ให้รีเซ็ตเป็นค่าเริ่มต้นและออกจากโหนด 1 โดยทำดังนี้
> factoryreset > > exit
ดูแหล่งอ้างอิง CLI ของ OpenThread เพื่อสำรวจคำสั่ง CLI ที่ใช้ได้ทั้งหมด
5. ตรวจสอบสิทธิ์โหนดด้วยการจัดสรร
ในแบบฝึกหัดก่อนหน้านี้ คุณได้ตั้งค่าเครือข่าย Thread ด้วยอุปกรณ์จำลอง 2 เครื่องและยืนยันการเชื่อมต่อ อย่างไรก็ตาม การดำเนินการนี้จะอนุญาตให้การรับส่งข้อมูล IPv6 แบบลิงก์เฉพาะที่ไม่ได้ตรวจสอบสิทธิ์ผ่านระหว่างอุปกรณ์เท่านั้น หากต้องการกำหนดเส้นทางการรับส่งข้อมูล IPv6 ทั่วโลกระหว่างอุปกรณ์ (และอินเทอร์เน็ตผ่าน Thread Border Router) คุณต้องตรวจสอบสิทธิ์โหนด
อุปกรณ์เครื่องหนึ่งต้องทำหน้าที่เป็นผู้ดูแลระบบเพื่อตรวจสอบสิทธิ์ คอมมิชชันเนอร์คือเซิร์ฟเวอร์การตรวจสอบสิทธิ์ที่ได้รับการเลือกตั้งในปัจจุบันสำหรับอุปกรณ์ Thread ใหม่ และผู้ให้สิทธิ์ในการระบุข้อมูลเข้าสู่ระบบเครือข่ายที่จำเป็นสำหรับอุปกรณ์ในการเข้าร่วมเครือข่าย
ในแบบฝึกหัดนี้ เราจะใช้โทโพโลยีแบบ 2 โหนดเหมือนเดิม สำหรับการตรวจสอบสิทธิ์ Thread Leader จะทำหน้าที่เป็น Commissioner และ Thread Router จะทำหน้าที่เป็น Joiner

1. สร้างเครือข่าย
หากทำต่อจากแบบฝึกหัดก่อนหน้า คุณควรมีหน้าต่างเทอร์มินัล 2 หน้าต่างเปิดอยู่แล้ว หากไม่ ให้ตรวจสอบว่าเปิดไว้ 2 แท็บและพร้อมใช้งาน เครื่องหนึ่งจะทำหน้าที่เป็นโหนด 1 และอีกเครื่องหนึ่งจะทำหน้าที่เป็นโหนด 2
ในโหนด 1 ให้เรียกใช้กระบวนการ CLI ดังนี้
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
หมายเหตุ: หากไม่เห็นข้อความแจ้ง > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter
สร้างชุดข้อมูลการปฏิบัติงานใหม่ ยืนยันให้เป็นชุดข้อมูลที่ใช้งานอยู่ และเริ่ม Thread โดยทำดังนี้
> dataset init new Done > dataset Active Timestamp: 1 Channel: 12 Channel Mask: 07fff800 Ext PAN ID: e68d05794bf13052 Mesh Local Prefix: fd7d:ddf7:877b:8756/64 Network Key: a77fe1d03b0e8028a4e13213de38080e Network Name: OpenThread-8f37 PAN ID: 0x8f37 PSKc: f9debbc1532487984b17f92cd55b21fc Security Policy: 0, onrcb Done
คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่
> dataset commit active Done
เปิดอินเทอร์เฟซ IPv6
> ifconfig up Done
เริ่มการดำเนินการโปรโตคอล Thread
> thread start Done
รอสักครู่แล้วตรวจสอบว่าอุปกรณ์ได้กลายเป็น Thread Leader แล้วหรือไม่ โดยทำดังนี้
> state leader Done
2. เริ่มต้นบทบาทผู้ดูแลระบบ
ขณะที่ยังอยู่ในโหนด 1 ให้เริ่มบทบาทผู้ดูแลระบบโดยทำดังนี้
> commissioner start Done
อนุญาตให้ผู้เข้าร่วมทุกคน (โดยใช้ไวลด์การ์ด *) ที่มีJ01NME ข้อมูลเข้าสู่ระบบของผู้เข้าร่วมสามารถคอมมิชชันในเครือข่ายได้ Joiner คืออุปกรณ์ที่ผู้ดูแลระบบที่เป็นมนุษย์เพิ่มลงในเครือข่าย Thread ที่ได้รับมอบหมาย
> commissioner joiner add * J01NME Done
3. เริ่มบทบาทผู้เข้าร่วม
ในหน้าต่างเทอร์มินัลที่ 2 ให้สร้างกระบวนการ CLI ใหม่ นี่คือโหนด 2
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 2
ในโหนด 2 ให้เปิดใช้บทบาท Joiner โดยใช้J01NMEข้อมูลเข้าสู่ระบบ Joiner
> ifconfig up Done > joiner start J01NME Done
... รอสักครู่เพื่อรับการยืนยัน ...
Join success
ในฐานะอุปกรณ์ที่เข้าร่วม (โหนด 2) อุปกรณ์ได้ตรวจสอบสิทธิ์ตัวเองกับผู้ดูแลระบบ (โหนด 1) เรียบร้อยแล้ว และได้รับข้อมูลเข้าสู่ระบบเครือข่ายเทรด
ตอนนี้เมื่อตรวจสอบสิทธิ์โหนด 2 แล้ว ให้เริ่มเทรดโดยทำดังนี้
> thread start Done
4. ตรวจสอบการตรวจสอบสิทธิ์เครือข่าย
ตรวจสอบ state ในโหนด 2 เพื่อตรวจสอบว่าตอนนี้ได้เข้าร่วมเครือข่ายแล้ว ภายใน 2 นาที โหนด 2 จะเปลี่ยนจาก child เป็น router ดังนี้
> state child Done ... > state router Done
5. รีเซ็ตการกำหนดค่า
รีเซ็ตการกำหนดค่าเพื่อเตรียมพร้อมสำหรับแบบฝึกหัดถัดไป ในแต่ละโหนด ให้หยุด Thread รีเซ็ตเป็นค่าเริ่มต้น และออกจากอุปกรณ์ Thread จำลองโดยทำดังนี้
> thread stop Done > factoryreset > > exit
คุณอาจต้องกด enter 2-3 ครั้งเพื่อเรียกพรอมต์ > กลับมาหลังจากใช้คำสั่ง factoryreset
6. จัดการเครือข่ายด้วย OpenThread Daemon
สำหรับแบบฝึกหัดนี้ เราจะจำลองอินสแตนซ์ CLI 1 รายการ (อุปกรณ์ Thread SoC แบบฝังเดียว) และอินสแตนซ์ Radio Co-Processor (RCP) 1 รายการ
ot-daemon เป็นโหมดของแอป OpenThread Posix ที่ใช้ซ็อกเก็ต UNIX เป็นอินพุตและเอาต์พุต เพื่อให้แกนหลักของ OpenThread ทำงานเป็นบริการได้ ไคลเอ็นต์สามารถสื่อสารกับบริการนี้ได้โดยเชื่อมต่อกับซ็อกเก็ตโดยใช้ OpenThread CLI เป็นโปรโตคอล
ot-ctl คือ CLI ที่ ot-daemon จัดเตรียมไว้ให้เพื่อจัดการและกำหนดค่า RCP เราจะใช้สิ่งนี้เพื่อเชื่อมต่อ RCP กับเครือข่ายที่สร้างโดยอุปกรณ์ Thread
ใช้ ot-daemon
แบบฝึกหัดนี้จะใช้หน้าต่างเทอร์มินัล 3 หน้าต่าง ซึ่งสอดคล้องกับรายการต่อไปนี้
- อินสแตนซ์ CLI ของอุปกรณ์ Thread จำลอง (โหนด 1)
ot-daemonprocess- อินสแตนซ์
ot-ctlCLI
หากทำต่อจากแบบฝึกหัดก่อนหน้า คุณควรมีหน้าต่างเทอร์มินัล 2 หน้าต่างเปิดอยู่แล้ว เปิดอีก 1 หน้าต่างเพื่อให้มีหน้าต่างเทอร์มินัล 3 หน้าต่างสำหรับการฝึกนี้
1. เริ่มโหนด 1
ในหน้าต่างเทอร์มินัลแรก ให้สร้างกระบวนการ CLI สำหรับอุปกรณ์ Thread ที่จำลองขึ้น
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
หมายเหตุ: หากไม่เห็นข้อความแจ้ง > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter
สร้างชุดข้อมูลการปฏิบัติงานใหม่ ยืนยันให้เป็นชุดข้อมูลที่ใช้งานอยู่ และเริ่ม Thread โดยทำดังนี้
> dataset init new Done > dataset Active Timestamp: 1 Channel: 13 Channel Mask: 07fff800 Ext PAN ID: 97d584bcd493b824 Mesh Local Prefix: fd55:cf34:dea5:7994/64 Network Key: ba6e886c7af50598df1115fa07658a83 Network Name: OpenThread-34e4 PAN ID: 0x34e4 PSKc: 38d6fd32c866927a4dfcc06d79ae1192 Security Policy: 0, onrcb Done
คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่
> dataset commit active Done
เปิดอินเทอร์เฟซ IPv6
> ifconfig up Done
เริ่มการดำเนินการโปรโตคอล Thread
> thread start Done
ดูที่อยู่ IPv6 ที่กำหนดให้กับอินเทอร์เฟซ Thread ของโหนด 1 โดยทำดังนี้
> ipaddr fd55:cf34:dea5:7994:0:ff:fe00:fc00 fd55:cf34:dea5:7994:0:ff:fe00:d000 fd55:cf34:dea5:7994:460:872c:e807:c4ab fe80:0:0:0:9cd8:aab6:482f:4cdc Done >
ดังที่อธิบายไว้ในขั้นตอนจำลองเครือข่าย Thread ที่อยู่หนึ่งเป็นแบบลิงก์เฉพาะที่ (fe80) และอีก 3 รายการเป็นแบบเมชเฉพาะที่ (fd) EID คือที่อยู่แบบเมชเฉพาะที่ซึ่งไม่มี ff:fe00 ในที่อยู่ ในเอาต์พุตตัวอย่างนี้ EID คือ fd55:cf34:dea5:7994:460:872c:e807:c4ab
ระบุ EID ที่เฉพาะเจาะจงจากเอาต์พุต ipaddr ซึ่งจะใช้ในการสื่อสารกับโหนด
2. เริ่ม ot-daemon
ในหน้าต่างเทอร์มินัลที่ 2 ให้ไปที่ไดเรกทอรี openthread แล้วเริ่ม ot-daemon สำหรับโหนด RCP ซึ่งเราจะเรียกว่าโหนด 2 ใช้-vแฟล็ก verbose เพื่อให้คุณเห็นเอาต์พุตบันทึกและยืนยันว่ากำลังทำงานอยู่ และอย่าลืมใช้ sudo:
$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'
เมื่อสำเร็จ ot-daemon ในโหมดละเอียดจะสร้างเอาต์พุตที่คล้ายกับต่อไปนี้
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
เปิดเทอร์มินัลนี้ไว้และเรียกใช้ในเบื้องหลัง คุณจะไม่ป้อนคำสั่งเพิ่มเติมใดๆ ในหน้าต่างนี้
3. ใช้ ot-ctl เพื่อเข้าร่วมเครือข่าย
เรายังไม่ได้มอบหมายให้ Node 2 (ot-daemon RCP) ทำงานในเครือข่าย Thread ใดๆ ot-ctl จึงเข้ามามีบทบาทในจุดนี้ ot-ctl ใช้ CLI เดียวกันกับแอป OpenThread CLI คุณจึงควบคุมโหนด ot-daemon ได้ในลักษณะเดียวกับอุปกรณ์ Thread อื่นๆ ที่จำลอง
ในหน้าต่างเทอร์มินัลที่ 3 ให้เริ่ม ot-ctl ดังนี้
$ sudo ./build/posix/src/posix/ot-ctl >
หมายเหตุ: หากไม่เห็นข้อความแจ้ง > หลังจากเรียกใช้คำสั่งนี้ ให้กด enter
คุณจะใช้ ot-ctl ในหน้าต่างเทอร์มินัลที่ 3 นี้เพื่อจัดการโหนด 2 (โหนด RCP) ที่คุณเริ่มในหน้าต่างเทอร์มินัลที่ 2 ด้วย ot-daemon ตรวจสอบ state ของโหนด 2 ดังนี้
> state disabled Done
รับ eui64 ของ Node 2 เพื่อจำกัดการเข้าร่วมเฉพาะผู้เข้าร่วมที่ต้องการ
> eui64 18b4300000000001 Done
ในโหนด 1 (หน้าต่างเทอร์มินัลแรก) ให้เริ่ม Commissioner และจำกัดการเข้าร่วมเฉพาะ eui64 นั้น
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
ในโหนด 2 (หน้าต่างเทอร์มินัลที่ 3) ให้เปิดอินเทอร์เฟซเครือข่ายและเข้าร่วมเครือข่ายโดยทำดังนี้
> ifconfig up Done > joiner start J01NME Done
... รอสักครู่เพื่อรับการยืนยัน ...
Join success
ในฐานะอุปกรณ์ที่เข้าร่วม RCP (โหนด 2) ได้ตรวจสอบสิทธิ์ของตัวเองกับ Commissioner (โหนด 1) เรียบร้อยแล้ว และได้รับข้อมูลเข้าสู่ระบบเครือข่าย Thread
ตอนนี้ให้เข้าร่วม Node 2 กับเครือข่าย Thread โดยทำดังนี้
> thread start Done
4. ตรวจสอบการตรวจสอบสิทธิ์เครือข่าย
ตรวจสอบ state ในโหนด 2 เพื่อตรวจสอบว่าตอนนี้ได้เข้าร่วมเครือข่ายแล้ว ภายใน 2 นาที โหนด 2 จะเปลี่ยนจาก child เป็น router ดังนี้
> state child Done ... > state router Done
5. ตรวจสอบการเชื่อมต่อ
ออกจาก ot-ctl โดยใช้คำสั่ง Ctrl+D หรือ exit จากนั้นในบรรทัดคำสั่งของเครื่องโฮสต์ ให้ Ping โหนด 1 โดยใช้ EID ของโหนดด้วยคำสั่ง ping6 หากot-daemonอินสแตนซ์ RCP เข้าร่วมและสื่อสารกับเครือข่าย Thread ได้สำเร็จ การ Ping จะสำเร็จ
$ ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms --- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms
7. ยินดีด้วย
คุณได้จำลองเครือข่าย Thread แรกโดยใช้ OpenThread เรียบร้อยแล้ว ยอดเยี่ยม!
ใน Codelab นี้ คุณได้เรียนรู้วิธีทำสิ่งต่อไปนี้
- ตั้งค่าเครื่องมือเชนบิลด์ OpenThread
- จำลองเครือข่าย Thread
- ตรวจสอบสิทธิ์โหนด Thread
- จัดการเครือข่าย Thread ด้วย OpenThread Daemon
หากต้องการดูข้อมูลเพิ่มเติม โปรดอ่านข้อมูลอ้างอิงต่อไปนี้