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

1. บทนำ

26b7f4f6b3ea0700.png

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

ข้อมูลจำเพาะของเทรดจะสร้างโปรโตคอลการสื่อสารแบบไร้สายที่เชื่อถือได้ ปลอดภัย และประหยัดพลังงานสำหรับอุปกรณ์ที่มีข้อจำกัดด้านทรัพยากรซึ่งพบบ่อยในสมาร์ทโฮมและอาคารพาณิชย์ OpenThread มีขอบเขตเลเยอร์เครือข่ายเต็มรูปแบบภายในเทรด เช่น IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีการรักษาความปลอดภัย MAC, การสร้างลิงก์ Mesh และการกำหนดเส้นทาง 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) และ Flash ตัวอย่างไปยัง Telink B91 Development Boards
  • วิธีตั้งค่า Border Router ของ OpenThread (OTBR) โดยใช้ Docker บน Raspberry Pi 3B ขึ้นไป
  • วิธีสร้างเครือข่ายเทรดใน OTBR
  • วิธีเพิ่มอุปกรณ์ไปยังเครือข่ายเทรดโดยใช้การแก้ไขข้อบกพร่องนอกย่านความถี่
  • เพื่อตรวจสอบการเชื่อมต่อระหว่างโหนดในเครือข่ายเทรดโดยใช้ CLI

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

ฮาร์ดแวร์:

  • คณะกรรมการพัฒนา B91 จำนวน 2 ท่าน
  • Raspberry Pi 3B+ หรือสูงกว่าพร้อม Raspbian OS Image
  • เครื่อง Linux ที่มีพอร์ต USB อย่างน้อย 2 พอร์ต
  • สวิตช์ที่เชื่อมต่ออินเทอร์เน็ต (หรือเราเตอร์) และสายอีเทอร์เน็ตหลายสาย

ซอฟต์แวร์:

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

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

แนวคิดชุดข้อความและ CLI ของ OpenThread

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

ดัชนี

ชื่อ

1

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

2

Telink Burning Board

3

เสาอากาศ 2.4 Ghz

4

สาย USB (USB A เป็นมินิ USB)

Raspberry Pi 3B+ ขึ้นไปพร้อม Raspbian OS Image

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

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

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

LinuxBDT

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

อื่นๆ

  • Git สำหรับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ Zephyr ของ Telink
  • 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 ดาวน์โหลดเครื่องมือ 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 ไว้ในเครื่องเป็น Branch ของการพัฒนา แล้วอัปเดต
    $ 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 Development Board

$ 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 Development Board กับ 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" และกระดานกะพริบด้วย ot-rcp เป็น "RCP"

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

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

usb_connection.png

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

uart_console.png

ดูการอ้างอิงบรรทัดคำสั่ง OpenThread ได้ที่การอ้างอิง OpenThread CLI โปรดใช้ ot เป็นคำนำหน้าคำสั่งทั้งหมด

ตัวอย่าง:

> ot state
disabled
Done
> ot channel
11
Done
>

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

เราเตอร์ชายแดน OpenThread เป็นอุปกรณ์ที่ประกอบด้วย 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 เพื่อโหลดโมดูลเคอร์เนลของ iptables
    $ sudo modprobe ip6table_filter
    

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

Codelab นี้จะดึงอิมเมจ Docker OTBR จาก 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. เรียกใช้ Docker OTBR เป็นครั้งแรกและอ้างอิงพอร์ตอนุกรมของ 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
    
  • หยุด Docker OTBR
    $ docker stop otbr
    
  • นำ Docker OTBR ออก:
    $ docker rm otbr
    
  • โหลด Docker OTBR ซ้ำ:
    $ docker restart otbr
    

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

6. สร้างเครือข่ายชุดข้อความ

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

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

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

leader
Done

6

dataset active

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

และ









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

เพิ่ม FTD Joiner ไปยัง Thread ผ่านการว่าจ้างนอกวง

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

เครือข่ายเทรดปัจจุบันมีโหนด 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 Joiner ได้รับคำสั่ง ping ส่งกลับมาโดย OTBR การสื่อสารระหว่างอุปกรณ์ทั้งสองเสร็จสมบูรณ์

การสื่อสาร UDP

บริการแอปพลิเคชันจาก OpenThread ยังรวมถึง UDP ด้วย คุณสามารถใช้ UDP API เพื่อส่งข้อมูลระหว่างโหนดในเครือข่ายเทรด หรือส่งข้อมูลไปยังเครือข่ายภายนอกผ่าน Border Router ข้อมูลเบื้องต้นโดยละเอียดเกี่ยวกับ UDP API ของ OpenThread มีอยู่ในตัวอย่าง OpenThread CLI - UDP 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 Joiner เชื่อมโยงพอร์ต 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 Joiner ซึ่งหมายความว่าการสื่อสาร 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 Boards ได้เลย
  • วิธีตั้งค่าเวอร์ชัน Raspberry Pi 3B+ ขึ้นไปเป็น Border Router ของ OpenThread (OTBR) โดยใช้ Docker
  • วิธีสร้างเครือข่ายเทรดใน OTBR
  • วิธีเพิ่มอุปกรณ์ไปยังเครือข่ายเทรดผ่านการว่าจ้างนอกย่าน
  • วิธีตรวจสอบการเชื่อมต่อระหว่างโหนดในเครือข่ายเทรด

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

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

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