สร้างเครือข่ายเทรดด้วยกระดาน nRF52840 และ OpenThread

1. บทนำ

26b7f4f6b3ea0700

OpenThread ที่ Google เปิดตัวเป็นการใช้งานโปรโตคอลเครือข่าย Thread® แบบโอเพนซอร์ส Google Nest ได้เปิดตัว OpenThread เพื่อให้นักพัฒนาซอฟต์แวร์ใช้เทคโนโลยีในผลิตภัณฑ์ Nest ได้ในวงกว้าง เพื่อเร่งการพัฒนาผลิตภัณฑ์สําหรับบ้านที่เชื่อมต่อ

ข้อมูลจําเพาะของเทรดกําหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์ระหว่างอุปกรณ์ที่เชื่อถือได้และเชื่อถือได้ของ IPv6 สําหรับแอปพลิเคชันภายในบ้าน OpenThread ใช้เลเยอร์เครือข่ายเทรดทั้งหมด รวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีการรักษาความปลอดภัย MAC, การสร้าง Mesh Link และการกําหนดเส้นทาง Mesh

ใน Codelab นี้ คุณจะจัดตั้งโปรแกรม OpenThread ในฮาร์ดแวร์จริง สร้างและจัดการเครือข่ายเทรด และส่งข้อความระหว่างโหนดได้

4806d16a8c137c6d.jpeg

สิ่งที่คุณจะได้เรียนรู้

  • การสร้างและไบนารีไบนารีของ OpenThread CLI ไปยังบอร์ด dev
  • การสร้าง RCP ซึ่งประกอบด้วยเครื่อง Linux และ Devboard
  • การสื่อสารด้วย RCP โดยใช้ OpenThread Daemon และ ot-ctl
  • จัดการโหนดเทรดด้วยตนเองด้วยหน้าจอ GNU และ OpenThread CLI
  • การรักษาความปลอดภัยของอุปกรณ์ในเครือข่าย Thread
  • วิธีการทํางานของมัลติแคสต์ของ IPv6
  • การส่งข้อความระหว่างโหนดเทรดด้วย UDP

สิ่งที่ต้องมี

ฮาร์ดแวร์:

  • แผงพัฒนานอร์ดิกเซมิคอนดักเตอร์ 3 เครื่อง nRF52840 dev boards
  • สายเชื่อม USB กับไมโคร USB 3 เส้นเพื่อเชื่อมต่อบอร์ด
  • เครื่อง Linux ที่มีพอร์ต USB อย่างน้อย 3 พอร์ต

ซอฟต์แวร์:

  • เครื่องมือ GNU
  • เครื่องมือบรรทัดคําสั่ง nRF5x ของนอร์ดิก
  • ซอฟต์แวร์ Segger J-Link
  • OpenThread
  • Git

2. เริ่มต้นใช้งาน

การจําลองชุดข้อความแบบเปิด

ก่อนเริ่มต้น คุณอาจลองเรียกใช้ OpenThread Simulation Codelab เพื่อทําความคุ้นเคยกับแนวคิดพื้นฐานของเทรดและ OpenThread CLI

เทอร์มินัลพอร์ตอนุกรม

คุณควรทําความคุ้นเคยกับวิธีเชื่อมต่อกับพอร์ตอนุกรมผ่านเทอร์มินัล Codelab นี้ใช้หน้าจอ GNU และให้ภาพรวมการใช้งาน แต่สามารถใช้ซอฟต์แวร์เทอร์มินัลอื่นได้

เครื่อง Linux

Codelab นี้ออกแบบมาให้ใช้เครื่อง Linux ที่ใช้ i386 หรือ x86 เป็นโฮสต์ให้กับอุปกรณ์ Thread Co-Processor (RCP) และใช้ Flash Board ทั้งหมด ทดสอบทุกขั้นตอนใน Ubuntu 14.04.5 LTS (Trusty Tahr)

บอร์ด Nordic Semiconductor nRF52840

Codelab นี้ใช้บอร์ด PDR nRF52840 3 แผง

a6693da3ce213856.png

เราใช้ 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 ใช้ในการสร้าง

เราขอแนะนําให้วางที่เก็บถาวรที่แยกไว้ใน /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ บนเครื่อง Linux ทําตามวิธีการในไฟล์ readme.txt ของที่เก็บถาวรเพื่อดูวิธีการติดตั้ง

ติดตั้งหน้าจอ (ไม่บังคับ)

Screen เป็นเครื่องมือง่ายๆ ในการเข้าถึงอุปกรณ์ที่เชื่อมต่อด้วยพอร์ตอนุกรม Codelab นี้ใช้หน้าจอ แต่คุณสามารถเลือกใช้แอปพลิเคชันพอร์ตพอร์ตใดก็ได้ที่ต้องการ

$ sudo apt-get install screen

3. ทําสําเนาที่เก็บ

OpenThread

โคลนและติดตั้ง OpenThread คําสั่ง script/bootstrap โปรดตรวจสอบว่าติดตั้งเครื่องมือเชนแล้ว และมีการกําหนดค่าสภาพแวดล้อมอย่างเหมาะสม

$ 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 ด้วยตัวเชื่อมและฟังก์ชัน 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

ไปที่ไดเรกทอรีที่มีไบนารี OpenThread RCP และแปลงเป็นรูปแบบฐาน 16

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex

เสียบสาย USB กับพอร์ตแก้ไขข้อบกพร่อง Micro-USB ถัดจากหมุดไฟฟ้าภายนอกบนบอร์ด nRF52840 แล้วเสียบเข้ากับเครื่อง Linux ตั้งค่าสวิตช์แหล่งพลังงาน nRF บนบอร์ด nRF52840 เป็น VDD เมื่อเชื่อมต่ออย่างถูกต้อง LED5 เปิดอยู่

20a3b4b480356447.png

หากนี่เป็นกระดานแรกที่ติดอยู่กับเครื่อง Linux บอร์ดนี้จะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM0 (บอร์ด nRF52840 ทั้งหมดใช้ ttyACM สําหรับตัวระบุพอร์ตอนุกรม)

$ ls /dev/ttyACM*
/dev/ttyACM0

ศึกษาหมายเลขซีเรียลของกระดาน nRF52840 ที่ใช้สําหรับ RCP

c00d519ebec7e5f0.jpeg

ไปที่ตําแหน่งของเครื่องมือบรรทัดคําสั่ง nRFx และเปิดไฟล์เลขฐานสิบหกของ 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 ดั้งเดิมเป็นการส่งแบบอนุกรมได้

ถอดปลายด้านไมโคร USB ของสาย USB ออกจากพอร์ตการแก้ไขข้อบกพร่องของบอร์ด nRF52840 ที่มี Flash แล้วเสียบเข้ากับพอร์ต nRF USB ไมโคร USB ข้างปุ่มรีเซ็ต ตั้งค่าสวิตช์แหล่งพลังงาน nRF เป็น USB

ขนาด 46e7b670d2464842

เริ่ม OpenThread Daemon

ในการออกแบบ RCP ให้ใช้ OpenThread Daemon เพื่อสื่อสารและจัดการอุปกรณ์เทรด เริ่มต้น ot-daemon ด้วยแฟล็กแบบละเอียดของ -v เพื่อให้คุณดูเอาต์พุตของบันทึกและยืนยันใช้งานได้

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'

เมื่อสําเร็จ 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

เปิดหน้าต่างเทอร์มินัลนี้ทิ้งไว้เพื่อให้ดูบันทึกจาก ot-daemon ได้

ใช้ ot-ctl เพื่อสื่อสารกับโหนด RCP ot-ctl ใช้ CLI เดียวกันกับแอป OpenThread CLI คุณจึงควบคุมโหนด ot-daemon ในลักษณะเดียวกันกับอุปกรณ์อื่นๆ ของเทรดจําลอง

ในหน้าต่างเทอร์มินัลที่สอง ให้เริ่ม ot-ctl:

$ sudo ./build/posix/src/posix/ot-ctl
>

ตรวจสอบ state ของโหนด 2 (โหนด RCP) ที่คุณเริ่มต้นด้วย ot-daemon

> state
disabled
Done

5. ตั้งค่า FTD

โหนดเทรดอีก 2 รายการที่ใช้สําหรับ Codelab นี้คือ Full Thread Devices (FTD) ในการออกแบบ System-on-Chip (SoC) มาตรฐาน ในการตั้งค่าเวอร์ชันที่ใช้งานจริง ผู้ใช้อาจใช้ wpantund ซึ่งเป็นไดรเวอร์อินเทอร์เฟซเครือข่ายระดับที่ใช้งานจริงเพื่อควบคุมอินสแตนซ์ OpenThread 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

ไปที่ไดเรกทอรีที่มีไบนารี OpenThread Full Thread Device (FTD) CLI และแปลงเป็นรูปแบบเลขฐานสิบหกโดยทําดังนี้

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex

เสียบสาย USB เข้ากับพอร์ตไมโคร USB ข้างหมุดไฟฟ้าภายนอกบนบอร์ด nRF52840 แล้วเสียบเข้ากับเครื่อง Linux หาก RCP ยังต่อเชื่อมอยู่กับเครื่อง Linux กระดานใหม่ควรจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM1 (บอร์ด nRF52840 ทั้งหมดใช้ ttyACM เป็นตัวระบุพอร์ตอนุกรม)

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1

ดังเช่นก่อนหน้านี้ โปรดทราบว่าหมายเลขซีเรียลของบอร์ด nRF52840 ที่ใช้สําหรับ FTD

c00d519ebec7e5f0.jpeg

เลื่อนตําแหน่งเครื่องมือบรรทัดคําสั่ง 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

ติดป้ายกํากับกระดาน "Commissioner."

เชื่อมต่อกับ USB ของระบบ

คุณต้องใช้พอร์ต nRF USB บนบอร์ด nRF52840 เพื่อสื่อสารกับโฮสต์ RCP (เครื่อง Linux) เนื่องจากบิลด์ OpenThread FTD จะช่วยให้ใช้ USB CDC ACM ดั้งเดิมเป็นการส่งแบบอนุกรมได้

ถอดปลายด้านไมโคร USB ของสาย USB ออกจากพอร์ตการแก้ไขข้อบกพร่องของบอร์ด nRF52840 ที่มี Flash แล้วเสียบเข้ากับพอร์ต nRF USB ไมโคร USB ข้างปุ่มรีเซ็ต ตั้งค่าสวิตช์แหล่งพลังงาน nRF เป็น USB

ขนาด 46e7b670d2464842

ยืนยันบิลด์

ยืนยันบิลด์ที่สําเร็จโดยเข้าถึง 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 เพื่อตัดการเชื่อมต่อจากหน้าจอ CLI ของ FTD Commissioner และกลับไปที่เทอร์มินัล 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

ทําตามขั้นตอนข้างต้นซ้ําเพื่อติดกระดาน nRF52840 ที่ 3 โดยใช้บิลด์ ot-cli-ftd.hex ที่มีอยู่ เมื่อเสร็จแล้ว อย่าลืมเชื่อมต่อบอร์ดกับพีซีอีกครั้งโดยใช้พอร์ต USB nRF และตั้งค่าแหล่งพลังงาน nRF เป็น VDD

หากมีโหนดอีก 2 โหนดแนบอยู่กับเครื่อง Linux เมื่อต่อเชื่อมแผงที่ 3 นี้ โหนดดังกล่าวจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM2

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2

ติดป้ายกํากับกระดาน "เครื่องมือเข้าร่วม"

เมื่อยืนยันโดยใช้หน้าจอแทนการสร้างอินสแตนซ์ใหม่ของหน้าจอจากบรรทัดคําสั่ง ให้แนบเข้ากับอินสแตนซ์ที่มีอยู่อีกครั้ง แล้วสร้างหน้าต่างใหม่ภายในโฟลเดอร์ (ที่คุณใช้สําหรับ FTD Commissioner) ดังนี้

$ screen -r

สร้างหน้าต่างใหม่ภายในหน้าจอด้วย Ctrl+a → c

พรอมต์บรรทัดคําสั่งใหม่จะปรากฏขึ้น เข้าถึง OpenThread CLI สําหรับเครื่องมือเข้าร่วม FTD:

$ screen /dev/ttyACM2 115200

ในหน้าต่างใหม่ ให้กด "กลับ" บนแป้นพิมพ์ 2-3 ครั้งเพื่อให้ข้อความ OpenThread CLI > ปรากฏขึ้น เปิดอินเทอร์เฟซ IPv6 และตรวจสอบที่อยู่

> ifconfig up
Done
> ipaddr
fe80:0:0:0:6c1e:87a2:df05:c240
Done

เมื่อ FTDข้อต่อ CLI อยู่ในหน้าจอเดียวกันกับ FTD Commissioner คุณสามารถสลับใช้ Ctrl+a → n ได้

ใช้ Ctrl+a →

d ออกจากหน้าจอได้ทุกเมื่อ

6. การตั้งค่าหน้าต่างเทอร์มินัล

นับจากนี้เป็นต้นไป คุณจะต้องสลับไปมาระหว่างอุปกรณ์เทรดเป็นประจํา ดังนั้น โปรดตรวจสอบว่าอุปกรณ์ทุกเครื่องพร้อมทํางานและเข้าถึงได้ง่าย ปัจจุบันเราใช้หน้าจอเพื่อเข้าถึง FTD ทั้ง 2 รายการ และเครื่องมือนี้ยังอนุญาตให้แบ่งหน้าจอในหน้าต่างเทอร์มินัลเดียวกันได้ด้วย ใช้อาร์กิวเมนต์นี้เพื่อดูว่าโหนด 1 โหนดตอบสนองต่อคําสั่งที่ออกในโหนดอื่นอย่างไร

ตามหลักแล้ว คุณควรจะมีหน้าต่าง 4 บานที่พร้อมใช้งาน ได้แก่

  1. บริการ / บันทึก ot-daemon
  2. ตัวเชื่อม RCP ผ่าน ot-ctl
  3. FTD Commissioner ผ่าน OpenThread CLI
  4. ตัวเชื่อม FTD ผ่าน OpenThread CLI

หากต้องการใช้การกําหนดค่าหรือเครื่องมือเทอร์มินัล / ซีเรียลของคุณเอง ให้ข้ามไปยังขั้นตอนถัดไป กําหนดค่าหน้าต่างเทอร์มินัลสําหรับอุปกรณ์ทั้งหมดในรูปแบบที่เหมาะกับคุณที่สุด

การใช้หน้าจอ

เริ่มใช้งานได้ง่ายๆ เพียงเซสชันเดียวเพื่อให้ใช้งานได้ง่าย คุณควรมีขั้นตอนการตั้งค่าอยู่แล้วตอนตั้งค่า FTD ทั้ง 2 รายการ

คําสั่งทั้งหมดบนหน้าจอจะขึ้นต้นด้วย Ctrl+a

คําสั่งพื้นฐานสําหรับหน้าจอ:

แนบกับเซสชันหน้าจออีกครั้ง (จากบรรทัดคําสั่ง)

screen -r

ออกจากเซสชันหน้าจอ

Ctrl+a → d

สร้างหน้าต่างใหม่ภายในเซสชันหน้าจอ

Ctrl+a → c

สลับไปมาระหว่างหน้าต่างในเซสชันหน้าจอเดียวกัน

Ctrl+a → n (ไปข้างหน้า)Ctrl+a → p (กลับ)

ปิดหน้าต่างปัจจุบันในเซสชันหน้าจอ

Ctrl+a → k

แยกหน้าจอ

สําหรับหน้าจอ คุณสามารถแยกเทอร์มินัลออกเป็นหลายหน้าต่างได้ ดังนี้

f1cbf1258cf0a5a.png

เข้าถึงคําสั่งใน screen ได้โดยใช้ Ctrl+a ทุกคําสั่งควรเริ่มต้นด้วยคอมโบคีย์การเข้าถึงนี้

หากคุณติดตาม Codelab ทุกประการ คุณควรมี 2 หน้าต่าง (FTD Commissioner, FTDเครื่องมือเชื่อม) ในอินสแตนซ์หน้าจอเดียวกัน หากต้องการแบ่งหน้าจอระหว่างทั้ง 2 อย่างนี้ ให้ป้อนเซสชันหน้าจอที่มีอยู่ก่อน โดยทําดังนี้

$ screen -r

คุณควรใช้อุปกรณ์ FTD เครื่องใดเครื่องหนึ่ง ทําตามขั้นตอนต่อไปนี้ในหน้าจอ

  1. Ctrl+a → S เพื่อแบ่งหน้าต่างในแนวนอน
  2. Ctrl+a → Tab เพื่อย้ายเคอร์เซอร์ไปที่หน้าต่างใหม่ที่ว่างเปล่า
  3. Ctrl+a → n เพื่อเปลี่ยนหน้าต่างใหม่ไปยังหน้าต่างถัดไป
  4. หากเหมือนกับหน้าต่างด้านบน ให้กด 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 → c

แยกหน้าต่างในแนวตั้ง

Ctrl+a →

แยกหน้าต่างในแนวนอน

Ctrl+a → S

ข้ามไปยังหน้าต่างที่แสดงถัดไป

Ctrl+a → Tab

สลับหน้าต่างที่แสดงไปด้านหน้าหรือด้านหลัง

Ctrl+a → n หรือ p

เปลี่ยนชื่อหน้าต่างปัจจุบัน

Ctrl+a → A

ออกจากหน้าจอได้ทุกเมื่อด้วย Ctrl+a → d และเชื่อมต่อกับ screen -r อีกครั้งจากบรรทัดคําสั่ง

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับหน้าจอ โปรดดูที่ข้อมูลอ้างอิงด่วนของหน้าจอ GNU

7. สร้างเครือข่ายเทรด

เมื่อกําหนดค่าหน้าต่างและหน้าจอเทอร์มินัลทั้งหมดแล้ว เราจะมาสร้างเครือข่ายเทรดของเรากัน ใน FTD Commissioner ให้สร้างชุดข้อมูลการดําเนินการใหม่และคอมมิตว่าเป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลในการดําเนินการคือการกําหนดค่าสําหรับเครือข่ายเทรดที่คุณสร้าง

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

รอสักครู่แล้วตรวจสอบสถานะของอุปกรณ์ ควรเป็นผู้นํา และเรียกดู RLSAOC16 เพื่อใช้อ้างอิงในอนาคต

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

## RCP Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

จาก OpenThread CLI บน FTDเครื่องมือเชื่อมต่อ ให้ทําดังนี้

## FTD Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

