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

1. บทนำ

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

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

  • การสร้างและกะพริบไบนารี 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 กระดาน

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 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 จะเปิดอยู่

20a3b4b480356447.png

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

$ ls /dev/ttyACM*
/dev/ttyACM0

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

c00d519ebec7e5f0.jpeg

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

46e7b670d2464842.png

เริ่ม 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 มีดังนี้

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

ติดป้ายกํากับกระดาน "คอมมิชชัน"

เชื่อมต่อกับ USB ที่มาพร้อมเครื่อง

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

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

46e7b670d2464842.png

ยืนยันบิลด์

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

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

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

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

เริ่มเซสชันหน้าจอเพียง 1 เซสชันเพื่อให้ใช้งานได้ง่าย คุณควรกําหนดค่านี้ไว้แล้วเมื่อตั้งค่า 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 Joiner) บนอินสแตนซ์หน้าจอเดียวกัน หากต้องการแบ่งหน้าจอระหว่างทั้ง 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 ให้สร้างชุดข้อมูลการปฏิบัติงานใหม่และคอมมิตเป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลด้านการทํางานคือการกําหนดค่าสําหรับเครือข่ายชุดข้อความที่คุณสร้าง

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

otcodelab_top01C_2nodes.png

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

ขณะที่คุณทํางานกับส่วนที่เหลือของ Codelab เราจะแสดงแผนภาพโทโพโลยีใหม่เมื่อมีการเปลี่ยนแปลงสถานะของเครือข่าย บทบาทโหนดจะแสดงดังนี้

b75a527be4563215.png

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

otcodelab_top01C_ed01.png

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

otcodelab_top01C.png

ยืนยันรัฐใหม่และ RLOC16 ใน FTD Joiner

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

> state
router
Done
> rloc16
b800
Done

ดาวน์เกรด FTD Joiner

คุณทดสอบลักษณะการทํางานนี้ได้โดยการดาวน์เกรด FTD Joiner ด้วยตนเองจากเราเตอร์กลับไปเป็นอุปกรณ์ปลายทาง เปลี่ยนสถานะเป็นเด็กและตรวจสอบ RLOC16 ดังนี้

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

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

กลับไปที่คณะกรรมาธิการของ 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

otcodelab_top01C.png

นําตัวแปรที่ได้คะแนนนํา

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

ใน 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

otcodelab_top02C_01.png

ตรวจสอบตารางย่อย สังเกตว่ามี 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

otcodelab_top02C_02.png

เครือข่ายชุดข้อความของเราประกอบด้วย 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

ขอบเขต

ส่งไปยัง

ff02::1

ลิงก์ในเครื่อง

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

ff02::2

ลิงก์ในเครื่อง

FTDs และ Border Routers ทั้งหมด

ff03::1

ตาข่ายภายใน

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

ff03::2

ตาข่ายภายใน

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 จะเข้าถึงได้ด้วยฮอพเดียว

otcodelab_top02C_02_LL.png

ขณะนี้ใช้คําสั่ง 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

otcodelab_top02C_02_LL02.png

ซึ่งหมายความว่า 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

otcodelab_top02C_02_ML.png

ใช้คําสั่ง 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

otcodelab_top02C_02_LL02.png

จดเวลาตอบกลับสําหรับตัวเข้าร่วม 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. ยินดีด้วย

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

b915c433e7027cc7.png

ตอนนี้คุณทราบแล้วว่า

  • ความแตกต่างระหว่างประเภท บทบาท และขอบเขตของอุปกรณ์ในชุดข้อความ
  • วิธีที่อุปกรณ์ชุดข้อความจัดการสถานะภายในเครือข่าย
  • วิธีส่งข้อความแบบง่ายระหว่างโหนดโดยใช้ 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 นี้

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