1. บทนำ
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
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าการใช้งาน 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 ตัวเลือกนี้ให้ภาพรวมการใช้งาน แต่ก็สามารถใช้ซอฟต์แวร์เทอร์มินัลอื่นๆ ได้เช่นกัน
ชุดเครื่องมือพัฒนาซอฟต์แวร์ Telink B91
Codelab นี้ต้องใช้ชุดพัฒนาซอฟต์แวร์ B91 2 ชุด รูปภาพด้านล่างแสดงส่วนประกอบขั้นต่ำที่จำเป็นในชุดเดียว
หนึ่งในชุดอุปกรณ์เหล่านี้จะใช้เป็น 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. ตั้งค่าเฟิร์มแวร์
ตั้งค่า Telink Zephyr Development Environment
ในเครื่อง Linux ให้เปิดเทอร์มินัล CLI แล้วเริ่มต้นโดยการเรียกใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่า APT ของคุณเป็นเวอร์ชันล่าสุด
$ sudo apt update $ sudo apt upgrade
เมื่อดำเนินการเสร็จแล้ว ให้ทำตามขั้นตอนต่อไปนี้
- ติดตั้งการอ้างอิง
ขณะนี้ Zephyr ต้องใช้เวอร์ชันขั้นต่ำของทรัพยากร Dependency หลัก เช่น CMake (3.20.0), Python3 (3.6) และ Devicetree Compiler (1.4.6)$ 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
ยืนยันเวอร์ชันที่ติดตั้งในระบบก่อนดำเนินการตามขั้นตอนถัดไป หากเวอร์ชันไม่ถูกต้อง ให้เปลี่ยนมิเรอร์ APT เป็นมิเรอร์ที่เสถียรและเป็นเวอร์ชันล่าสุด หรืออัปเดตทรัพยากร Dependency เหล่านี้ด้วยตนเอง$ cmake --version $ python3 --version $ dtc --version
- ติดตั้งไปทางทิศตะวันตก
ตรวจสอบว่า$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/bin
อยู่ในตัวแปรสภาพแวดล้อม$PATH
- รับซอร์สโค้ดโปรเจ็กต์ Zephyr
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- ติดตั้งทรัพยากร Dependency ของ Python เพิ่มเติมสำหรับ Zephyr
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- ตั้งค่าเครื่องมือ Zephyr ดาวน์โหลดเครื่องมือ Zephyr (ประมาณ 1~2 GB) ลงในไดเรกทอรีในเครื่องเพื่อให้คุณสามารถแฟลชบอร์ดส่วนใหญ่ได้
ดาวน์โหลด Zephyr SDK และวางลงในเส้นทางที่แนะนำดังที่แสดงด้านล่าง$ 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
โดยที่ [-x.y.z] คือข้อความที่ไม่บังคับซึ่งอาจเป็นข้อความใดก็ได้ เช่น -0.16.1 คุณจะย้ายไดเรกทอรีไม่ได้หลังจากติดตั้ง SDK แล้ว จากนั้นติดตั้งเครื่องมือ Zephyr$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]
$ 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
- สร้างตัวอย่าง Hello World ก่อนอื่น ให้ตรวจสอบว่าการกำหนดค่าโปรเจ็กต์ Zephyr อย่างเป็นทางการถูกต้องโดยใช้ตัวอย่าง Hello World จากนั้นดำเนินการต่อด้วยการตั้งค่าโปรเจ็กต์ที่กำหนดเอง
ใช้คำสั่งบิลด์ West เพื่อสร้างตัวอย่าง Hello_world จากไดเรกทอรีรูทของที่เก็บ Zephyr เฟิร์มแวร์ชื่อ$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.bin
จะอยู่ในbuild/zephyr directory
- เพิ่มสคริปต์สภาพแวดล้อม Zephyr ลงใน
~/.bashrc
เรียกใช้คำสั่งต่อไปนี้$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- เพิ่มที่เก็บระยะไกลของ 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
ดาวน์โหลดเครื่องมือ 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
วิธีการคอมไพล์มีดังนี้:
- เครื่องแปลงสัญญาณวิทยุ (
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
- อุปกรณ์เทรดแนะนำเต็มรูปแบบพร้อมบรรทัดคำสั่งแบบอินเทอร์แอกทีฟ (
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 ตามที่แสดงในภาพด้านล่าง
ในบรรทัดคำสั่ง ให้เรียกใช้คำสั่งต่อไปนี้เพื่อเบิร์นเฟิร์มแวร์ (โดยใช้การกะพริบของเฟิร์มแวร์ 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 โดยตรง
หลังจากเชื่อมต่ออุปกรณ์ FTD Joiner กับเครื่อง Linux แล้ว ให้เปิด PuTTY จากนั้นสร้างขั้วปลายสายไฟใหม่ ตั้งค่าข้อมูลพอร์ตอนุกรม แล้วเปิดพอร์ตอนุกรม
ดูการอ้างอิงบรรทัดคำสั่ง 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 ดังที่แสดงในภาพด้านล่าง
พายราสเบอร์รี่
- ตรวจสอบว่าได้เขียนอิมเมจระบบปฏิบัติการ Raspbian Bullseye Lite หรือ Raspbian Bullseye with Desktop ลงในการ์ด SD อย่างถูกต้อง
- คุณมีตัวเลือกในการ SSH ลงใน Raspberry Pi หรือทำงานกับ Raspbian Desktop โดยตรง Codelab นี้จะใช้ SSH
- ก่อนที่จะดำเนินการติดตั้ง OTBR Docker ในขั้นตอนถัดไป โปรดตรวจสอบว่าได้อัปเดตที่เก็บในเครื่องและตัวจัดการแพ็กเกจก่อน
$ sudo apt-get update $ sudp apt-get upgrade
ติดตั้ง Docker
หากคุณเพิ่งอัปเดตที่เก็บในเครื่องและ APT ของตัวจัดการแพ็กเกจในขั้นตอนก่อนหน้า ให้รีบูต Raspberry Pi แล้วเปิดหน้าต่างเทอร์มินัล SSH
- ติดตั้ง Docker:
$ curl -sSL https://get.docker.com | sh
- ใส่บัญชีปัจจุบันลงในกลุ่ม Docker เพื่อให้สิทธิ์โดยไม่ต้องเพิ่ม
sudo
ไว้หน้าคำสั่งแต่ละรายการ คุณต้องรีสตาร์ท Raspberry Pi เพื่อให้มีผล$ sudo usermod -aG docker $USER
- หาก Docker ยังไม่เริ่มทำงาน ให้เริ่มโดยทำดังนี้
$ sudo dockerd
- สคริปต์ไฟร์วอลล์ OTBR จะสร้างกฎภายในคอนเทนเนอร์ Docker ก่อนหน้านั้น ให้ใช้
modprobe
เพื่อโหลดโมดูลเคอร์เนลของ iptables$ sudo modprobe ip6table_filter
กำหนดค่าและเรียกใช้ Docker
Codelab นี้จะดึงอิมเมจ Docker OTBR จาก OpenThread Docker Hub โดยตรง อิมเมจนี้ได้รับการทดสอบและยืนยันโดยทีม OpenThread
- ดึงรูปภาพล่าสุด:
$ docker pull openthread/otbr:latest
- ตรวจสอบรายการอิมเมจในคอนเทนเนอร์ Docker ดังนี้
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openthread/otbr latest db081f4de15f 6 days ago 766MB
- ระบุชื่อพอร์ตอนุกรมของอุปกรณ์ RCP โดยการตรวจสอบ
/dev
โดยttyACM0
จะบ่งบอกว่า RCP เชื่อมต่ออย่างถูกต้อง$ ls /dev/tty* ... /dev/ttyACM0 ...
- เรียกใช้ 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
- เปิดหน้าต่างเทอร์มินัล 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 |
| สร้างชุดข้อมูลเครือข่ายแบบสุ่มใหม่ | เสร็จสิ้น | ||
2 |
| มอบหมายชุดข้อมูลใหม่ไปยังชุดข้อมูลการดำเนินการที่ใช้งานอยู่ในพื้นที่เก็บข้อมูลที่ไม่ผันผวน | เสร็จสิ้น | ||
3 |
| เปิดอินเทอร์เฟซ IPv6 | เสร็จสิ้น | ||
4 |
| เปิดใช้การดำเนินการโปรโตคอลเทรดและเชื่อมต่อกับเครือข่ายเทรด | เสร็จสิ้น | ||
รอ 10 วินาทีเพื่อให้อินเทอร์เฟซของชุดข้อความเริ่มต้น | |||||
5 |
| ตรวจสอบสถานะของอุปกรณ์ เรียกใช้คำสั่งนี้ได้หลายครั้งจนกว่าจะกลายเป็นผู้นำและไปยังขั้นตอนถัดไป | leader | ||
6 |
| ตรวจสอบชุดข้อมูลการดำเนินการที่ใช้งานอยู่ที่สมบูรณ์และบันทึกคีย์เครือข่าย | และ |
ระบบจะใช้คีย์เครือข่ายที่ OTBR สร้างขึ้นแบบสุ่มระหว่างการสร้างเครือข่ายเมื่ออุปกรณ์ ot-cli-ftd
เครื่องเข้าร่วมเครือข่ายเทรดนี้
เพิ่ม FTD Joiner ไปยัง Thread ผ่านการว่าจ้างนอกวง
การใช้งานนอกย่านความถี่หมายถึงการส่งข้อมูลเข้าสู่ระบบของเครือข่ายไปยังอุปกรณ์ที่รอเข้าร่วมเครือข่ายผ่านวิธีการที่ไม่ใช่แบบไร้สาย (เช่น การป้อน OpenThread CLI ด้วยตนเอง) ป้อนคำสั่งต่อไปนี้ตามลำดับในคอนโซลอนุกรมไปยัง FTD Joiner
ดัชนี | คำสั่ง | บทนำ | คำตอบที่คาดหวัง | ||
1 |
| มีเพียงคีย์เครือข่ายเท่านั้นที่จำเป็นต้องใช้เพื่อให้อุปกรณ์เชื่อมต่อกับเครือข่ายเทรด | เสร็จสิ้น | ||
2 |
| มอบหมายชุดข้อมูลใหม่ไปยังชุดข้อมูลการดำเนินการที่ใช้งานอยู่ในพื้นที่เก็บข้อมูลที่ไม่ผันผวน | เสร็จสิ้น | ||
3 |
| เปิดอินเทอร์เฟซ IPv6 | เสร็จสิ้น | ||
4 |
| เปิดใช้การดำเนินการโปรโตคอลเทรดและเชื่อมต่อกับเครือข่ายเทรด | เสร็จสิ้น | ||
รอ 20 วินาทีในขณะที่อุปกรณ์เชื่อมต่อและกำหนดค่าเอง | |||||
5 |
| ตรวจสอบสถานะอุปกรณ์ | บุตรหลาน/เราเตอร์ |
โทโพโลยี
ป้อนคำสั่ง เช่น 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 โหนด และโทโพโลยีดังที่แสดงในรูปด้านล่าง
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 เช่น
- แพลตฟอร์มที่รองรับ — ค้นหาแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread — รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและกำหนดค่า OpenThread
- Thread Primer — ครอบคลุมแนวคิดเทรดทั้งหมดใน Codelab นี้
เอกสารอ้างอิง: