1. เกริ่นนำ
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
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าการใช้งาน 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 ซึ่งนำเสนอภาพรวมการใช้งาน แต่คุณก็นำซอฟต์แวร์เทอร์มินัลอื่นๆ มาใช้ได้ด้วย
ชุดเครื่องมือการพัฒนา Telink B91
Codelab นี้ต้องใช้ชุดพัฒนาซอฟต์แวร์ B91 2 ชุด รูปภาพด้านล่างแสดงคอมโพเนนต์ขั้นต่ำที่ต้องการในชุดเดียว
โดยหนึ่งในชุดอุปกรณ์นี้จะใช้เป็น 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. ตั้งค่าเฟิร์มแวร์
ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ Telink Zephyr
ในเครื่อง Linux ให้เปิดเทอร์มินัล CLI แล้วเริ่มด้วยการเรียกใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่า APT เป็นเวอร์ชันล่าสุด
$ sudo apt update $ sudo apt upgrade
เมื่อดำเนินการเสร็จแล้ว ให้ทำตามขั้นตอนต่อไปนี้
- ติดตั้งการอ้างอิง
$ 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 เหล่านี้ด้วยตนเอง - ติดตั้งจากทิศตะวันตก
$ 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 ดาวน์โหลด 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
- สร้างตัวอย่าง 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
- เพิ่มสคริปต์สภาพแวดล้อม Zephyr ลงใน
~/.bashrc
ใช้คำสั่งต่อไปนี้$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- เพิ่มที่เก็บระยะไกลของ 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
ดาวน์โหลดเครื่องมือ 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
วิธีการรวบรวมมีดังนี้:
- หน่วยประมวลผลวิทยุ (
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 เข้ากับ 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 Joiner" และกระดานที่กะพริบด้วย ot-rcp
เป็น "RCP"
4. กำหนดค่าคอนโซลอนุกรมสำหรับอุปกรณ์เครื่องมือเชื่อมต่อ FTD
ดังที่แสดงในรูปภาพ ให้เสียบ FTD Joiner เข้ากับพอร์ต USB ของเครื่อง Linux โดยตรง
หลังจากเชื่อมต่ออุปกรณ์ FTD Joiner กับเครื่อง Linux แล้ว ให้เปิด PuTTY จากนั้นสร้างเทอร์มินัลใหม่ ตั้งค่าข้อมูลพอร์ตอนุกรม และเปิดพอร์ตอนุกรม
การอ้างอิงบรรทัดคำสั่ง 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 ดังที่แสดงในรูปภาพด้านล่าง
ราสเบอร์รี่พาย
- ตรวจสอบว่าเขียนอิมเมจระบบปฏิบัติการ 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
ไว้หน้าแต่ละคำสั่ง$ sudo usermod -aG docker $USER
คุณต้องรีสตาร์ท Raspberry Pi เพื่อให้มีผล - หาก Docker ยังไม่เริ่มทำงาน ให้เริ่มดังนี้
$ sudo dockerd
- สคริปต์ไฟร์วอลล์ OTBR จะสร้างกฎในคอนเทนเนอร์ Docker ก่อนหน้านั้น ให้เรียกใช้
modprobe
เพื่อโหลดโมดูลเคอร์เนลของ iptable$ sudo modprobe ip6table_filter
กำหนดค่าและเรียกใช้ Docker
Codelab นี้จะดึงอิมเมจ OTBR Docker โดยตรงจาก 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 ...
- เรียกใช้ 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
- เปิดหน้าต่างเทอร์มินัล 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 |
| สร้างชุดข้อมูลเครือข่ายแบบสุ่มใหม่ | เสร็จสิ้น | ||
2 |
| ส่งชุดข้อมูลใหม่ไปยังชุดข้อมูลการดำเนินงานที่ใช้งานอยู่ในพื้นที่เก็บข้อมูลที่ไม่เปลี่ยนแปลง | เสร็จสิ้น | ||
3 |
| แสดงอินเทอร์เฟซ IPv6 | เสร็จสิ้น | ||
4 |
| เปิดใช้การดำเนินการของโปรโตคอลเทรดและเชื่อมต่อกับเครือข่ายเทรด | เสร็จสิ้น | ||
รอ 10 วินาทีเพื่อให้อินเทอร์เฟซของชุดข้อความทำงาน | |||||
5 |
| ตรวจสอบสถานะอุปกรณ์ ซึ่งสามารถเรียกคำสั่งนี้ได้หลายครั้งจนกว่าจะขึ้นเป็นผู้นำและไปยังขั้นตอนถัดไป | ผู้นำ | ||
6 |
| ตรวจสอบชุดข้อมูลการดำเนินการที่ทำงานอยู่ทั้งหมดและบันทึกคีย์เครือข่าย | การประทับเวลาที่ใช้งาน: 1 |
ระบบจะใช้คีย์เครือข่ายที่ OTBR สร้างแบบสุ่มระหว่างการสร้างเครือข่ายเมื่อมีอุปกรณ์ ot-cli-ftd
เครื่องเข้าร่วมเครือข่ายเทรดนี้
เพิ่มผู้เชื่อม FTD ไปยังเทรดผ่านการดำเนินการนอกวงเครือข่าย
การสั่งงานนอกย่านความถี่หมายถึงการส่งข้อมูลเข้าสู่ระบบของเครือข่ายไปยังอุปกรณ์ที่รอเข้าร่วมเครือข่ายด้วยวิธีการแบบไม่ใช้ระบบไร้สาย (เช่น การป้อนข้อมูลใน 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 จะกลายเป็น 0x8400
หลังจากได้รับรหัสเราเตอร์ จะเห็นได้ว่าเครื่องมือเชื่อมต่อ FTD ได้รับการอัปเกรดจากเครื่องย่อยเป็นเราเตอร์แล้ว
เครือข่ายเทรดปัจจุบันมี 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 ได้รับการตอบสนองโดยใช้คำสั่ง 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 ซึ่งรวมถึงแหล่งข้อมูลต่อไปนี้
- แพลตฟอร์มที่รองรับ — ดูแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread — รายละเอียดเพิ่มเติมในการสร้างและกำหนดค่า OpenThread
- Thread Primer — ครอบคลุมแนวคิดเทรดทั้งหมดที่แสดงใน Codelab นี้
เอกสารอ้างอิง: