1. บทนำ
Thread, OpenThread, OTNS และ Silk คืออะไร
Thread เป็นโปรโตคอลเครือข่ายที่ทำงานร่วมกันแบบไร้สายและใช้พลังงานต่ำแบบ IP ซึ่งช่วยให้การสื่อสารระหว่างอุปกรณ์และอุปกรณ์กับระบบคลาวด์มีความปลอดภัย เครือข่ายเทรดสามารถปรับให้เข้ากับการเปลี่ยนแปลงโทโพโลยีเพื่อหลีกเลี่ยงความล้มเหลวในจุดเดียว
OpenThread ที่ Google เปิดตัวเป็นการใช้งาน Thread แบบโอเพนซอร์ส แม้ว่าโค้ดและหน่วยความจำของ OpenThread จะเล็ก แต่ OpenThread ก็รองรับฟีเจอร์ทั้งหมดที่ระบุไว้ในข้อกำหนดของเทรด
OpenThread Network Simulator (OTNS) สามารถใช้เพื่อจำลองเครือข่าย Thread โดยการเรียกใช้โหนด OpenThread ที่จำลองบนแพลตฟอร์ม Posix OTNS มีเว็บอินเทอร์เฟซ (OTNS-Web) ที่ใช้งานง่ายสำหรับการแสดงและใช้งานเครือข่ายเทรดจำลอง
Silk เป็นแพลตฟอร์มทดสอบแบบอัตโนมัติโดยสมบูรณ์สําหรับการตรวจสอบฟังก์ชัน ฟีเจอร์ และประสิทธิภาพของระบบ OpenThread กับอุปกรณ์จริง
สิ่งที่คุณจะได้เรียนรู้
- เฟรมเวิร์กการยืนยันฟังก์ชันการทำงานของ OpenThread: Silk
- สร้าง OpenThread สำหรับอุปกรณ์จริงที่เปิดใช้ฟีเจอร์ OTNS
- ใช้อินเทอร์เฟซ OTNS-Web เพื่อตรวจสอบสถานะของเครือข่ายเทรดที่เกิดจากการเรียกใช้ Use Case ไหม
Codelab นี้มุ่งเน้นไปที่การใช้ Silk กับ OTNS แต่ไม่ครอบคลุมฟีเจอร์อื่นๆ ของ Silk และ OTNS
สิ่งที่ต้องมี
ฮาร์ดแวร์:
- Nordic เซมิคอนดักเตอร์ nRF52840 Dev 6 แผง
- สายเชื่อม USB กับไมโคร USB 6 สายสำหรับเชื่อมต่อบอร์ด
- ฮับ USB
ซอฟต์แวร์:
- Linux x86_64
- Git
- ใช้งานเวอร์ชัน 1.11 ขึ้นไป
- เว็บเบราว์เซอร์ OTNS-Web ใช้เว็บเบราว์เซอร์ในการแสดงผลการจำลอง
สิ่งที่ต้องมีก่อน
2. ข้อกำหนดเบื้องต้น
ทำ Codelab พื้นฐานก่อนหน้าให้เสร็จสมบูรณ์
- Thread Primer คุณจําเป็นต้องรู้แนวคิดพื้นฐานของเทรดเพื่อทําความเข้าใจสิ่งที่สอนใน Codelab นี้
- สร้างเครือข่าย Thread ด้วยบอร์ด nRF52840 และ OpenThread Codelab นี้จะสมมติว่าคุณสร้างเครือข่ายเทรดเรียบร้อยแล้ว
- จำลองเครือข่ายเทรดโดยใช้ OTNS Codelab นี้จะสมมติว่าคุณเรียกใช้เครื่องมือ OTNS สำเร็จแล้ว
การตรวจสอบข้อกำหนดเบื้องต้นของแพ็กเกจ
ตรวจสอบให้มั่นใจว่าเป็นไปตามข้อกำหนดเบื้องต้นทั้งหมด
- เรียกใช้
which otns
เพื่อตรวจสอบว่าไฟล์ปฏิบัติการotns
สามารถค้นหาได้ใน$PATH
หรือไม่ - เรียกใช้
which wpantund
เพื่อตรวจสอบว่าwpantund
พร้อมใช้งาน - ตรวจสอบว่าแพ็กเกจเครื่องมือ ARM GNU, J-Link และ
nrfjprog
พร้อมใช้งาน
หมายเหตุ: โปรดดูคำแนะนำในการตั้งค่าในเอกสารประกอบที่ลิงก์ ข้อกำหนดเบื้องต้นข้อที่ 1 มาจากการจำลองเครือข่ายเทรดโดยใช้ OTNS และคำถามอื่นๆ มาจากสร้างเครือข่ายเทรดด้วยบอร์ด nRF52840 และ OpenThread
3. การตั้งค่าผ้าไหม
หากต้องการโคลน Silk และตั้งค่าสภาพแวดล้อม ให้เรียกใช้คำสั่งต่อไปนี้ในไดเรกทอรีต้นทาง
$ git clone https://github.com/openthread/silk.git $ cd silk $ ./bootstrap.sh $ sudo make install-cluster
กำหนดไฟล์การกำหนดค่าฮาร์ดแวร์
หากต้องการอนุญาตให้ Silk รวบรวมทรัพยากรฮาร์ดแวร์ทดสอบที่มีอยู่ซึ่งเชื่อมต่อกับเครื่อง ให้กำหนดไฟล์ hwconfig.ini
ในรูปแบบต่อไปนี้
[DEFAULT] ClusterID: 0 LayoutCenter: 300, 300 LayoutRadius: 100 [Dev-8A7D] HwModel: Nrf52840 HwRev: 1.0 InterfaceSerialNumber: E1A5012E8A7D USBInterfaceNumber: 1 DutSerial: 683536778
เครื่องมือชื่อ usbinfo
ได้รับการติดตั้งเป็นส่วนหนึ่งของ Silk ที่ใช้ค้นหาหมายเลขซีเรียลของอินเทอร์เฟซและหมายเลขอินเทอร์เฟซ USB ได้ DutSerial คือหมายเลข SN ที่พิมพ์บนชิปหรือแสดงโดย usbinfo
สำหรับผลิตภัณฑ์ J-Link
ช่อง LayoutCenter
และ LayoutRadius
ในส่วน [DEFAULT]
จะกำหนดรูปร่างของเลย์เอาต์เมื่อแสดงภาพอุปกรณ์ใน UI บนเว็บ การตั้งค่าพารามิเตอร์ตามค่าที่แสดงที่นี่อาจเป็นจุดเริ่มต้นที่ดี
จากนั้นจึงกำหนดส่วนสำหรับอุปกรณ์ทดสอบแต่ละเครื่องและให้ข้อมูลฮาร์ดแวร์ที่เกี่ยวข้อง
4. คอมไพล์ OpenThread ที่เปิดใช้ OTNS
ภาพสิ่งปลูกสร้างและการกะพริบ
โดยค่าเริ่มต้น อุปกรณ์ OpenThread จะไม่ส่งข้อความที่เกี่ยวข้องกับ OTNS หากต้องการให้บอร์ดนักพัฒนาซอฟต์แวร์ปล่อยข้อความสถานะเพื่อบันทึกอินเทอร์เฟซที่จำเป็นสำหรับการแสดงข้อมูลผ่านภาพ OTNS ให้เรียกใช้คำสั่งต่อไปนี้ใต้ไดเรกทอรีต้นทางของ OpenThread เพื่อสร้างอิมเมจ FTD และแปลงเป็นรูปแบบเลขฐาน 16
$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive $ cd ot-nrf528xx $ ./script/bootstrap $ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON $ cd ./build/bin $ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex
หากต้องการให้บอร์ดกะพริบ ให้ทำตามวิธีการในขั้นตอนที่ 4 ของ Codelab การสร้างเครือข่ายเทรดเพื่อใช้ nrfjprog
หลังจากนั้น ให้เชื่อมต่อบอร์ดทั้งหมดเข้ากับเครื่องโฮสต์ผ่านพอร์ต nRF USB สายเชื่อม USB กับ Micro-USB ชุดเดียวกันนั้นสามารถถอดสายออกจากพอร์ต J-Link และเชื่อมต่อกับพอร์ต USB nRF ของบอร์ดการพัฒนา nRF52840 ได้ คุณจึงทำการทดสอบสาย 6 สายนี้ได้ ใช้สาย 12 เส้นแล้วเชื่อมต่อกับทั้ง 2 พอร์ตเพื่อหลีกเลี่ยงความยุ่งยาก
5. การเรียกใช้เซิร์ฟเวอร์ OTNS ด้วยโหมดจริง
การเรียกใช้ OTNS ด้วยพารามิเตอร์เริ่มต้นช่วยให้ผู้ใช้จำลองเครือข่ายเทรดได้ หากต้องการใช้เป็นเครื่องมือแสดงข้อมูลผ่านภาพสำหรับเครือข่ายจริง ให้เรียกใช้ด้วย
otns -raw -real -ot-cli otns-silk-proxy
อาร์กิวเมนต์เหล่านี้จะบอก OTNS ให้คาดหวังข้อความ gRPC และ UDP ที่อธิบายว่าควรแสดงภาพเครือข่ายเทรดอย่างไร แทนที่จะเรียกใช้กระบวนการ ot-cli
หลายรายการเพื่อจำลองเครือข่าย เบราว์เซอร์ควรเปิดหน้าการแสดงภาพด้วยผืนผ้าใบที่ว่างเปล่าโดยอัตโนมัติ
6. การเรียกใช้กรอบการทดสอบ Silk ที่มีการรองรับ OTNS
Silk เป็นแพลตฟอร์มทดสอบแบบอัตโนมัติโดยสมบูรณ์สำหรับการตรวจสอบฟังก์ชัน ฟีเจอร์ และประสิทธิภาพของระบบของ OpenThread กับอุปกรณ์จริง วิธีการในโปรเจ็กต์ README จะครอบคลุมวิธีใช้
ไฟล์ silk_run_test.py
ที่ silk/unit_tests
จะทำให้คุณมีข้อมูลเริ่มต้น Silk จะรองรับ OTNS เมื่อเรียกใช้กรอบการทดสอบ เนื่องจากบริการโหมดจริง OTNS ทำงานอยู่ในเครื่องอยู่แล้ว เราจึงเพียงแค่ต้องแก้ไขไฟล์ silk_run_test.py
ด้วยตำแหน่งที่ต้องการสำหรับไฟล์บันทึกเอาต์พุต ป้อนสคริปต์ทดสอบ และไฟล์ hwconfig.ini
อาร์กิวเมนต์ -s localhost
จะบอก Silk ให้ส่งข้อความ OTNS ไปยัง localhost
เช่น ผู้ใช้อาจเรียกใช้การทดสอบชื่อ ot_test_form_network.py
โดยใช้การแก้ไขต่อไปนี้ในไฟล์ silk_run_test.py
/opt/openthread_test/
คือเส้นทางเริ่มต้นที่ Silk ใช้สำหรับเอาต์พุตบันทึกและไฟล์การกำหนดค่า แต่คุณจะใช้เส้นทางใดก็ได้
silk_run_test.py
import datetime
import os
from silk.tests import silk_run
RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'
os.chdir('~/src/silk/silk/tests/')
timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')
run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'
argv = [
'tests/silk_run.py',
'-v2',
'-c', CONFIG_PATH + 'hwconfig.ini',
'-d', run_log_path,
'-s', 'localhost',
'ot_test_form_network.py'
]
silk_run.SilkRunner(argv=argv)
การแสดงภาพโทโพโลยีของเครือข่ายที่สร้างจะแสดงใน UI ของเว็บ OTNS
มุมซ้ายบนแสดงสถิติการแสดงภาพ เวอร์ชัน OT และชื่อการทดสอบ มุมซ้ายล่างมีตัวควบคุมของหน้าต่างบันทึก ซึ่งแสดงทางด้านขวา ในช่วงแรก จะมีการเพิ่มโหนดแต่ไม่มีการสร้างเครือข่าย เมื่อการทดสอบดำเนินไป โหมดและบทบาทของแต่ละโหนดจะเปลี่ยนไป และลิงก์จะถูกสร้างขึ้น
7. ขอแสดงความยินดี
ยินดีด้วย คุณทำการทดสอบ Silk บนอุปกรณ์เทรดจริงสำเร็จแล้ว และแสดงภาพโดยใช้ OTNS
คุณได้ทำการทดสอบ Silk โดยใช้บอร์ดการพัฒนาที่กะพริบด้วยเฟิร์มแวร์ที่มีการรองรับ OTNS กระดานจะรายงานสถานะไปยังเซิร์ฟเวอร์ Silk ซึ่งจะตรวจสอบและรวบรวมข้อมูลทั้งหมด จากนั้นส่งไปยังบริการ OTNS พร้อมด้วยข้อมูลการทดสอบอื่นๆ OTNS ที่ทำงานในโหมดจริงแสดงภาพเครือข่ายเทรดบนเว็บอินเทอร์เฟซ
ขั้นตอนถัดไปคือ
ลองเรียกใช้กรอบการทดสอบ OpenThread อื่นๆ ที่รวมอยู่ในแพ็กเกจ Silk
อ่านเพิ่มเติม
ดูแหล่งข้อมูลต่างๆ ของ OpenThread ได้ที่ openthread.io และ Silk