หากเครือข่าย "codelab" เครือข่าย'ไม่ปรากฏในรายการ ให้ลองสแกนอีกครั้ง

8. เพิ่มตัวเชื่อม RCP

การใช้การจัดชุดข้อความไม่ทํางานในเครือข่าย ซึ่งหมายความว่าเราจะต้องเพิ่มตัวเชื่อม RCP ลงในเครือข่ายเทรดที่เราเพิ่งสร้างขึ้นโดยใช้กระบวนการกําหนดนอกขอบเขต

ในคณะกรรมการ FTD เราได้จดบันทึกเกี่ยวกับคีย์เครือข่ายไว้ เช่น 1234c0de7ab51234c0de7ab51234c0de หากต้องการค้นหาคีย์เครือข่ายอีกครั้ง ให้เรียกใช้คําสั่งต่อไปนี้บน FTD Commissioner

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

ถัดไป ในตัวเชื่อม RCP ให้ตั้งค่าคีย์เครือข่ายชุดข้อมูลที่ใช้งานอยู่เป็นคีย์เครือข่ายค่าคอมมิชชัน FTD

## RCP Joiner ##
----------------

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

ตรวจสอบชุดข้อมูลว่าได้ตั้งค่าไว้อย่างถูกต้อง

## RCP Joiner ##
----------------

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

เรียกใช้ชุดข้อความเพื่อให้ตัวเชื่อม RCP เข้าร่วมเครือข่าย "codelab" รอสักครู่ ตรวจดูสถานะ RSAOC16 และที่อยู่ IPv6 ของอุปกรณ์ ดังนี้

## RCP Joiner ##
----------------

> ifconfig up
Done
> 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 ของ IPv6 ไว้ในเครื่อง (fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f ที่นี่) ซึ่งคุณจะใช้ในภายหลัง

กลับไปที่คณะกรรมการ FTD แล้วตรวจสอบตารางเราเตอร์และย่อยเพื่อยืนยันว่าอุปกรณ์ทั้งสองเป็นส่วนหนึ่งของเครือข่ายเดียวกัน ใช้ RLSAOC16 เพื่อระบุเครื่องมือเชื่อม 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&#39) เพื่อยืนยันการเชื่อมต่อ

## 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 โหนด ซึ่งแสดงให้เห็นโดยแผนภาพโทโพโลยีนี้

otcodelab_top01C_2โหนด

แผนภาพโทโพโลยี

ขณะที่คุณศึกษาส่วนที่เหลือของ Codelab เราจะแสดงแผนภาพโทโพโลยีชุดข้อความใหม่เมื่อใดก็ตามที่เครือข่ายมีการเปลี่ยนแปลง บทบาทโหนดจะมีการแสดงดังต่อไปนี้

b75a527be4563215.png

เราเตอร์จะเป็นรูปห้าเหลี่ยมเสมอ และอุปกรณ์ที่สิ้นสุดก็มักจะเป็นวงกลม ตัวเลขในแต่ละโหนดแสดงรหัสเราเตอร์หรือรหัสย่อยที่แสดงในเอาต์พุต CLI โดยขึ้นอยู่กับบทบาทและสถานะปัจจุบันของโหนดแต่ละรายการ

9. ค่าคอมมิชชันเครื่องมือเชื่อมแบบ FTD

ตอนนี้มาเพิ่มอุปกรณ์เทรดที่ 3 ลงในเครือข่าย "codelab" ครั้งนี้เราจะใช้ขั้นตอนค่าคอมมิชชัน (In-Band) ที่ปลอดภัยกว่าและอนุญาตให้เฉพาะผู้ที่เข้าร่วม FTD เข้าร่วมเท่านั้น

ในเครื่องมือเชื่อมต่อ FTD ให้เลือก eui64 เพื่อให้ FTD Commissioner สามารถระบุได้

## FTD Joiner ##
----------------

> eui64
2f57d222545271f1
Done

ใน FTD Commissioner ให้เริ่มค่าคอมมิชชันและระบุ eui64 ของอุปกรณ์ที่เข้าร่วมได้พร้อมข้อมูลเข้าสู่ระบบของผู้เข้าร่วม เช่น J01NME ข้อมูลเข้าสู่ระบบของสตริงเป็นสตริงเฉพาะอุปกรณ์ที่ประกอบด้วยอักขระที่เป็นตัวอักษรพิมพ์เล็กและตัวเลขคละกันทั้งหมด (0-9 และ A-Y ยกเว้น I, O, Q และ Z) มีความยาวระหว่าง 6 ถึง 32 อักขระ

## FTD Commissioner ##
----------------------

> commissioner start
Done
> commissioner joiner add 2f57d222545271f1 J01NME
Done

เปลี่ยนไปใช้ตัวเชื่อม FTD เริ่มต้นบทบาทผู้ผนวกด้วยข้อมูลเข้าสู่ระบบของผู้ที่เพิ่งตั้งค่าใน FTD Commissioner

## FTD Joiner ##
----------------

> ifconfig up
Done
> joiner start J01NME
Done

ภายในเวลาประมาณ 1 นาที คุณจะได้รับการยืนยันการตรวจสอบสิทธิ์ที่เสร็จสมบูรณ์ ดังนี้

## FTD Joiner ##
----------------

>
Join success

แสดงชุดข้อความเพื่อให้ตัวเชื่อม FTD เข้าร่วมเครือข่าย "codelab" และตรวจสอบสถานะและ RSAOC16 ทันที

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

ตัวเชื่อม FTD ได้เชื่อมต่อเครือข่ายในฐานะอุปกรณ์ End Screen (ย่อย) ตาม RSAOC16 โทโพโลยีที่อัปเดตของเรามีดังนี้

otcodelab_top01C_ed01

10. การทํางานของชุดข้อความ

อุปกรณ์เทรดใน Codelab นี้เป็นอุปกรณ์เทรดเต็มรูปแบบ (FTD) ประเภทหนึ่งที่เรียกว่า End Screen สําหรับอุปกรณ์ที่มีสิทธิ์ (REED) ของเราเตอร์ ซึ่งหมายความว่าอุปกรณ์เหล่านี้จะทํางานเป็นเราเตอร์หรืออุปกรณ์ปลายทาง และโปรโมตตนเองจากผู้ใช้ปลายทางเป็นเราเตอร์ได้

เทรดรองรับเราเตอร์ได้สูงสุด 32 รายการ แต่พยายามเก็บจํานวนเราเตอร์ไว้ระหว่าง 16 ถึง 23 หาก REED แนบเป็นอุปกรณ์ต่อพ่วง (เด็ก) และจํานวนเราเตอร์ต่ํากว่า 16 หลังจากช่วงเวลาแบบสุ่มภายใน 2 นาที ระบบจะโปรโมตตัวเองไปยังเราเตอร์โดยอัตโนมัติ

หากคุณมีบุตรหลาน 2 คนในเครือข่ายชุดข้อความหลังจากเพิ่มตัวเชื่อม FTD ให้รออย่างน้อย 2 นาที แล้วตรวจสอบตารางเราเตอร์และย่อยอีกครั้งในค่าคอมมิชชัน FTD ดังนี้

## 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 (MAC แบบขยาย = e6cdd2d93249a243) ได้โปรโมตตัวเองในเราเตอร์ โปรดทราบว่า เมื่ออุปกรณ์เปลี่ยนจาก "อุปกรณ์" เป็น "เราเตอร์" รหัสเราเตอร์และค่ารหัสรายย่อยก็จะเปลี่ยนแปลงเช่นกัน ดังนั้น {/7}

otcodelab_top01C.png

ยืนยันสถานะใหม่และ RLSAOC16 บนตัวเชื่อม FTD ดังนี้

## FTD Joiner ##
----------------

> state
router
Done
> rloc16
b800
Done

ดาวน์เกรดตัวเชื่อม FTD

คุณทดสอบลักษณะการทํางานนี้ได้โดยดาวน์เกรดเครื่องมือเชื่อมต่อ FTD ด้วยตนเองจากเราเตอร์กลับไปเป็นอุปกรณ์ปลายทาง เปลี่ยนสถานะเป็นผู้เผยแพร่โฆษณาย่อยและตรวจสอบ RSAOC16 โดยทําดังนี้

## FTD Joiner ##
----------------

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02

จากนั้นใน FTD Commissioner เครื่องมือเข้าร่วม FTD จะปรากฏในตารางย่อย (รหัส = 3) และอาจแสดงทั้ง 2 รูปแบบขณะที่ระบบเปลี่ยนแปลง

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

หลังจากผ่านไปสักครู่ เราเตอร์จะเปลี่ยนกลับเป็นเราเตอร์ที่มี VROC ของ b800

otcodelab_top01C.png

นําผู้นําออก

ผู้นําเลือกตัวเองจากเราเตอร์เทรดทั้งหมด ซึ่งหมายความว่าเมื่อผู้นําปัจจุบันถูกนําออกจากเครือข่ายเทรด เราเตอร์อื่นๆ จะกลายเป็นเราเตอร์ใหม่

ใน FTD Commissioner ให้ปิด "ชุดข้อความ" เพื่อนําออกจากเครือข่ายเทรด

## FTD Commissioner ##
----------------------

> thread stop
Done
> ifconfig down
Done

ผู้ผนวก FTD จะเป็นผู้นําชุดข้อความใหม่ภายใน 2 นาที ตรวจสอบสถานะและที่อยู่ 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

otcodelab_top02C_01

โปรดตรวจสอบตารางย่อย ขอแจ้งให้ทราบว่ามี RSAOC16 ใหม่ นี่คือตัวเชื่อม RCP ตามที่ระบุไว้โดยรหัสและ MAC แบบขยาย เพื่อรักษาเครือข่ายเทรดไว้ด้วยกัน เราเตอร์ได้เปลี่ยนเราเตอร์ระดับบนสุด จากค่าคอมมิชชัน FTD ไปเป็นตัวเชื่อม FTD การดําเนินการนี้จะส่งผลให้เกิด RSAOC16 ใหม่สําหรับตัวเชื่อม 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

คุณอาจต้องรอสัก 2-3 นาทีเพื่อให้ตัวเชื่อม RCP แนบไปกับตัวเชื่อม FTD ในฐานะเด็ก ตรวจสอบสถานะและ RSAOC16 เพื่อยืนยันว่า

## RCP Joiner ##
--------------

> state
child
> rloc16
b801

เชื่อมต่อ FTD Commissioner อีกครั้ง

เครือข่ายเทรดที่มี 2 โหนดไม่ใช่เรื่องสนุก มาทําให้ FTD Commissioner กลับมาออนไลน์อีกครั้ง

ใน FTD Commissioner ให้รีสตาร์ทชุดข้อความโดยทําดังนี้

## FTD Commissioner ##
----------------------

> ifconfig up
Done
> thread start
Done

ภายใน 2 นาที อุปกรณ์จะต่อเข้ากับเครือข่าย "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

otcodelab_top02C_02

เครือข่ายชุดข้อความของเรามีโหนด 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. การใช้มัลติแคสต์

มัลติแคสต์ใช้สําหรับสื่อสารข้อมูลไปยังกลุ่มอุปกรณ์พร้อมกัน ในเครือข่ายเทรด อีเมลที่เจาะจงจะสงวนไว้สําหรับใช้มัลติแคสต์กับกลุ่มอุปกรณ์ต่างๆ โดยขึ้นอยู่กับขอบเขต

ที่อยู่ IPv6

ขอบเขต

ส่งไปที่

ff02::1

ลิงก์-ท้องถิ่น

FTD และ MED ทั้งหมด

ff02::2

ลิงก์-ท้องถิ่น

FTD และเราเตอร์ Border ทั้งหมด

ff03::1

Mesh-Local

FTD และ MED ทั้งหมด

ff03::2

Mesh-Local

FTD และเราเตอร์ Border ทั้งหมด

เนื่องจากเราไม่ได้ใช้เราเตอร์ Border ใน Codelab นี้ เรามามุ่งเน้นที่ที่อยู่สําหรับการส่ง FTD และ MED ทั้ง 2 รายการกัน

ขอบเขตลิงก์ท้องถิ่นประกอบด้วยอินเทอร์เฟซเทรดทั้งหมดที่เข้าถึงได้ด้วยการส่งข้อมูลทางวิทยุเดียว หรือ "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 และตัวเชื่อม RCP) แต่ค่าคอมมิชชัน FTD ได้รับการตอบสนองเพียง 1 ครั้งจากที่อยู่ลิงก์ในพื้นที่ของ FTD และฐานข้อมูล LLA ซึ่งหมายความว่าเครื่องมือเชื่อม FTD เป็นอุปกรณ์เดียวที่ FTD Commissioner เข้าถึงได้ในฮอพเดียว

otcodelab_top02C_02_LL.png

ขณะนี้ใช้คําสั่ง ping ff02::1 จาก FTDเครื่องมือเชื่อม:

## 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) เป็น FTD Commissioner' SLA และที่ 2 (ลงท้ายด้วย 943b) คือ LCP Worker' LLA

otcodelab_top02C_02_LL02

ซึ่งหมายความว่าเครื่องมือเชื่อมต่อ FTD จะเชื่อมต่อกับทั้ง FTD Commissioner และผู้เข้าร่วม RCP โดยตรง ซึ่งจะยืนยันโทโพโลยีของเรา

Mesh-Local

ขอบเขต 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 Commissioner ได้รับคําตอบ 2 รายการ คําตอบหนึ่งมาจาก FTD Reader's Routing Locator (DLOC, ลงท้ายด้วย b800) และคําตอบจาก RCPคําเชื่อม 's Mesh-Local EID (ML-EID ที่ลงท้ายด้วย d55f) นั่นเป็นเพราะขอบเขตภายในของ Mesh ประกอบด้วยเครือข่ายเทรดทั้งหมด ไม่ว่าอุปกรณ์จะอยู่ในเครือข่ายใด อุปกรณ์จะสมัครรับข้อมูลตามที่อยู่ ff03::1

otcodelab_top02C_02_ML.png

