1. บทนำ
OpenThread ที่เผยแพร่โดย Google เป็นการใช้งานแบบโอเพนซอร์สของโปรโตคอลเครือข่าย Thread® Google Nest ได้เปิดตัว OpenThread เพื่อให้นักพัฒนาซอฟต์แวร์นําเทคโนโลยีที่ใช้ในผลิตภัณฑ์ Nest ไปใช้ในวงกว้างเพื่อเร่งการพัฒนาผลิตภัณฑ์สําหรับบ้านที่เชื่อมต่อ
ข้อกําหนดชุดข้อความกําหนดโปรโตคอลการสื่อสารของอุปกรณ์ไร้สายที่เชื่อถือได้ต่ออุปกรณ์แบบพกพาที่ใช้ IPv6 ได้สําหรับแอปพลิเคชันที่บ้าน OpenThread ใช้งานเลเยอร์เครือข่ายชุดข้อความทั้งหมด รวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีความปลอดภัยของ MAC, Mesh Link Establishment และ Mesh Routing
ใน Codelab นี้ คุณจะตั้งโปรแกรม OpenThread ในฮาร์ดแวร์จริง สร้างและจัดการเครือข่าย เทรด และส่งข้อความระหว่างโหนดได้
สิ่งที่คุณจะได้เรียนรู้
- การสร้างและกะพริบไบนารี OpenLI CLI ไปยังบอร์ดนักพัฒนาซอฟต์แวร์
- การสร้าง RCP ซึ่งประกอบด้วยเครื่อง Linux และกระดานนักพัฒนาซอฟต์แวร์
- การสื่อสารด้วย RCP โดยใช้ OpenThread Daemon และ
ot-ctl
- การจัดการโหนดชุดข้อความด้วยตนเองด้วย GNU Screen และ OpenThread CLI
- การว่าจ้างอุปกรณ์อย่างปลอดภัยบนเครือข่าย Thread
- วิธีการทํางานของ IPv6 แบบมัลติแคสต์
- การส่งผ่านข้อความระหว่างโหนดชุดข้อความกับ UDP
สิ่งที่ต้องมี
ฮาร์ดแวร์:
- บอร์ด Nordic Interconductor nRF52840 จํานวน 3 รายการ
- สายเคเบิล USB กับไมโคร USB 3 เส้นเพื่อเชื่อมต่อบอร์ด
- เครื่อง Linux ที่มีพอร์ต USB อย่างน้อย 3 พอร์ต
ซอฟต์แวร์:
- เชนเครื่องมือ GNU
- เครื่องมือบรรทัดคําสั่ง nRF5x แบบนอร์ดิก
- ซอฟต์แวร์ Segger J-Link
- OpenThread
- Git
2. เริ่มต้นใช้งาน
การจําลอง OpenThread
ก่อนที่จะเริ่มต้น คุณอาจเรียกใช้ OpenThread Simulation Codelab เพื่อทําความคุ้นเคยกับแนวคิดของชุดข้อความพื้นฐานและ OpenThread CLI
เทอร์มินัลพอร์ตอนุกรม
คุณควรคุ้นเคยกับวิธีเชื่อมต่อกับพอร์ตอนุกรมผ่านเทอร์มินัล Codelab นี้ใช้หน้าจอ GNU และแสดงภาพรวมการใช้งาน แต่คุณสามารถใช้ซอฟต์แวร์เทอร์มินัลอื่นๆ ได้
เครื่อง Linux
Codelab นี้ออกแบบมาเพื่อใช้เครื่อง Linux ที่ใช้ i386 หรือ x86 เพื่อทําหน้าที่เป็นโฮสต์ให้กับอุปกรณ์เทรด Radio Co-Processor (RCP) และใช้แฟลชบอร์ดการพัฒนาชุดข้อความทั้งหมด ขั้นตอนทั้งหมดได้รับการทดสอบใน Ubuntu 14.04.5 LTS (Trusty Tahr)
กระดานข่าวเหนือปกติแบบ nRF52840
Codelab นี้ใช้กระดาน nRF52840 PDK จํานวน 3 กระดาน
ติดตั้ง SEGger J-Link
เราใช้ SEGger J-Link เพื่อเขียนโปรแกรมสําหรับกระดาน nRF52840 ซึ่งมีโมดูล JTAG แบบออนบอร์ด ติดตั้งรายการนี้ในเครื่อง Linux
ดาวน์โหลดแพ็กเกจที่เหมาะสมสําหรับเครื่องของคุณและติดตั้งไปยังตําแหน่งที่เหมาะสม ใน Linux นี่คือ /opt/SEGGER/JLink
ติดตั้งเครื่องมือบรรทัดคําสั่ง nRF5x
เครื่องมือบรรทัดคําสั่ง nRF5x ช่วยให้คุณคัดลอกไบนารี OpenThread ไปยังบอร์ด nRF52840 ได้ ติดตั้งบิลด์ nRF5x-Command-Line-Tools-<OS> ที่เหมาะสมในเครื่อง Linux
วางแพ็กเกจที่ดึงข้อมูลไว้ในโฟลเดอร์ราก ~/
ติดตั้ง ARM GNU Toolchain
โดยมีใช้ ARM GNU Toolchain ในการสร้าง
เราขอแนะนําให้วางที่เก็บถาวรที่ดึงข้อมูลไว้ใน /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
ในเครื่อง Linux ทําตามวิธีการในไฟล์ readme.txt
ของที่เก็บถาวรเพื่อดูวิธีการติดตั้ง
หน้าจอติดตั้ง (ไม่บังคับ)
หน้าจอเป็นเครื่องมือง่ายๆ ในการเข้าถึงอุปกรณ์ที่เชื่อมต่อกับพอร์ตอนุกรม Codelab นี้ใช้หน้าจอ แต่คุณอาจใช้แอปพลิเคชันพอร์ตอนุกรมใดก็ได้ตามต้องการ
$ sudo apt-get install screen
3. โคลนที่เก็บ
OpenThread
โคลนและติดตั้ง OpenThread คําสั่ง script/bootstrap
ตรวจสอบว่าได้ติดตั้ง Toolchain ไว้และกําหนดค่าสภาพแวดล้อมอย่างถูกต้อง
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
สร้าง OpenThread Daemon:
$ script/cmake-build posix -DOT_DAEMON=ON
ตอนนี้คุณพร้อมที่จะสร้างและ OpenOpen แฟลชบอร์ดไปยังบอร์ด nRF52840 แล้ว
4. ตั้งค่าโปรแกรมเชื่อมต่อ RCP
สร้างและแฟลช
สร้างตัวอย่าง OpenThread nRF52840 ที่มีฟังก์ชัน Joiner และ USB ที่มาพร้อมเครื่อง อุปกรณ์จะใช้บทบาท "ผู้เข้าร่วม" เพื่อตรวจสอบสิทธิ์อย่างปลอดภัยและดูแลเครือข่ายชุดข้อความ USB เนทีฟช่วยให้ใช้ USB CDC ACM เป็นการรับส่งข้อมูลอนุกรมระหว่าง nRF52840 และโฮสต์ได้
โปรดล้างที่เก็บของบิลด์ก่อนหน้าก่อนเสมอโดยเรียกใช้ rm -rf build
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 USB_trans
ไปยังไดเรกทอรีที่มีไบนารี OpenOpen RCP และแปลงเป็นรูปแบบเลขฐานสิบหก
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
เสียบสาย USB เข้ากับพอร์ตแก้ไขข้อบกพร่องของ Micro-USB ถัดจาก PIN ภายนอกบนกระดาน nRF52840 แล้วเสียบเข้ากับเครื่อง Linux ตั้งค่าสวิตช์แหล่งพลังงาน nRF บนกระดาน nRF52840 เป็น VDD เมื่อเชื่อมต่ออย่างถูกต้อง ไฟ LED5 จะเปิดอยู่
หากเป็นกระดานแรกที่ต่อเชื่อมกับเครื่อง Linux ข้อมูลดังกล่าวจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM0
(กระดาน nRF52840 ทั้งหมดจะใช้ ttyACM
สําหรับตัวระบุพอร์ตอนุกรม)
$ ls /dev/ttyACM* /dev/ttyACM0
โปรดทราบว่าหมายเลขซีเรียลของกระดาน nRF52840 ที่ใช้สําหรับ RCP มีดังนี้
ไปที่ตําแหน่งของเครื่องมือบรรทัดคําสั่ง nRFx แล้วเปิดไฟล์ PDF ของ OpenThread RCP ขึ้นบนกระดาน nRF52840 โดยใช้หมายเลขซีเรียลของกระดาน โปรดทราบว่าหากออกจากธง --verify
คุณจะเห็นข้อความเตือนว่ากระบวนการแฟลชล้มเหลวโดยไม่มีข้อผิดพลาด
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset
เอาต์พุตต่อไปนี้สร้างขึ้นเมื่อประสบความสําเร็จ
Parsing hex file. Erasing user available code and UICR flash areas. Applying system reset. Checking that the area to write is not protected. Programing device. Applying system reset. Run.
ติดป้ายกํากับกระดาน "RCP" เพื่อไม่ให้สับสนบทบาทของกระดาน
เชื่อมต่อกับ USB ที่มาพร้อมเครื่อง
คุณต้องใช้พอร์ต nRF USB บนบอร์ด nRF52840 เพื่อสื่อสารกับโฮสต์ RCP (เครื่อง Linux) เนื่องจากบิลด์ OpenThread RCP เปิดใช้การใช้ USB CDC ACM แบบเนทีฟเป็นการรับส่งข้อมูลอนุกรม
ถอดหัวต่อ Micro-USB ของสาย USB ออกจากพอร์ตแก้ไขข้อบกพร่องของกระดาน nRF52840 กะพริบ จากนั้นเสียบกลับเข้าไปใหม่กับพอร์ต nRF USB แบบไมโคร USB ที่อยู่ข้างปุ่มรีเซ็ต ของ Google Play ปรับสวิตช์แหล่งจ่ายไฟ nRF เป็น USB
เริ่ม OpenThread Daemon
ในการออกแบบ RCP ให้ใช้ OpenThread Daemon เพื่อสื่อสารและจัดการอุปกรณ์ เทรด เริ่ม ot-daemon
ด้วยแฟล็กแบบละเอียด -v
เพื่อดูเอาต์พุตของบันทึกและยืนยันว่าใช้งานได้
$ cd ~/src/openthread $ ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'
เมื่อทําเสร็จแล้ว ot-daemon
ในโหมดรายละเอียดจะสร้างเอาต์พุตที่คล้ายกับรายการต่อไปนี้
ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15 ot-daemon[228024]: Thread version: 2 ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08
เปิดหน้าต่างเทอร์มินัลนี้ทิ้งไว้เพื่อดูบันทึกจาก ot-daemon
ใช้ ot-ctl
เพื่อสื่อสารกับโหนด RCP ot-ctl
ใช้ CLI เดียวกับแอป OpenThread CLI ดังนั้นคุณจึงควบคุม ot-daemon
โหนดได้เช่นเดียวกับอุปกรณ์ชุดข้อความอื่นๆ ที่จําลองขึ้น
ในหน้าต่างเทอร์มินัลที่ 2 ให้เริ่ม ot-ctl
:
$ ./build/posix/bin/ot-ctl >
ตรวจสอบ state
ของโหนด 2 (โหนด RCP) ที่คุณเริ่มต้นด้วย ot-daemon
> state disabled Done
5. ตั้งค่า FTD
โหนดแบบชุดข้อความอีก 2 โหนดที่ใช้ใน Codelab นี้คืออุปกรณ์แบบชุดข้อความแบบเต็ม (FTD) ในการออกแบบ System-on-Chip (SoC) มาตรฐาน ในการตั้งค่าเวอร์ชันที่ใช้งานจริง 1 คนอาจใช้ wpantund
ซึ่งเป็นไดรเวอร์อินเทอร์เฟซเครือข่ายเวอร์ชันที่ใช้งานจริงเพื่อควบคุมอินสแตนซ์ OpenCP NCP แต่ใน Codelab นี้เราจะใช้ ot-ctl
ซึ่งเป็น OpenThread .CLI
อุปกรณ์เครื่องหนึ่งทําหน้าที่เป็นค่าคอมมิชชัน เพื่อตรวจสอบสิทธิ์และดูแลอุปกรณ์ในเครือข่ายนั้นอย่างปลอดภัย อุปกรณ์อีกเครื่องหนึ่งทําหน้าที่เป็นตัวเข้าร่วมซึ่งคณะกรรมาธิการจะตรวจสอบสิทธิ์กับเครือข่ายชุดข้อความได้
สร้างและแฟลช
สร้างตัวอย่าง OpenThread FTD สําหรับแพลตฟอร์ม nRF52840 ที่เปิดใช้บทบาทค่าคอมมิชชันและผู้เข้าร่วม
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON
ไปยังไดเรกทอรีที่มีไบนารี COpen ชื่อเต็มของอุปกรณ์ (FTD) CLI แล้วแปลงเป็นรูปแบบเลขฐานสิบหกดังนี้
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex
เสียบสาย USB เข้ากับพอร์ต Micro-USB ถัดจากหมุดภายนอกบนกระดาน nRF52840 แล้วเสียบเข้ากับเครื่อง Linux หาก RCP ยังต่อเชื่อมอยู่กับเครื่อง Linux กระดานใหม่ควรปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM1
(กระดาน nRF52840 ทั้งหมดใช้ ttyACM
สําหรับตัวระบุพอร์ตอนุกรม)
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
หมายเหตุ: หมายเลขซีเรียลของกระดาน nRF52840 ที่ใช้สําหรับ FTD มีดังนี้
ไปที่ตําแหน่งของเครื่องมือบรรทัดคําสั่ง nRFx แล้วแฟลชไฟล์เลขฐานสิบหกของ OpenThread CLI FTD ไปยังกระดาน nRF52840 โดยใช้หมายเลขซีเรียลของกระดานนี้
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset
ติดป้ายกํากับกระดาน "คอมมิชชัน"
เชื่อมต่อกับ USB ที่มาพร้อมเครื่อง
คุณต้องใช้พอร์ต nRF USB บนบอร์ด nRF52840 เพื่อสื่อสารกับโฮสต์ RCP (เครื่อง Linux) เนื่องจากบิลด์ OpenThread FTD เปิดใช้ USB CDC ACM แบบเนทีฟเป็นการรับส่งข้อมูลอนุกรม
ถอดหัวต่อ Micro-USB ของสาย USB ออกจากพอร์ตแก้ไขข้อบกพร่องของกระดาน nRF52840 กะพริบ จากนั้นเสียบกลับเข้าไปใหม่กับพอร์ต nRF USB แบบไมโคร USB ที่อยู่ข้างปุ่มรีเซ็ต ของ Google Play ปรับสวิตช์แหล่งจ่ายไฟ nRF เป็น USB
ยืนยันบิลด์
ยืนยันบิลด์ที่ประสบความสําเร็จโดยการเข้าถึง OpenThread CLI โดยใช้ GNU Screen จากหน้าต่างเทอร์มินัล กระดาน nRF52840 จะใช้อัตรารับส่งข้อมูล 115200
$ screen /dev/ttyACM1 115200
ในหน้าต่างใหม่ ให้กด Return บนแป้นพิมพ์ 2-3 ครั้งเพื่อแสดงข้อความแจ้ง OpenThread CLI >
เปิดอินเทอร์เฟซ IPv6 แล้วตรวจสอบที่อยู่ดังนี้
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
ใช้ Ctrl+a →
d
เพื่อปลดหน้าจอ FTD Commissioner CLI และกลับไปที่เทอร์มินัล Linux เพื่อให้แฟลชบอร์ดถัดไปกะพริบได้ หากต้องการป้อน CLI อีกครั้ง ให้ใช้ screen -r
จากบรรทัดคําสั่ง หากต้องการดูรายการหน้าจอที่ใช้ได้ ให้ใช้ screen -ls
$ screen -ls There is a screen on: 74182.ttys000.mylinuxmachine (Detached) 1 Socket in /tmp/uscreens/S-username.
ตั้งค่า FTD Joiner
ทํากระบวนการด้านบนซ้ําเพื่อแฟลชบอร์ด nRF52840 รุ่นที่ 3 โดยใช้บิลด์ ot-cli-ftd.hex
ที่มีอยู่ เมื่อดําเนินการเสร็จแล้ว อย่าลืมเชื่อมต่อบอร์ดกับพีซีอีกครั้งโดยใช้พอร์ต nRF USB และตั้งค่าสวิตช์แหล่งจ่ายไฟ nRF เป็น VDD
หากมีโหนดอีก 2 โหนดแนบมากับเครื่อง Linux เมื่อเชื่อมต่อกับบอร์ดที่ 3 นี้ โหนดดังกล่าวจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM2
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
ติดป้ายกํากับกระดาน "ผู้เข้าร่วม"
เมื่อยืนยันโดยใช้หน้าจอ แทนที่จะสร้างอินสแตนซ์ใหม่ของหน้าจอจากบรรทัดคําสั่ง ให้แนบกับหน้าจอเดิมอีกครั้งแล้วทําหน้าต่างใหม่ภายในหน้าต่างนั้น (ที่คุณใช้สําหรับค่าคอมมิชชัน FTD)
$ screen -r
สร้างหน้าต่างใหม่ภายในหน้าจอด้วย Ctrl+a → c
ข้อความแจ้งบรรทัดคําสั่งใหม่จะปรากฏขึ้น เข้าถึง OpenThread CLI สําหรับตัวเข้าร่วม FTD ดังนี้
$ screen /dev/ttyACM2 115200
ในหน้าต่างใหม่นี้ ให้กด "Return" บนแป้นพิมพ์ 2-3 ครั้งเพื่อแสดงข้อความแจ้ง OpenThread CLI >
เปิดอินเทอร์เฟซ IPv6 แล้วตรวจสอบที่อยู่ดังนี้
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
ตอนนี้ CLI โปรแกรมรวบรวมข้อมูล FTD อยู่ในอินสแตนซ์เดียวกับหน้าจอของ FTD Commissioner คุณสามารถสลับระหว่างแอปพลิเคชันเหล่านั้นได้โดยใช้ Ctrl+a → n
ใช้ Ctrl+a →
d
ได้ตลอดเวลาเพื่อออกจากหน้าจอ
6. การตั้งค่าหน้าต่างเทอร์มินัล
นับจากนี้เป็นต้นไป คุณจะสลับระหว่างอุปกรณ์ชุดข้อความเป็นประจํา ดังนั้นตรวจสอบว่าอุปกรณ์ทุกเครื่องพร้อมใช้งานและเข้าถึงได้ง่าย จนถึงตอนนี้ เราได้ใช้หน้าจอเพื่อเข้าถึง FTD ทั้งสอง และเครื่องมือนี้ยังอนุญาตให้แยกหน้าจอโดยใช้หน้าต่างเทอร์มินัลเดียวกันได้อีกด้วย ใช้การตั้งค่านี้เพื่อดูว่าโหนดใดตอบสนองต่อคําสั่งที่ออกโดยโหนดอื่น
ตามหลักการแล้ว คุณควรมีหน้าต่าง 4 หน้าต่างพร้อมใช้งานดังนี้
- บริการ / บันทึก
ot-daemon
- เครื่องเข้าร่วม RCP ผ่าน
ot-ctl
- FTD Commissioner ผ่าน OpenThread CLI
- FTD Joiner ผ่าน OpenThread CLI
หากต้องการใช้การกําหนดค่าเครื่องมือหรือพอร์ตอนุกรม / เครื่องมือของคุณเอง ให้ข้ามไปยังขั้นตอนถัดไป กําหนดค่าหน้าต่างเทอร์มินัลสําหรับอุปกรณ์ทั้งหมดด้วยวิธีที่เหมาะกับคุณมากที่สุด
การใช้หน้าจอ
เริ่มเซสชันหน้าจอเพียง 1 เซสชันเพื่อให้ใช้งานได้ง่าย คุณควรกําหนดค่านี้ไว้แล้วเมื่อตั้งค่า FTD ทั้ง 2 รายการ
คําสั่งทั้งหมดภายในหน้าจอขึ้นต้นด้วย Ctrl+a
คําสั่งสําหรับหน้าจอพื้นฐาน
แนบใหม่กับเซสชันหน้าจอ (จากบรรทัดคําสั่ง) |
|
ออกจากเซสชันหน้าจอ | Ctrl+a → |
สร้างหน้าต่างใหม่ภายในเซสชันหน้าจอ | Ctrl+a → |
สลับไปมาระหว่างหน้าต่างในเซสชันหน้าจอเดียวกัน | Ctrl+a → |
ปิดหน้าต่างปัจจุบันในเซสชันหน้าจอ | Ctrl+a → |
แยกหน้าจอ
เมื่อใช้หน้าจอ คุณแยกเทอร์มินัลออกเป็นหลายหน้าต่างได้ดังนี้
คุณเข้าถึงคําสั่งใน screen
ได้โดยใช้ Ctrl+a คําสั่งทุกรายการควรขึ้นต้นด้วยคอมโบคีย์การเข้าถึงนี้
หากปฏิบัติตาม Codelab อย่างถูกต้อง คุณควรมีหน้าต่าง 2 บาน (FTD Commissioner, FTD Joiner) บนอินสแตนซ์หน้าจอเดียวกัน หากต้องการแบ่งหน้าจอระหว่างทั้ง 2 หน้าจอ ให้ป้อนเซสชันหน้าจอที่มีอยู่ก่อน
$ screen -r
คุณควรอยู่ในอุปกรณ์ FTD เครื่องใดเครื่องหนึ่ง ทําตามขั้นตอนต่อไปนี้ในหน้าจอ
- Ctrl+a →
S
เพื่อแบ่งหน้าต่างในแนวนอน - Ctrl+a →
Tab
เพื่อย้ายเคอร์เซอร์ไปยังหน้าต่างว่างใหม่ - Ctrl+a →
n
เพื่อสลับหน้าต่างใหม่ไปยังหน้าต่างถัดไป - หากหน้าต่างตรงกับหน้าต่างด้านบน ให้กดแป้น Ctrl+a →
n
อีกครั้งเพื่อดูอุปกรณ์ FTD อื่น
ทั้ง 2 ปุ่มมองเห็นได้แล้ว สลับระหว่าง Ctrl + a → Tab
ขอแนะนําให้คุณเปลี่ยนชื่อแต่ละหน้าต่างด้วย Ctrl+a → A
เพื่อป้องกันความสับสน
การใช้งานขั้นสูง
หากต้องการแบ่งหน้าจอออกเป็นสี่ส่วนและดูบันทึก ot-daemon
และตัวเข้าร่วม RCP ot-ctl
บริการเหล่านั้นจะต้องเริ่มต้นภายในอินสแตนซ์หน้าจอเดียวกันนี้ หากต้องการดําเนินการดังกล่าว ให้หยุด ot-daemon
และออกจาก ot-ctl
แล้วรีสตาร์ทภายในหน้าต่างใหม่ของหน้าจอ (Ctrl+a → c
)
คุณไม่ต้องใช้การตั้งค่านี้และปล่อยให้เป็นการออกกําลังกายสําหรับผู้ใช้
แยกและไปยังหน้าต่างต่างๆ ด้วยคําสั่งต่อไปนี้
สร้างหน้าต่างใหม่ | Ctrl+a → |
แบ่งหน้าต่างในแนวตั้ง | Ctrl+a → |
แบ่งหน้าต่างในแนวนอน | Ctrl+a → |
ข้ามไปยังหน้าต่างถัดไปที่แสดง | Ctrl+a → |
สลับหน้าต่างที่แสดงไปข้างหน้าหรือย้อนกลับ | Ctrl+a → |
เปลี่ยนชื่อหน้าต่างปัจจุบัน | Ctrl+a → |
ออกจากหน้าจอได้ทุกเมื่อด้วย Ctrl+a → d
และแนบอีกครั้งด้วย screen -r
จากบรรทัดคําสั่ง
ดูข้อมูลเพิ่มเติมเกี่ยวกับหน้าจอได้ที่ข้อมูลอ้างอิงด่วนของหน้าจอ GNU
7. สร้างเครือข่ายชุดข้อความ
ตอนนี้คุณกําหนดค่าหน้าต่างและหน้าจอเทอร์มินัลทั้งหมดเรียบร้อยแล้ว มาสร้างเครือข่ายชุดข้อความของเรากัน ในกรรมาธิการของ FTD ให้สร้างชุดข้อมูลการปฏิบัติงานใหม่และคอมมิตเป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลด้านการทํางานคือการกําหนดค่าสําหรับเครือข่ายชุดข้อความที่คุณสร้าง
## FTD Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 11 Channel Mask: 07fff800 Ext PAN ID: c0de7ab5c0de7ab5 Mesh Local Prefix: fdc0:de7a:b5c0/64 Network Key: 1234c0de7ab51234c0de7ab51234c0de Network Name: OpenThread-c0de PAN ID: 0xc0de PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
จดคีย์เครือข่าย 1234c0de7ab51234c0de7ab51234c0de
ไว้ใช้ภายหลัง
เลือกชุดข้อมูลนี้เป็นรายการที่ใช้งานอยู่:
> dataset commit active Done
วิธีเปิดใช้อินเทอร์เฟซ IPv6
> ifconfig up Done
เริ่มต้นการดําเนินการโปรโตคอลชุดข้อความ:
> thread start Done
หลังจากนั้น ให้ตรวจสอบสถานะของอุปกรณ์ ตัวแปรที่ได้ควรเป็นตัวแปรที่ได้คะแนนนํา รับ RLOC16 สําหรับการอ้างอิงในอนาคต
## FTD Commissioner ## ---------------------- > state leader Done > rloc16 0c00 Done
โปรดตรวจสอบที่อยู่ IPv6 ของอุปกรณ์ดังนี้
## FTD Commissioner ## ---------------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:c00 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a # Mesh-Local EID (ML-EID) fe80:0:0:0:1cd6:87a9:cb9d:4b1d # Link-Local Address (LLA)
ตอนนี้เครือข่าย "codelab" จะปรากฏขึ้นเมื่อสแกนจากอุปกรณ์เทรดอื่นๆ
จาก ot-ctl
ใน RCP Joiner:
## RCP Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
จาก OpenThread CLI บน FTD Joiner ให้ทําดังนี้
## FTD Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
หากเครือข่าย "codelab" ไม่ปรากฏในรายการ ให้ลองสแกนอีกครั้ง
โปรดทราบว่าในการสแกนทั้ง 2 แบบ เครือข่ายจะไม่สามารถเข้าร่วมได้ (คอลัมน์ J บนตัวเชื่อม RCP และตัวเข้าร่วม FTD) หมายความว่าค่าคอมมิชชันชุดข้อความไม่ได้ทํางานบนเครือข่าย การประชุมจะยังใช้การเชื่อมต่อแบบออกนอกสายได้โดยป้อนคีย์เครือข่ายในอุปกรณ์สําหรับเชื่อมต่อด้วยตนเอง
8. เพิ่มเครื่องมือเชื่อมต่อ RCP
มาเพิ่มเครื่องมือเชื่อมต่อ RCP ในเครือข่ายชุดข้อความที่เพิ่งสร้างขึ้นกัน โดยใช้กระบวนการย่านความถี่นอกเครือข่าย สแกนหาเครือข่ายในเครื่องเข้าร่วม RCP
## RCP Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
หากต้องการเข้าร่วม ให้ตั้งค่าคีย์เครือข่าย (เราเพิ่งได้รับจากกรรมาธิการ FTD) บนเครื่องมือเชื่อมต่อ RCP ในชุดข้อมูลที่ใช้งานอยู่
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
ตรวจสอบชุดข้อมูลว่าได้ตั้งค่าอย่างถูกต้องแล้ว
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
เรียกใช้ชุดข้อความเพื่อให้เครื่องมือเชื่อมต่อ RCP เข้าร่วมเครือข่าย "codelab" รอสักครู่ ตรวจสอบสถานะ RLOC16 และที่อยู่ IPv6
## RCP Joiner ## ---------------- > thread start Done > state child Done > rloc16 0c01 Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:0c01 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f # Mesh-Local EID (ML-EID) fe80:0:0:0:18e5:29b3:a638:943b # Link-Local Address (LLA) Done
จดที่อยู่ IPv6 ของ Mesh-Local (ที่นี่ fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
) ไว้ใช้ในภายหลัง
กลับไปที่คณะกรรมาธิการของ FTD ให้ตรวจสอบตารางเราเตอร์และตารางย่อยเพื่อยืนยันว่าอุปกรณ์ทั้ง 2 เครื่องอยู่ในเครือข่ายเดียวกัน ใช้ RLOC16 เพื่อระบุเครื่องมือเชื่อมต่อ RCP
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 35 | 1ed687a9cb9d4b1d | Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|VER| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1| 2| 1ae529b3a638943b | Done
ใช้คําสั่ง ping กับที่อยู่แบบ Mesh-local ของตัวเข้าร่วม RCP (ที่อยู่ Mesh-Local ที่ได้จากเอาต์พุต ipaddr
ของตัวเข้าร่วม RCP) เพื่อยืนยันการเชื่อมต่อ
## FTD Commissioner ## ---------------------- > ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f > 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms
ตอนนี้เรามีเครือข่ายชุดข้อความที่ประกอบด้วยโหนด 2 โหนด ซึ่งแสดงภาพจากแผนภาพโทโพโลยีนี้
แผนภาพโทโพโลยี
ขณะที่คุณทํางานกับส่วนที่เหลือของ Codelab เราจะแสดงแผนภาพโทโพโลยีใหม่เมื่อมีการเปลี่ยนแปลงสถานะของเครือข่าย บทบาทโหนดจะแสดงดังนี้
เราเตอร์จะเป็นห้าเหลี่ยมเสมอ และผู้ใช้ปลายทางจะเป็นวงกลมเสมอ ตัวเลขในแต่ละโหนดจะแสดงรหัสเราเตอร์หรือรหัสย่อยที่แสดงในเอาต์พุต CLI โดยขึ้นอยู่กับบทบาทและสถานะปัจจุบันของโหนดแต่ละรายการ ณ ขณะนั้น
9. กรรมาธิการของ FTD
ต่อไปเราจะเพิ่มอุปกรณ์ชุดข้อความชุดที่ 3 ในเครือข่าย "codelab" คราวนี้เราจะใช้กระบวนการสั่งจ่ายเงินในวงที่ปลอดภัยมากขึ้น ในเครื่องมือเข้าร่วม FTD ให้ค้นหาเครือข่ายต่อไปนี้
## FTD Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 0 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | f65ae2853ff0c4e4 | 11 | -36 | 57 |
"0
" ในคอลัมน์ J บ่งชี้ว่าการสั่งงานชุดข้อความไม่มีการใช้งานในอุปกรณ์
โปรดระบุชื่อแบบเจาะจงเมื่อดําเนินการในอุปกรณ์ถัดไปนี้ และอนุญาตเฉพาะผู้เข้าร่วมของ FTD เท่านั้น อยู่ใน eui64
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
ในกรรมาธิการของ FTD ให้เริ่มคณะกรรมาธิการและระบุ eui64
ของอุปกรณ์ที่เข้าร่วม รวมถึงข้อมูลเข้าสู่ระบบของผู้ร่วมสนับสนุนได้ เช่น J01NME
ข้อมูลเข้าสู่ระบบของการรวมเป็นสตริงเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขคละกันทั้งหมด (0-9 และ AY แต่ไม่รวม I, O, Q และ Z เพื่อให้อ่านได้ง่าย) โดยมีความยาวตั้งแต่ 6 ถึง 32 อักขระ
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
เปลี่ยนไปใช้เครื่องเข้าร่วม FTD แล้วสแกนอีกครั้ง
## FTD Joiner ## ---------------- > scan | J | Network Name | Extended PAN | PAN | MAC Address | Ch | dBm | LQI | +---+------------------+------------------+------+------------------+----+-----+-----+ | 1 | OpenThread-c0de | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -45 | 196 |
ตามที่ระบุโดย 1
ในคอลัมน์ J การทําเครื่องหมายชุดข้อความทํางานบนเครือข่ายแล้ว เริ่มต้นบทบาทในผู้รวบรวมข้อมูลด้วยข้อมูลเข้าสู่ระบบของผู้มีส่วนร่วมที่คุณเพิ่งตั้งค่าบน FTD Commissioner:
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
ภายในเวลาประมาณ 1 นาที คุณจะได้รับการยืนยันการตรวจสอบสิทธิ์ว่าเสร็จสมบูรณ์
## FTD Joiner ## ---------------- > Join success
เปิดชุดข้อความเพื่อให้ตัวเข้าร่วม FTD เข้าร่วมเครือข่าย "codelab" และตรวจสอบสถานะและ RLOC16 ทันที
## FTD Joiner ## ---------------- > thread start Done > state child Done > rloc16 0c02 Done
ตรวจสอบที่อยู่ IPv6 ของอุปกรณ์ โปรดทราบว่าไม่มี ALOC เนื่องจากอุปกรณ์เครื่องนี้ไม่ใช่ผู้นํา และไม่ได้มีบทบาทเฉพาะของ Anycast ที่ต้องใช้ ALOC
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:c02 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA)
เปลี่ยนไปใช้ FTD Commissioner ทันที และตรวจสอบตารางเราเตอร์และย่อยเพื่อยืนยันว่ามีอุปกรณ์ 3 เครื่องอยู่ในเครือข่าย "codelab" โดยทําดังนี้
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 2 | 0x0c02 | 240 | 15 | 3 | 44 |1|1|1|1| e6cdd2d93249a243 | Done
จากโปรแกรม RLOC16 นั้น FTD Joiner ได้แนบเครือข่ายเป็นอุปกรณ์ของผู้ใช้ปลายทาง (เด็ก) โทโพโลยีที่อัปเดตของเรามีดังนี้
10. การทํางานของชุดข้อความ
อุปกรณ์ชุดข้อความใน Codelab นี้เป็นอุปกรณ์ชุดข้อความแบบเต็มรูปแบบ (FTD) ที่เรียกว่าอุปกรณ์ที่มีสิทธิ์ที่มีสิทธิ์สําหรับเราเตอร์ (REED) ซึ่งหมายความว่าแพลตฟอร์มเหล่านี้จะทํางานเป็นเราเตอร์หรืออุปกรณ์ปลายทาง และโปรโมตตัวเองจากอุปกรณ์ปลายทางไปยังเราเตอร์ได้
เธรดสามารถรองรับเราเตอร์ได้สูงสุด 32 ตัว และพยายามทําให้จํานวนเราเตอร์อยู่ในระหว่าง 16 ถึง 23 ตัว หาก REED ต่อเชื่อมเป็นอุปกรณ์ปลายทาง (ย่อย) และจํานวนเราเตอร์ต่ํากว่า 16 หลังจากระยะเวลาสุ่มภายใน 2 นาที ระบบจะโปรโมตตัวเองกับเราเตอร์โดยอัตโนมัติ
หากมีบุตรหลาน 2 คนในเครือข่ายเทรดหลังจากเพิ่มตัวเข้าร่วม FTD แล้ว ให้รออย่างน้อย 2 นาที แล้วตรวจสอบเราเตอร์และตารางย่อยใน FTD Commissioner อีกครั้ง โดยทําดังนี้
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | Done
FTD Joiner (Extended MAC = e6cdd2d93249a243
) ได้โปรโมตตัวเองกับเราเตอร์ โปรดทราบว่า RLOC16 แตกต่างออกไป (b800
แทน 0c02
) นั่นเป็นเพราะ RLOC16 จะอิงตามรหัสเราเตอร์และรหัสย่อยของอุปกรณ์ เมื่อเปลี่ยนจากอุปกรณ์ปลายทางเป็นเราเตอร์ ค่ารหัสเราเตอร์และรหัสย่อยของเครื่องจะเปลี่ยนแปลง RLOC16
ยืนยันรัฐใหม่และ RLOC16 ใน FTD Joiner
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
ดาวน์เกรด FTD Joiner
คุณทดสอบลักษณะการทํางานนี้ได้โดยการดาวน์เกรด FTD Joiner ด้วยตนเองจากเราเตอร์กลับไปเป็นอุปกรณ์ปลายทาง เปลี่ยนสถานะเป็นเด็กและตรวจสอบ RLOC16 ดังนี้
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
กลับไปที่คณะกรรมาธิการของ FTD ผู้เข้าร่วม FTD ควรปรากฏในตารางย่อย (รหัส = 3) หรืออาจเป็นเช่นนี้ขณะเปลี่ยน
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 3 | 0x0c03 | 240 | 16 | 3 | 94 |1|1|1|1| e6cdd2d93249a243 | Done
หลังจากนั้นจะเปลี่ยนกลับเป็นเราเตอร์ที่มี RLOC เป็น b800
นําตัวแปรที่ได้คะแนนนํา
ตัวแปรที่ดีที่สุดคือ ตัวเราเตอร์เอง ซึ่งหมายความว่าหากมีการนําผู้นําปัจจุบันออกจากเครือข่ายชุดข้อความ หนึ่งในเราเตอร์อื่นๆ จะกลายเป็นผู้นําคนใหม่
ใน FTD Commissioner ให้ปิดชุดข้อความเพื่อนําออกจากเครือข่ายชุดข้อความ ดังนี้
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
ภายใน 2 นาที FTD Joiner จะกลายเป็นผู้นําชุดข้อความใหม่ ตรวจสอบรัฐและที่อยู่ IPv6 ของผู้เข้าร่วม FTD เพื่อยืนยันข้อมูลต่อไปนี้
## FTD Joiner ## ---------------- > state leader Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Now it has the Leader ALOC! fdc0:de7a:b5c0:0:0:ff:fe00:b800 fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd fe80:0:0:0:e4cd:d2d9:3249:a243 Done
ตรวจสอบตารางย่อย สังเกตว่ามี RLOC16 ใหม่ นี่คือจุดเชื่อมต่อ RCP ซึ่งระบุโดยรหัสและ MAC ที่ระบุไว้ เพื่อให้เครือข่าย Thread ทํางานร่วมกันทั้ง 2 เครือข่ายได้เปลี่ยนเราเตอร์ระดับบนสุด จาก FTD Commissioner ไปเป็น FTD Joiner การดําเนินการนี้จะทําให้ RLOC16 ใหม่สําหรับเครื่องเข้าร่วม RCP (เนื่องจากรหัสเราเตอร์เปลี่ยนไปจาก 3 เป็น 46)
## FTD Joiner ## ---------------- > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 27 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
อาจต้องรอสักครู่เพื่อให้เครื่องมือเชื่อมต่อ RCP แนบกับเครื่องเข้าร่วม FTD ในฐานะผู้เผยแพร่โฆษณารายย่อย ตรวจสอบรัฐและ RLOC16 เพื่อยืนยันว่า
## RCP Joiner ## -------------- > state child > rloc16 b801
แนบข้อมูลค่าคอมมิชชันจาก FTD อีกครั้ง
เครือข่ายชุดข้อความที่มี 2 โหนดไม่ค่อยสนุก ลองนํา FTD Commissioner กลับมาออนไลน์อีกครั้ง
ใน FTD Commissioner ให้รีสตาร์ทชุดข้อความดังนี้
## FTD Commissioner ## ---------------------- > ifconfig up Done > thread start Done
ภายใน 2 นาที Google Meet จะเชื่อมต่อเครือข่าย "Codelab" เป็นอุปกรณ์อีกครั้งโดยอัตโนมัติ แล้วโปรโมตเราเตอร์
## FTD Commissioner ## ---------------------- > state router Done
ตรวจสอบตารางเราเตอร์และตารางย่อยในโปรแกรมเข้าร่วม FTD เพื่อยืนยันข้อมูลต่อไปนี้
## FTD Joiner ## ---------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 63 | 0 | 3 | 3 | 0 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 46 | 0 | 0 | 0 | 15 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 184 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
เครือข่ายชุดข้อความของเราประกอบด้วย 3 โหนดอีกครั้ง
11. การแก้ปัญหา
การจัดการเครือข่ายเทรดด้วยอุปกรณ์หลายเครื่องในเทอร์มินัลหรือหน้าต่างหน้าจอต่างๆ อาจมีความซับซ้อน เคล็ดลับเหล่านี้เพื่อ "รีเซ็ต" สถานะเครือข่ายหรือพื้นที่ทํางานหากคุณพบปัญหา
หน้าจอ
หากการกําหนดค่าของคุณหายไป (มีหน้าต่างหรือหน้าจอภายในหน้าจอมากเกินไป) ให้เก็บหน้าต่างหน้าจอต่อไปด้วยการกดแป้น Ctrl+a → k จนกว่าไม่มี และ screen -ls
ในบรรทัดคําสั่งจะเอาต์พุต No Sockets found
แล้วสร้างหน้าต่างหน้าจอใหม่สําหรับอุปกรณ์แต่ละเครื่อง ระบบจะรักษาสถานะอุปกรณ์ไว้แม้ว่าหน้าจอจะปิดอยู่ก็ตาม
โหนดชุดข้อความ
หากโทโพโลยีเครือข่ายชุดข้อความไม่ได้อธิบายใน Codelab นี้หรือโหนดถูกตัดการเชื่อมต่อด้วยเหตุผลบางอย่าง (อาจเป็นเพราะเครื่องที่ใช้ Linux เข้าสู่โหมดสลีป) ขอแนะนําให้ถอดชุดข้อความ ล้างข้อมูลรับรองเครือข่าย และเริ่มต้นอีกครั้งจาก สร้างขั้นตอนเครือข่ายชุดข้อความ
วิธีรีเซ็ต FTD
## FTD Commissioner or FTD Joiner ## ------------------------------------ > thread stop Done > ifconfig down Done > factoryreset Done
RCP จะรีเซ็ตในลักษณะเดียวกันได้ผ่าน ot-ctl
## RCP Joiner ## ---------------- > thread stop Done > ifconfig down Done > factoryreset Done
12. การใช้มัลติแคสต์
มัลติแคสต์ใช้เพื่อสื่อสารข้อมูลกับกลุ่มอุปกรณ์ได้พร้อมกัน ในเครือข่ายชุดข้อความ ระบบจะสงวนที่อยู่หนึ่งๆ ไว้สําหรับการใช้มัลติแคสต์กับกลุ่มอุปกรณ์ต่างๆ โดยขึ้นอยู่กับขอบเขต
ที่อยู่ IP6 | ขอบเขต | ส่งไปยัง |
| ลิงก์ในเครื่อง | FTD และ MED ทั้งหมด |
| ลิงก์ในเครื่อง | FTDs และ Border Routers ทั้งหมด |
| ตาข่ายภายใน | FTD และ MED ทั้งหมด |
| ตาข่ายภายใน | FTDs และ Border Routers ทั้งหมด |
เนื่องจากเราไม่ได้ใช้ Border Router ใน Codelab นี้ เราจะมาดูที่อยู่ IP แบบมัลติแคสต์ 2 แบบของ FTD และ MED กัน
ลิงก์ในเครื่อง
ขอบเขต Link-Local ประกอบด้วยอินเทอร์เฟซชุดข้อความทั้งหมดที่เข้าถึงได้โดยการส่งวิทยุครั้งเดียวหรือ "Hop" รายการเดียว โทโพโลยีเครือข่ายจะกําหนดอุปกรณ์ที่ตอบสนองต่อคําสั่ง ping ไปยังที่อยู่มัลติแคสต์ ff02::1
ใช้คําสั่ง ping ff02::1
จากFTD Commissioner:
## FTD Commissioner ## ---------------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms
มีอุปกรณ์อื่นอีก 2 เครื่องในเครือข่าย (FTD Joiner และ RCP Joiner) แต่ FTD Commissioner ได้รับการตอบกลับเพียงอันเดียวจาก Link-Local Address (LLA) ของผู้เข้าร่วม FTD ซึ่งหมายความว่า FTD Joiner คืออุปกรณ์เดียวที่ FTD Commissioner จะเข้าถึงได้ด้วยฮอพเดียว
ขณะนี้ใช้คําสั่ง ping ff02::1
จาก FTD Joiner
## FTD Joiner ## ---------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms 8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms
คําตอบ 2 ข้อ เมื่อตรวจสอบที่อยู่ IPv6 สําหรับอุปกรณ์อื่นๆ เราจะเห็นที่อยู่แรก (ลงท้ายด้วย 4b1d
) คือ LLA ของคณะกรรมาธิการของ FTD ส่วนที่อยู่ที่สอง (ลงท้ายด้วย 943b
) คือ LLA ของผู้เข้าร่วม RCP
ซึ่งหมายความว่า FTD Joiner จะเชื่อมต่อกับทั้ง FTD Commissioner และ RCP Joiner โดยตรง ซึ่งยืนยันโทโพโลยีของเรา
ตาข่ายภายใน
ขอบเขต Mesh-Local ประกอบด้วยอินเทอร์เฟซชุดข้อความทั้งหมดที่เข้าถึงได้ภายในเครือข่ายชุดข้อความเดียวกัน ดูการตอบกลับคําสั่ง ping ไปยังที่อยู่มัลติแคสต์ ff03::1
ใช้คําสั่ง ping ff03::1
จาก FTD Commissioner:
## FTD Commissioner ## ---------------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms
คราวนี้คณะกรรมาธิการของ FTD ได้รับคําตอบ 2 รายการ คือ 1 รายการจาก Locator Routing Locator (RLOC) ที่สิ้นสุดใน b800
) และ 1 รายการจาก ECP-Local EID (ML-EID) ของผู้เข้าร่วม RCP ซึ่งลงท้ายด้วย d55f
นั่นเป็นเพราะขอบเขตที่ทํางานร่วมกันภายในเครือข่ายประกอบด้วยเครือข่ายเทรดทั้งหมด ไม่ว่าอุปกรณ์จะอยู่ในเครือข่ายใด อุปกรณ์ก็จะสมัครรับข้อมูลที่อยู่ ff03::1
ใช้คําสั่ง ping ff03::1
จาก FTD Joiner เพื่อยืนยันพฤติกรรมเดียวกัน
## FTD Joiner ## ---------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms
จดเวลาตอบกลับสําหรับตัวเข้าร่วม RCP ในเอาต์พุตคําสั่ง ping ทั้ง 2 รายการ ตัวเข้าร่วม RCP ใช้เวลานานกว่าจะเข้าถึง FTD Commissioner (68 มิลลิวินาที) 4 และสูงกว่า 23 มิลลิวินาที (23 มิลลิวินาที) ทั้งนี้เพราะต้องมีการรับส่งข้อมูล 2 รอบจึงจะไปถึงคณะกรรมาธิการของ FTD เมื่อเปรียบเทียบกับตัวเข้าร่วม FTDเข้าร่วม 1 ครั้ง
คุณอาจพบว่าคําสั่ง ping แบบมัลติแคสต์แบบ Mesh-local ตอบกลับกับ RLOC สําหรับ FTD ทั้ง 2 แบบเท่านั้น แทนที่จะเป็นข้อต่อ RCP เนื่องจาก FTDs เป็นเราเตอร์ภายในเครือข่าย ในขณะที่ RCP เป็นอุปกรณ์ปลายทาง
ตรวจสอบสถานะของเครื่องเข้าร่วม RCP เพื่อยืนยันข้อมูลต่อไปนี้
## RCP Joiner ## ---------------- > state child
13. ส่งข้อความด้วย UDP
หนึ่งในบริการของแอปพลิเคชันที่ OpenThread ให้บริการคือ User Datagram Protocol (UDP) ซึ่งเป็นโปรโตคอล Transport Layer แอปพลิเคชันที่สร้างบน OpenThread สามารถใช้ UDP API เพื่อส่งข้อความระหว่างโหนดในเครือข่าย Thread หรืออุปกรณ์อื่นๆ ในเครือข่ายภายนอก (เช่น อินเทอร์เน็ตหากเครือข่าย Thread มี Border Router)
ซ็อกเก็ต UDP จะแสดงผ่าน OpenThread CLI กําหนดให้ใช้เพื่อส่งข้อความระหว่าง FTD 2 รายการ
รับที่อยู่ EID ของ Mesh-Local สําหรับ FTD Joiner เราใช้ที่อยู่นี้เพราะเข้าถึงได้จากทุกที่ภายในเครือข่ายชุดข้อความ
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
เริ่มต้น UDP และเชื่อมโยงกับซ็อกเก็ตสําหรับที่อยู่ IPv6 ใดๆ:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
เปลี่ยนเป็น FTD Commissioner เริ่ม UDP และเชื่อมต่อกับซ็อกเก็ตที่คุณตั้งค่าไว้ใน FTD Joiner โดยใช้ ML-EID ดังนี้
## FTD Commissioner ## ---------------------- > udp open Done > udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212 Done
การเชื่อมต่อ UDP ควรใช้งานได้ระหว่าง 2 โหนด ส่งข้อความจากกรรมาธิการของ FTD
## FTD Commissioner ## ---------------------- > udp send hellothere Done
ใน FTD Joiner ได้รับข้อความ UDP แล้ว
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
14. ยินดีด้วย
คุณได้สร้างเครือข่ายชุดข้อความจริงแล้ว
ตอนนี้คุณทราบแล้วว่า
- ความแตกต่างระหว่างประเภท บทบาท และขอบเขตของอุปกรณ์ในชุดข้อความ
- วิธีที่อุปกรณ์ชุดข้อความจัดการสถานะภายในเครือข่าย
- วิธีส่งข้อความแบบง่ายระหว่างโหนดโดยใช้ UDP
ขั้นตอนถัดไป
จาก Codelab นี้ ให้ลองใช้แบบฝึกหัดต่อไปนี้
- สลับกระดาน FTD Joiner เป็น MTD อีกครั้งโดยใช้ไบนารี
ot-cli-mtd
และสังเกตว่าระบบจะไม่อัปเกรดตัวเองเป็นเราเตอร์หรือพยายามเป็นผู้นํา - เพิ่มอุปกรณ์อื่นๆ (ลองใช้แพลตฟอร์มอื่น) ไปยังเครือข่ายและร่างภาพโทโพโลยีโดยใช้เราเตอร์และตารางย่อย รวมถึงใช้คําสั่ง ping ไปยังที่อยู่มัลติแคสต์
- ใช้ pyspinel เพื่อควบคุม NCP
- แปลง NCP เป็น Border Router โดยใช้ OpenThread Border Router และเชื่อมต่อเครือข่าย Thread กับอินเทอร์เน็ต
อ่านเพิ่มเติม
โปรดดูแหล่งข้อมูล Openthread.io และ GitHub สําหรับแหล่งข้อมูลต่างๆ ของ OpenThread ได้แก่
- แพลตฟอร์มที่รองรับ - ดูแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread - รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและกําหนดค่า OpenThread
- Thread Primer — ครอบคลุมแนวคิดของชุดข้อความทั้งหมดใน Codelab นี้
ข้อมูลอ้างอิง: