測試視覺呈現的執行緒網路

1. 簡介

5abd22afa2f2ee9a.png

什麼是 Thread、OpenThread、OTNS 和 Silk?

Thread 是一種 IP 型低功耗網網路通訊協定,可讓裝置間的通訊成為裝置與雲端之間的通訊。執行緒網路可以適應拓撲變更,避免出現單點故障。

Google 發布的 OpenThread 是開放原始碼的 Thread 實作。儘管其小型程式碼大小和記憶體足跡,OpenThread 仍支援 Thread Spec 中定義的所有功能。

OpenThread Network Simulator (OTNS) 可用於在 posix 平台上執行模擬 OpenThread 節點,藉此模擬 Thread 網路。OTNS 提供簡單易用的網路介面 (OTNS-Web),以視覺化方式呈現與模擬模擬的 Thread 網路。

Silk 是全自動化的測試平台,用於驗證現實生活中的 OpenThread 函式、功能與系統效能。

課程內容

  • OpenThread 的功能驗證架構:絲綢
  • 為已啟用 OTNS 功能的真實裝置建構 OpenThread
  • 使用 OTNS-Web 介面,監控執行 Silk 測試案例後產生的 Thread 網路狀態

本程式碼研究室著重於使用 Silk 搭配 OTNS。不過請注意,「智慧鏡頭」和「OTNS」的其他功能不在涵蓋範圍內。

軟硬體需求

硬體:

  • 6 Nordic Semiconductor nRF52840 開發人員專區
  • 6 條 USB 轉 micro-USB 傳輸線
  • USB 集線器

軟體業:

需求條件:

2. 必備條件

完成先前的基本程式碼研究室

正在檢查套件必要條件

請確認你符合所有先決條件。

  1. 執行 which otns 來檢查 $PATH 中是否有可供搜尋的 otns 執行檔。
  2. 執行 which wpantund 確認 wpantund 可用。
  3. 確認所有 ARM GNU 工具鍊、J-Link 和 nrfjprog 套件均可供使用。

注意:如需設定指南,請參閱連結的說明文件。必備項目 #1 是來自使用 OTNS 的 Thread 網路,其他則是由 使用 nRF52840 白板和 OpenThread 建立 Thread 網路。

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 的工具,可用於尋找介面序號和 USB 介面號碼。DutSerial 是列印於晶片上的 SN 號碼,或 usbinfo 代表 J-Link 產品的 SN 號碼。

[DEFAULT] 區段中的 LayoutCenterLayoutRadius 欄位定義了裝置在網頁 UI 上的視覺化形狀。一開始設定值是很好的做法。

之後,它會為每個測試裝置定義一個區段,並提供相關的硬體資訊。

4. 編譯已啟用 OTNS 的 OpenThread

建構影像和閃爍

根據預設,OpenThread 裝置不會發出 OTNS 相關訊息。如要讓開發板發送狀態訊息至記錄 OTNS 視覺必要的基本介面,請在 OpenThread 來源目錄下執行以下指令,建構 FTD 映像檔,並將其轉換成十六進位格式。

$ 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 中的操作說明使用 nrfjprog。接著,透過 nRF USB 連接埠將所有主機連接至主機電腦。你可以將同一部 USB 對 Micro-USB 傳輸線與 J-Link 連接埠中斷連線,並且連線至 nRF52840 開發板的 nRF USB 連接埠。因此,僅測試這 6 條傳輸線的測試可以執行。為省電,使用 12 條傳輸線連接這兩個連接埠。

5. 以實際模式執行 OTNS 伺服器

使用預設參數執行 OTNS 可讓使用者模擬 Thread 網路。如要將此工具當做實際實體網路的視覺化工具使用,請使用以下項目:

otns -raw -real -ot-cli otns-silk-proxy

這些引數會指示 OTNS 預期透過 httpRPC 和 UDP 訊息說明 Thread 網路的視覺化呈現方式,而不是執行多個 ot-cli 程序來模擬網路。瀏覽器應會自動開啟內含空白畫布的視覺化頁面。

4dd5b41bf7e71334.png

6. 執行支援 OTNS 的 Silk 測試案例

Silk 是全自動化的測試平台,用於驗證現實生活中的 OpenThread 函式、功能及系統效能。專案 README 中的操作說明會說明如何使用。

位於 silk/unit_testssilk_run_test.py 檔案會提供相關資料。執行測試案例時,Slk 提供 OTNS 支援。由於 OTNS 實際模式服務已在本機執行,因此我們只需修改 silk_run_test.py 檔案,並提供輸出記錄檔、輸入測試指令碼和 hwconfig.ini 檔案後指定位置。-s localhost 引數會指示 Silk 將 OTNS 訊息傳送至 localhost

舉例來說,某位開發人員可以使用下列 silk_run_test.py 檔案修改名為 ot_test_form_network.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)

OTNS 網頁 UI 會顯示格式網路的拓撲視覺化。

ee443b66e0a6620b.png

畫面左上角會顯示視覺化統計資料、OT 版本和測試名稱。左下方是記錄檔視窗的控制選項,如右方所示。一開始會新增節點,但並未建立網路。在測試期間,每個節點的模式和角色都會改變,連結也形成了。

5c38e2c72519e620.png

7. 恭喜

恭喜!你已成功在實體 Thread 裝置上執行 Silk 測試,並使用 OTNS 以視覺化方式呈現!

您使用開發板執行了絲板測試,且該映像檔會使用支援 OTNS 的韌體進行刷新。董事會將狀態回報給 Silk 伺服器,以便監控及匯總所有主機,然後再將其傳送到 OTNS 服務和其他測試資訊。在即時模式下運作的 OTNS,會以視覺化的方式呈現網頁介面的「Thread」網路。

後續步驟

請嘗試執行 Silk 套件中包含的其他 OpenThread 測試案例。

其他資訊

如需各種 OpenThread 資源,請參閱 openthread.ioSilk

參考文件