ใช้คําสั่ง ping ff03::1 จาก FTDเครื่องมือเชื่อมต่อ เพื่อยืนยันลักษณะการทํางานเดียวกัน

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

otcodelab_top02C_02_LL02

บันทึกเวลาตอบกลับสําหรับเครื่องมือเชื่อมต่อ RCP ในเอาต์พุต ping ทั้ง 2 เอาต์พุต ตัวเข้าร่วม RCP ใช้เวลานานกว่ามากในการเข้าถึง FTD Commissioner (68 มิลลิวินาที) เมื่อเทียบกับผู้เข้าร่วม FTD (23 มิลลิวินาที) และนั่นก็เพราะว่าต้องเดินทางไปยัง FTD Commissioner จํานวน 2 ครั้ง แทนที่จะเป็น 1 ครั้งสําหรับตัวเข้าร่วม FTD

นอกจากนี้ คุณยังอาจสังเกตเห็นว่าคําสั่ง ping สําหรับมัลติแคสต์แบบ Mesh-local ตอบสนองด้วย RSAOC เฉพาะสําหรับ FTD 2 รายการเท่านั้น ไม่ใช่เครื่องมือเชื่อม RCP เนื่องจาก FTD คือเราเตอร์ในเครือข่าย ในขณะที่ RCP เป็นอุปกรณ์ปลายทาง

ตรวจสอบสถานะของตัวเชื่อม RCP เพื่อยืนยัน

## RCP Joiner ##
----------------

> state
child

13. ส่งข้อความด้วย UDP

บริการแอปพลิเคชันหนึ่งที่ OpenThread มีให้คือ User Datagram Protocol (UDP) ซึ่งเป็นโปรโตคอล Transport Layer แอปพลิเคชันที่สร้างใน OpenThread อาจใช้ UDP API เพื่อส่งข้อความระหว่างโหนดในเครือข่ายเทรด หรือไปยังอุปกรณ์อื่นๆ ในเครือข่ายภายนอกได้ (เช่น อินเทอร์เน็ต หากเครือข่ายเทรดมีเราเตอร์ Border)

ซ็อกเก็ต UDP ถูกเปิดเผยผ่าน OpenThread CLI มาใช้ส่งอีเมลระหว่าง FTD ทั้ง 2 รายการ

รับที่อยู่ EID ภายในเครื่องสําหรับตัวเชื่อม FTD เราใช้ที่อยู่นี้เพราะเข้าถึงได้ทุกที่ภายในเครือข่ายเทรด

## 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 โดยใช้ 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

ได้รับข้อความ UDP ในเครื่องมือเชื่อมต่อ FTD แล้ว

## FTD Joiner ##
----------------

> 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere

14. ยินดีด้วย

คุณได้สร้างเครือข่ายเทรดจริงแล้ว

b915c433e7027cc7.png

ตอนนี้คุณทราบประเด็นต่อไปนี้แล้ว

  • ความแตกต่างระหว่างประเภทอุปกรณ์ บทบาท และขอบเขตของเทรด
  • วิธีที่อุปกรณ์เทรดจัดการสถานะภายในเครือข่าย
  • วิธีส่งข้อความง่ายๆ ระหว่างโหนดโดยใช้ UDP

ขั้นตอนถัดไป

ลองทําแบบฝึกหัดต่อไปนี้จาก Codelab นี้

  • หวนกลับมาเป็นคณะกรรมการของ FTD อีกครั้งในฐานะ MTD โดยใช้ไบนารี ot-cli-mtd และสังเกตว่าจะไม่อัปเกรดตัวเองเป็นเราเตอร์หรือพยายามเป็นผู้นํา
  • เพิ่มอุปกรณ์ (ลองใช้แพลตฟอร์มอื่น) กับเครือข่ายและร่างแบบโทโพโลยีโดยใช้ตารางเราเตอร์และตารางย่อย พร้อมกับคําสั่ง ping ไปยังที่อยู่มัลติแคสต์
  • ใช้ pyspinel เพื่อควบคุม NCP
  • แปลง NCP เป็นเราเตอร์ Border โดยใช้ OpenThread Border Router และเชื่อมต่อเครือข่ายเทรดกับอินเทอร์เน็ต

อ่านเพิ่มเติม

ไปที่ openthread.io และ GitHub เพื่อดูแหล่งข้อมูล OpenThread ที่หลากหลาย ซึ่งรวมถึงรายการต่อไปนี้

  • แพลตฟอร์มที่รองรับ — สํารวจแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
  • สร้าง OpenThread - รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและการกําหนดค่า OpenThread
  • Thread Primer - ครอบคลุมแนวคิดเทรดทั้งหมดที่แสดงใน Codelab นี้

ข้อมูลอ้างอิง: