สร้างเครือข่ายเทรดด้วยคณะกรรมการพัฒนา B91 และ OpenThread

1. เกริ่นนำ

26b7f4f6b3ea0700.png

OpenThread เป็นการใช้งานโอเพนซอร์สของโปรโตคอลเครือข่าย Thread® ซึ่งเป็นโปรโตคอลเครือข่ายที่ทำงานร่วมกันแบบไร้สายที่มีประสิทธิภาพและปลอดภัยซึ่งออกแบบมาสำหรับอุปกรณ์ Internet of Things (IoT) OpenThread พัฒนาขึ้นโดยทีม Nest ของ Google และพร้อมให้บริการฟรีสำหรับชุมชนนักพัฒนาซอฟต์แวร์ในรูปแบบโปรเจ็กต์โอเพนซอร์ส

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

Telink ได้ผสานรวมการใช้งาน OpenThread เข้ากับ Zephyr RTOS ทำให้สามารถทำงานร่วมกับฮาร์ดแวร์ของ Telink ได้อย่างราบรื่น ซอร์สโค้ดของการผสานรวมนี้เข้าถึงได้บน GitHub และยังจัดเตรียมให้เป็นชุดพัฒนาซอฟต์แวร์ (SDK) ด้วย

ใน Codelab นี้ คุณจะตั้งโปรแกรม OpenThread ให้กับฮาร์ดแวร์จริง สร้างและจัดการเครือข่ายเทรด และแลกเปลี่ยนข้อความระหว่างโหนดต่างๆ รูปภาพด้านล่างแสดงการตั้งค่าฮาร์ดแวร์ ซึ่งมี OT Border Router (OTBR) และอุปกรณ์เทรด 1 เครื่องใน Codelab

codelab_overview.png

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

  • วิธีตั้งค่าการใช้งาน OpenThread โดยใช้สภาพแวดล้อมการพัฒนา Telink Zephyr
  • สร้างตัวอย่าง OpenThread CLI (ot-cli-ftd และ ot-rcp) แล้วแฟลชลงใน Telink B91 Development Boards
  • วิธีตั้งค่า OpenThread Border Router (OTBR) โดยใช้ Docker ใน Raspberry Pi 3B ขึ้นไป
  • วิธีสร้างเครือข่ายเทรดใน OTBR
  • วิธีเพิ่มอุปกรณ์ไปยังเครือข่ายเทรดโดยใช้การแก้ไขข้อบกพร่องแบบนอกย่านความถี่
  • วิธีตรวจสอบการเชื่อมต่อระหว่างโหนดในเครือข่ายเทรดโดยใช้ CLI

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

ฮาร์ดแวร์

  • คณะกรรมการการพัฒนา B91 2 ท่าน
  • Raspberry Pi 3B ขึ้นไป 1 รายการขึ้นไปโดยใช้ Raspbian OS Image
  • เครื่อง Linux ที่มีพอร์ต USB อย่างน้อย 2 พอร์ต
  • สวิตช์ (หรือเราเตอร์) ที่เชื่อมต่ออินเทอร์เน็ตและสายอีเทอร์เน็ตหลายสาย

ซอฟต์แวร์:

  • เครื่องมือเขียนและแก้ไขข้อบกพร่องของ Telink — LinuxBDT
  • เครื่องมือเทอร์มินัลพอร์ตอนุกรม เช่น PuTTY
  • เครื่องมืออื่นๆ เช่น Git และ West

2. ข้อกำหนดเบื้องต้น

แนวคิด Thread และ OpenThread CLI

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

เครื่อง Linux

เครื่อง Linux (Ubuntu v20.04 LTS หรือใหม่กว่า) ทำหน้าที่เป็นเครื่องจักรสร้างเพื่อตั้งค่าสภาพแวดล้อมการพัฒนาซอฟต์แวร์ Telink Zephyr และแฟลชบอร์ดการพัฒนาเทรดทั้งหมด เครื่อง Linux ต้องใช้พอร์ต USB ที่มีอยู่ 2 พอร์ตและการเชื่อมต่ออินเทอร์เน็ตเพื่อให้ทำงานเหล่านี้ได้สำเร็จ

การเชื่อมต่อและเทอร์มินัลพอร์ตอนุกรม

คุณสามารถเสียบอุปกรณ์เข้ากับพอร์ต USB ของเครื่อง Linux ได้โดยตรง นอกจากนี้ คุณจะต้องใช้เครื่องมือเทอร์มินัลพอร์ตอนุกรมเพื่อเข้าถึงอุปกรณ์

ใน Codelab นี้ เครื่องมือเทอร์มินัล PuTTY ใช้สำหรับควบคุม FTD Joiner และ Raspberry Pi ซึ่งนำเสนอภาพรวมการใช้งาน แต่คุณก็นำซอฟต์แวร์เทอร์มินัลอื่นๆ มาใช้ได้ด้วย

Codelab นี้ต้องใช้ชุดพัฒนาซอฟต์แวร์ B91 2 ชุด รูปภาพด้านล่างแสดงคอมโพเนนต์ขั้นต่ำที่ต้องการในชุดเดียว

overview.png

โดยหนึ่งในชุดอุปกรณ์นี้จะใช้เป็น RCP (หน่วยประมวลผลวิทยุ) และอีกชุดหนึ่งจะใช้เป็น FTD (อุปกรณ์เทรดแบบเต็ม) หากยังไม่ได้ครอบครองชุดอุปกรณ์ ให้ขอรายละเอียดเพิ่มเติมจากเว็บไซต์อย่างเป็นทางการของ Telelink คอมโพเนนต์ที่ใช้ได้มีดังนี้

ดัชนี

ชื่อ

1

คณะกรรมการพัฒนา Telink B91

2

แผ่นดับเพลิง Telink

3

เสาอากาศ 2.4 GHz

4

สาย USB (USB A กับมินิ USB)

Raspberry Pi 3B ขึ้นไปที่ใช้อิมเมจระบบปฏิบัติการ Raspbian ขึ้นไป

ใน Codelab นี้ คุณต้องใช้ Raspberry Pi 3B ขึ้นไปที่มีอิมเมจระบบปฏิบัติการ Raspbian Bullseye Lite หรือ Raspbian Bullseye with Desktop โดยจะเชื่อมต่ออินเทอร์เน็ตผ่านอีเทอร์เน็ตและจะได้รับการกำหนดค่าเป็นโฮสต์สำหรับ OpenThread Border Router (OTBR)

การเชื่อมต่อเครือข่าย

สวิตช์ (หรือเราเตอร์) ที่เชื่อมต่ออินเทอร์เน็ตและสายอีเทอร์เน็ตหลายสาย โดยใช้ในการเชื่อมต่อ Raspberry Pi กับเครื่อง Linux เพื่อให้ผู้ใช้กำหนดค่า Raspberry Pi ผ่านโฮสต์ได้ง่ายขึ้น

LinuxBDT

Burning and Debugging Tool (BDT) ของ Telink ซึ่งใช้ในชิป Telink Chip ทั้งหมด ช่วยให้คุณลบและแฟลชเฟิร์มแวร์ OpenThread ลงในบอร์ดการพัฒนา Telink B91 ได้ ติดตั้งโปรแกรม Linux เวอร์ชัน X86 linuxBDT ในเครื่อง Linux

อื่นๆ

  • Git สำหรับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ Telink Zephyr
  • West สำหรับจัดการโปรเจ็กต์ Zephyr และสร้างไบนารี OpenThread

3. ตั้งค่าเฟิร์มแวร์

ในเครื่อง Linux ให้เปิดเทอร์มินัล CLI แล้วเริ่มด้วยการเรียกใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่า APT เป็นเวอร์ชันล่าสุด

$ sudo apt update
$ sudo apt upgrade

เมื่อดำเนินการเสร็จแล้ว ให้ทำตามขั้นตอนต่อไปนี้

  1. ติดตั้งการอ้างอิง
    $ wget https://apt.kitware.com/kitware-archive.sh
    $ sudo bash kitware-archive.sh
    $ sudo apt install --no-install-recommends git cmake ninja-build \
    gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \
    python3-setuptools python3-tk python3-wheel xz-utils file make gcc \
    gcc-multilib g++-multilib libsdl2-dev
    
    ปัจจุบัน Zephyr กำหนดให้ใช้เวอร์ชันทรัพยากร Dependency ขั้นต่ำสุด เช่น CMake (3.20.0), Python3 (3.6) และ Devicetree Compiler (1.4.6)
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    ตรวจสอบเวอร์ชันที่ติดตั้งไว้ในระบบก่อนทำขั้นตอนถัดไป หากเวอร์ชันไม่ถูกต้อง ให้เปลี่ยนมิเรอร์ APT เป็นการมิเรอร์ที่เสถียรและเป็นปัจจุบัน หรืออัปเดตทรัพยากร Dependency เหล่านี้ด้วยตนเอง
  2. ติดตั้งจากทิศตะวันตก
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    ตรวจสอบว่า ~/.local/bin อยู่ในตัวแปรสภาพแวดล้อม $PATH
  3. ดาวน์โหลดซอร์สโค้ดโปรเจ็กต์ Zephyr
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. ติดตั้งทรัพยากร Dependency ของ Python เพิ่มเติมสำหรับ Zephyr
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. ตั้งค่าเชนเครื่องมือ Zephyr ดาวน์โหลด Toolchain ของ Zephyr (ประมาณ 1~2 GB) ไปยังไดเรกทอรีในเครื่องเพื่อให้คุณแฟลชบอร์ดส่วนใหญ่ได้
    $ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
    
    ดาวน์โหลด Zephyr SDK แล้ววางในเส้นทางที่แนะนำดังที่แสดงด้านล่าง
    $HOME/zephyr-sdk[-x.y.z]
    $HOME/.local/zephyr-sdk[-x.y.z]
    $HOME/.local/opt/zephyr-sdk[-x.y.z]
    $HOME/bin/zephyr-sdk[-x.y.z]
    /opt/zephyr-sdk[-x.y.z]
    /usr/zephyr-sdk[-x.y.z]
    /usr/local/zephyr-sdk[-x.y.z]
    
    โดย [-x.y.z] คือข้อความที่ไม่บังคับซึ่งอาจเป็นข้อความใดก็ได้ เช่น -0.16.1 ไม่สามารถย้ายไดเรกทอรีหลังจากติดตั้ง SDK แล้ว จากนั้นติดตั้งห่วงโซ่เครื่องมือ Zephyr
    $ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
    $ cd zephyr-sdk-0.16.1
    $ ./setup.sh -t riscv64-zephyr-elf -h -c
    
  6. สร้างตัวอย่าง Hello World ก่อนอื่นให้ตรวจสอบว่าการกำหนดค่าโปรเจ็กต์ Zephyr อย่างเป็นทางการถูกต้องโดยใช้ตัวอย่าง Hello World แล้วตั้งค่าโปรเจ็กต์ที่กำหนดเองต่อ
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    ใช้คำสั่งบิลด์ West เพื่อสร้างตัวอย่าง hello_world จากไดเรกทอรีรูทของที่เก็บ Zephyr คุณค้นหาเฟิร์มแวร์ชื่อ zephyr.bin ได้ในส่วน build/zephyr directory
  7. เพิ่มสคริปต์สภาพแวดล้อม Zephyr ลงใน ~/.bashrc ใช้คำสั่งต่อไปนี้
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. เพิ่มที่เก็บระยะไกลของ Telink Zephyr ดาวน์โหลดที่เก็บของ Telink ไว้ในเครื่องเพื่อเป็นสาขาการพัฒนาแล้วอัปเดต
    $ cd ~/zephyrproject/zephyr
    $ git remote add telink-semi https://github.com/telink-semi/zephyr
    $ git fetch telink develop
    $ git checkout develop
    $ west update
    $ west blobs fetch hal_telink
    

คุณสามารถดูข้อมูลเพิ่มเติมได้ในเอกสาร Zephyr – คู่มือเริ่มต้นใช้งาน

ดาวน์โหลดเครื่องมือ Telink LinuxBDT และแตกไฟล์ไปยังไดเรกทอรีในเครื่องในเครื่อง Linux ของคุณ เช่น ไดเรกทอรีหน้าแรก ~ เพื่อเปิดใช้งานเฟิร์มแวร์ Flash ลงในคณะกรรมการพัฒนา B91

$ cd ~
$ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2
$ tar -vxf LinuxBDT.tar.bz2 

เชื่อมต่อ Burning Board กับเครื่อง Linux ผ่านอินเทอร์เฟซ USB แล้วป้อนคำสั่งต่อไปนี้

$ cd LinuxBDT
$ sudo ./bdt lsusb -v
Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller
Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD
Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse
Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6
Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller

หากคุณเห็นข้อความ "Telink Web Debugger v3.6" แสดงว่าโปรแกรมเมอร์ BDT เชื่อมต่อกับเครื่อง Linux เรียบร้อยแล้ว

การคอมไพล์เฟิร์มแวร์

Codelab นี้จะสร้างเฟิร์มแวร์ OpenThread 2 ประเภทดังต่อไปนี้

  • ot-cli-ftd,
  • และ ot-rcp

วิธีการรวบรวมมีดังนี้:

  1. หน่วยประมวลผลวิทยุ (ot-rcp)
    $ cd ~/zephyrproject
    $ rm -rf build_ot_coprocessor
    $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
    
  2. อุปกรณ์เทรดเด่นเต็มรูปแบบพร้อมบรรทัดคำสั่งแบบอินเทอร์แอกทีฟ (ot-cli-ftd)
    $ cd ~/zephyrproject
    $ rm -rf build_ot_cli_ftd
    $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
    

แฟลชเฟิร์มแวร์

เชื่อมต่อคณะกรรมการพัฒนา B91 เข้ากับ Burning Board โดยใช้สาย USB ดังที่แสดงในรูปภาพด้านล่าง

connection_overview.png

ใช้คำสั่งต่อไปนี้เพื่อเบิร์นเฟิร์มแวร์ในบรรทัดคำสั่ง (เช่น ใช้การกะพริบของเฟิร์มแวร์ ot-cli-ftd)

$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr
$ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin
$ cd ~/LinuxBDT
$ sudo ./bdt 9518 ac
 Activate OK!
$ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin
 EraseSectorsize...
 Total Time: 2181 ms
 Flash writing...
 [100%][-] [##################################################]
 File Download to Flash at address 0x000000: 491700 bytes
 Total Time: 30087 ms

โดยพื้นฐานแล้ว เมธอดของ Flash สำหรับ ot-rcp ก็เหมือนกับ ot-cli-ftd อย่างไรก็ตาม ชื่อและเส้นทางเฟิร์มแวร์นั้นมีความแตกต่างกัน

หลังจากกะพริบแล้ว ให้แยกความแตกต่างของกระดานพัฒนา B91 ทั้ง 2 ชุดโดยทำเครื่องหมายให้ตรงกัน ติดป้ายกำกับกระดานที่กะพริบด้วย ot-cli-ftd เป็น "FTD Joiner" และกระดานที่กะพริบด้วย ot-rcp เป็น "RCP"

4. กำหนดค่าคอนโซลอนุกรมสำหรับอุปกรณ์เครื่องมือเชื่อมต่อ FTD

ดังที่แสดงในรูปภาพ ให้เสียบ FTD Joiner เข้ากับพอร์ต USB ของเครื่อง Linux โดยตรง

usb_connection.png

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

uart_console.png

การอ้างอิงบรรทัดคำสั่ง OpenThread จะอยู่ที่การอ้างอิง CLI ของ OpenThread ตรวจสอบว่าได้ใส่ ot นำหน้าคำสั่งทั้งหมด

ตัวอย่าง:

> ot state
disabled
Done
> ot channel
11
Done
>

5. ตั้งค่า Raspberry Pi เป็น OpenThread Border Router

OpenThread Border Router เป็นอุปกรณ์ที่ประกอบด้วย 2 ส่วนหลักๆ :

  • Raspberry Pi มีบริการและเฟิร์มแวร์ทั้งหมดที่จำเป็นสำหรับการทำหน้าที่เป็น Border Router (BR)
  • RCP มีหน้าที่รับผิดชอบต่อการสื่อสารของเทรด

หน่วยประมวลผลวิทยุ (RCP)

หากต้องการแฟลชเฟิร์มแวร์ ot-rcp ให้ทำตามขั้นตอนเดียวกับขั้นตอนการแฟลชเฟิร์มแวร์ ot-cli-ftd เชื่อมต่อ B91 Development Board กับพอร์ต USB บน Raspberry Pi ดังที่แสดงในรูปภาพด้านล่าง

OTBR_overview.png

ราสเบอร์รี่พาย

  1. ตรวจสอบว่าเขียนอิมเมจระบบปฏิบัติการ Raspbian Bullseye Lite หรือRaspbian Bullseye with Desktop ลงในการ์ด SD อย่างถูกต้อง
  2. คุณมีตัวเลือกในการ SSH ไปยัง Raspberry Pi หรือทำงานกับ Raspbian Desktop โดยตรง Codelab นี้จะใช้ SSH
  3. ก่อนติดตั้ง OTBR Docker ในขั้นตอนถัดไป โปรดอัปเดตที่เก็บในเครื่องและตัวจัดการแพ็กเกจก่อน
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

ติดตั้ง Docker

หากคุณเพิ่งอัปเดต APT ของที่เก็บในเครื่องและตัวจัดการแพ็กเกจในขั้นตอนก่อนหน้า ให้รีบูต Raspberry Pi จากนั้นเปิดหน้าต่างเทอร์มินัล SSH

  1. ติดตั้ง Docker:
    $ curl -sSL https://get.docker.com | sh
    
  2. ใส่บัญชีปัจจุบันลงในกลุ่ม Docker เพื่อให้สิทธิ์เพื่อจะได้ไม่ต้องเพิ่ม sudo ไว้หน้าแต่ละคำสั่ง
    $ sudo usermod -aG docker $USER
    
    คุณต้องรีสตาร์ท Raspberry Pi เพื่อให้มีผล
  3. หาก Docker ยังไม่เริ่มทำงาน ให้เริ่มดังนี้
    $ sudo dockerd
    
  4. สคริปต์ไฟร์วอลล์ OTBR จะสร้างกฎในคอนเทนเนอร์ Docker ก่อนหน้านั้น ให้เรียกใช้ modprobe เพื่อโหลดโมดูลเคอร์เนลของ iptable
    $ sudo modprobe ip6table_filter
    

กำหนดค่าและเรียกใช้ Docker

Codelab นี้จะดึงอิมเมจ OTBR Docker โดยตรงจาก OpenThread Docker Hub อิมเมจนี้ผ่านการทดสอบและยืนยันโดยทีม OpenThread

  1. ดึงรูปภาพล่าสุด:
    $ docker pull openthread/otbr:latest
    
  2. ตรวจสอบรายการอิมเมจในคอนเทนเนอร์ Docker:
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. ระบุชื่อพอร์ตอนุกรมของอุปกรณ์ RCP โดยเลือก /dev ttyACM0 หมายความว่า RCP มีการเชื่อมต่ออย่างถูกต้อง
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. เรียกใช้ OTBR Docker เป็นครั้งแรกและอ้างอิงพอร์ตอนุกรมของ RCP (ttyACM0) หากต้องการใช้ OTBR Docker นี้ต่อไป ให้ใช้คำสั่ง Docker start otbr
    $ docker run --name "otbr" --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
    
  5. เปิดหน้าต่างเทอร์มินัล SSH ใหม่เพื่อทดสอบการเชื่อมต่อระหว่าง Raspberry Pi และ RCP
    $ docker exec -ti otbr sh -c "sudo ot-ctl"
    > state 
    disabled
    Done
    

คำสั่ง Docker ที่ไม่บังคับมีดังนี้

  • รับข้อมูลเกี่ยวกับคอนเทนเนอร์ Docker ที่ใช้งานอยู่:
    $ docker ps -aq
    
  • หยุด OTBR Docker:
    $ docker stop otbr
    
  • นำ OTBR Docker ออก:
    $ docker rm otbr
    
  • โหลด OTBR Docker ซ้ำ:
    $ docker restart otbr
    

ณ จุดนี้ อุปกรณ์ผู้เชื่อม FTD และ OTBR พร้อมแล้ว และคุณไปยังขั้นตอนถัดไปเพื่อสร้างเครือข่ายเทรดได้

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

สร้างเครือข่ายเทรดใน RCP

เราใช้ Shell ot-ctl บน OTBR เพื่อสร้างเครือข่ายเทรด หากคุณออกจาก Shell ในส่วนสุดท้าย ให้ป้อนคำสั่งต่อไปนี้เพื่อเริ่มต้นอีกครั้งในเทอร์มินัล SSH:

$ docker exec -ti otbr sh -c "sudo ot-ctl"

จากนั้น ป้อนคำสั่งตามลำดับที่ระบุไว้ในตาราง และตรวจสอบว่าแต่ละขั้นตอนได้รับผลลัพธ์ที่คาดไว้ก่อนไปยังขั้นตอนถัดไป

ดัชนี

คำสั่ง

เกริ่นนำ

คำตอบที่คาดหวัง

1

dataset init new

สร้างชุดข้อมูลเครือข่ายแบบสุ่มใหม่

เสร็จสิ้น

2

dataset commit active

ส่งชุดข้อมูลใหม่ไปยังชุดข้อมูลการดำเนินงานที่ใช้งานอยู่ในพื้นที่เก็บข้อมูลที่ไม่เปลี่ยนแปลง

เสร็จสิ้น

3

ifconfig up

แสดงอินเทอร์เฟซ IPv6

เสร็จสิ้น

4

thread start

เปิดใช้การดำเนินการของโปรโตคอลเทรดและเชื่อมต่อกับเครือข่ายเทรด

เสร็จสิ้น

รอ 10 วินาทีเพื่อให้อินเทอร์เฟซของชุดข้อความทำงาน

5

state

ตรวจสอบสถานะอุปกรณ์ ซึ่งสามารถเรียกคำสั่งนี้ได้หลายครั้งจนกว่าจะขึ้นเป็นผู้นำและไปยังขั้นตอนถัดไป

ผู้นำ
เสร็จสิ้น

6

dataset active

ตรวจสอบชุดข้อมูลการดำเนินการที่ทำงานอยู่ทั้งหมดและบันทึกคีย์เครือข่าย

การประทับเวลาที่ใช้งาน: 1
ช่อง: 13
มาสก์ของช่อง: 0x07fff800
รหัส PAN ภายนอก: b07476e168eda4fc
คำนำหน้า Mesh Local: fd8c:60bc:a98:c7ba::/64
คีย์เครือข่าย: c31248518749




ระบบจะใช้คีย์เครือข่ายที่ OTBR สร้างแบบสุ่มระหว่างการสร้างเครือข่ายเมื่อมีอุปกรณ์ ot-cli-ftd เครื่องเข้าร่วมเครือข่ายเทรดนี้

เพิ่มผู้เชื่อม FTD ไปยังเทรดผ่านการดำเนินการนอกวงเครือข่าย

การสั่งงานนอกย่านความถี่หมายถึงการส่งข้อมูลเข้าสู่ระบบของเครือข่ายไปยังอุปกรณ์ที่รอเข้าร่วมเครือข่ายด้วยวิธีการแบบไม่ใช้ระบบไร้สาย (เช่น การป้อนข้อมูลใน OpenThread CLI ด้วยตนเอง) ป้อนคำสั่งต่อไปนี้ตามลำดับในคอนโซลอนุกรมไปยัง FTD Joiner

ดัชนี

คำสั่ง

เกริ่นนำ

การตอบกลับที่คาดหวัง

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

อุปกรณ์เชื่อมต่อกับเครือข่ายเทรดได้เพียงแค่คีย์เครือข่ายเท่านั้น

เสร็จสิ้น

2

ot dataset commit active

ส่งชุดข้อมูลใหม่ไปยังชุดข้อมูลการดำเนินงานที่ใช้งานอยู่ในพื้นที่เก็บข้อมูลที่ไม่เปลี่ยนแปลง

เสร็จสิ้น

3

ot ifconfig up

แสดงอินเทอร์เฟซ IPv6

เสร็จสิ้น

4

ot thread start

เปิดใช้การดำเนินการของโปรโตคอลเทรดและเชื่อมต่อกับเครือข่ายเทรด

เสร็จสิ้น

รอ 20 วินาทีขณะที่อุปกรณ์เข้าร่วมและกำหนดค่าตัวเอง

5

ot state

ตรวจสอบสถานะของอุปกรณ์

เด็ก/เราเตอร์
เสร็จสิ้น

โทโพโลยี

ป้อนคำสั่ง เช่น ipaddr, child table, router table ในเทอร์มินัล SSH เพื่อรับคำตอบอย่างเช่นข้อมูลโค้ดต่อไปนี้

> ipaddr rloc
fd8c:60bc:a98:c7ba:0:ff:fe00:b000
Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+
|   1 | 0xb001 |        240 |         23 |     3 |   51 |1|1|1|  3| 0 |     0 |   129 | 82bc12fbe783468e |

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done
...
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+

Done
> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
| 33 | 0x8400 |       63 |         0 |     3 |      3 |  13 | e61487c1cda940a6 |    1 |
| 44 | 0xb000 |       63 |         0 |     0 |      0 |   0 | 7ae354109d611f7e |    0 |

Done

RLOC16 ของ OTBR คือ 0xb000 และ RLOC16 ของผู้เข้าร่วม FTD ในขั้นต้นคือ 0xb001 จากนั้น RLOC16 ของผู้เข้าร่วม FTD จะกลายเป็น 0x8400 หลังจากได้รับรหัสเราเตอร์ จะเห็นได้ว่าเครื่องมือเชื่อมต่อ FTD ได้รับการอัปเกรดจากเครื่องย่อยเป็นเราเตอร์แล้ว

เครือข่ายเทรดปัจจุบันมี 2 โหนด และโทโพโลยีดังที่แสดงในภาพด้านล่าง

topology.png

7. การสื่อสารระหว่างอุปกรณ์เทรด

การสื่อสาร ICMPv6

เราใช้คำสั่ง ping เพื่อตรวจสอบว่าอุปกรณ์เทรดในเครือข่ายเดียวกันสื่อสารกันได้หรือไม่ ก่อนอื่นให้ใช้คำสั่ง ipaddr เพื่อรับ RLOC ของอุปกรณ์

> ipaddr
fd8c:60bc:a98:c7ba:0:ff:fe00:fc11
fdbd:7274:649c:1:1d19:9613:f705:a5af
fd8c:60bc:a98:c7ba:0:ff:fe00:fc10
fd8c:60bc:a98:c7ba:0:ff:fe00:fc38
fd8c:60bc:a98:c7ba:0:ff:fe00:fc00
fd8c:60bc:a98:c7ba:0:ff:fe00:b000       # Routing Locator (RLOC)
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
fe80:0:0:0:78e3:5410:9d61:1f7e
Done

ป้อนคำสั่งต่อไปนี้ในคอนโซลอนุกรมของ FTD Joiner เพื่อเรียกใช้การดำเนินการ ping

> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000
16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms.
Done

การตอบสนองของเอาต์พุตของพอร์ตอนุกรมบ่งบอกว่าฝั่ง OTBR ได้รับคำขอ ping และผู้เข้าร่วม FTD ได้รับการตอบสนองโดยใช้คำสั่ง ping จาก OTBR แล้ว การสื่อสารระหว่างอุปกรณ์ทั้งสองสำเร็จ

การสื่อสาร UDP

บริการแอปพลิเคชันที่ให้บริการโดย OpenThread จะมี UDP ด้วย คุณสามารถใช้ UDP API เพื่อส่งข้อมูลระหว่างโหนดในเครือข่ายเทรด หรือส่งข้อมูลไปยังเครือข่ายภายนอกผ่าน Border Router รายละเอียดข้อมูลเบื้องต้นเกี่ยวกับ UDP API ของ OpenThread จะอยู่ในตัวอย่าง UDP ของ OpenThread CLI Codelab นี้จะใช้ API บางส่วนในโค้ดเพื่อส่งข้อมูลระหว่าง OTBR และ FTD Joiner

รับ EID ของ Mesh-Local ของ OTBR ก่อน ที่อยู่นี้เป็นหนึ่งในที่อยู่ IPv6 ของอุปกรณ์เทรด และสามารถใช้เพื่อเข้าถึงอุปกรณ์เทรดในพาร์ติชันเครือข่ายเทรดเดียวกัน

> ipaddr mleid
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
Done

ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล SSH เพื่อเปิดใช้ OTBR UDP และเชื่อมโยงพอร์ต 1022 ของอุปกรณ์

> udp open
Done
> udp bind :: 1022
Done

ป้อนคำสั่งต่อไปนี้ในคอนโซลอนุกรมและเปิดใช้ UDP ของผู้ผนวก FTD ผูกพอร์ต 1022 ของอุปกรณ์แล้วส่งข้อความ hello ขนาด 5 ไบต์ไปยัง OTBR

> ot udp open 
Done
> ot udp bind :: 1022
Done
> ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello
Done

เทอร์มินัล SSH จะแสดงผลข้อมูลต่อไปนี้ OTBR ได้รับข้อความ hello จากผู้เข้าร่วม FTD ซึ่งหมายความว่าการสื่อสาร UDP สำเร็จแล้ว

> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello

8. ขอแสดงความยินดี

คุณได้สร้างเครือข่ายเทรดอย่างง่ายและยืนยันการสื่อสารภายในเครือข่ายนี้แล้ว

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

  • วิธีสร้างและใช้สภาพแวดล้อมในการพัฒนาซอฟต์แวร์ Telink Zephyr
  • วิธีการสร้างไบนารี ot-cli-ftd และ ot-rcp รวมถึงนำไปเผยแพร่ใน Telink B91 Development Board
  • วิธีตั้งค่าเวอร์ชัน Raspberry Pi 3B+ ขึ้นไปเป็น OpenThread Border Router (OTBR) โดยใช้ Docker
  • วิธีสร้างเครือข่ายเทรดใน OTBR
  • วิธีเพิ่มอุปกรณ์ไปยังเครือข่ายเทรดผ่านการมอบหมายงานแบบนอกย่านความถี่
  • วิธีตรวจสอบการเชื่อมต่อระหว่างโหนดในเครือข่ายเทรด

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

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

เอกสารอ้างอิง: