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

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

1. 簡介

5abd22afa2f2ee9a.png

什麼是 Thread、OpenThread、OTNS 和 Silk?

Thread 是符合 IP 架構的低功耗無線網狀網路通訊協定,可讓裝置與裝置之間進行雲端通訊通訊。執行緒網路可因應拓撲變化進行調整,以避免單點故障。

Google 推出的 OpenThread 是 Thread 的開放原始碼實作。OpenThread 的程式碼大小較小和記憶體用量較小,但支援 Thread 規格 中定義的所有功能。

OpenThread Network Simulator (OTNS) 可用於在 posix 平台上執行模擬 OpenThread 節點,以模擬 Thread 網路。OTNS 提供易於使用的網頁介面 (OTNS-Web),方便您以視覺化方式操作及模擬模擬的 Thread 網路。

Silk 是全自動化的測試平台,用於驗證真實執行緒中的 OpenThread 功能、功能和系統效能。

課程內容

  • OpenThread's 功能驗證架構:Slkk
  • 為已啟用 OTNS 功能的實際裝置建構 OpenThread
  • 透過 OTNS-Web 介面監控執行 Silk 測試案例而建立的 Thread 網路狀態

本程式碼研究室著重於使用 OTNS 使用 Silk。但不屬於 Silk 和 OTNS 的其他功能。

軟硬體需求

硬體:

  • 6 北歐半導體 nRF52840 開發板
  • 6 USB 轉 Micro-USB 傳輸線以連接 Jamboard
  • USB 集線器

軟體:

  • Linux x86_64。
  • Git
  • Go 1.11 以上版本
  • 網路瀏覽器。OTNS-Web 會使用網路瀏覽器來顯示模擬畫面。

需求條件:

2. 事前準備

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

檢查套件必備條件

請確認符合所有必備條件。

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

注意:如需相關指引,請參閱連結的說明文件。必要條件 1 來自使用 OTNS 的 Simulate 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 的工具是安裝在 Silk 的一部分,可用來找出介面序號和 USB 介面編號。DutSerial 是印在晶片系統上的 SN 號碼,或由 usbinfo 顯示適用於 J-Link 的產品。

在裝置 UI 中以視覺化方式呈現裝置時,[DEFAULT] 區段中的 LayoutCenterLayoutRadius 欄位定義了版面配置的形狀。你可以將值設為此處顯示的值,是一個不錯的起點。

然後定義每個測試裝置的區段,並提供相關的硬體資訊。

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

如要重新整理 Jamboard,請按照建構執行緒網路程式碼研究室步驟 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 透過 gRPC 和 UDP 訊息來說明 Thread 網路的視覺化方式,而不是執行多個 ot-cli 程序來模擬網路。你的瀏覽器應該會自動使用空白畫布開啟視覺化頁面。

4dd5b41bf7e71334.png

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

Silk 是完全自動化的測試平台,用於驗證真實執行緒中的 OpenThread 功能、功能和系統效能。README 專案中的操作說明會說明使用方式。

位於 silk/unit_testssilk_run_test.py 檔案可發揮成效。Silk 會在執行測試案例時提供 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. 恭喜

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

您使用開發板進行閃爍測試,執行的是支援 OTNS 的韌體。Jamboard 會回報狀態,並監控及匯總所有伺服器,並將其傳送至 OTNS 服務以及其他測試資訊。在實際模式下執行的 OTNS 會以視覺化方式呈現網頁介面上的 Thread 網路。

後續步驟

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

延伸閱讀

請參閱 openthread.ioSilk 以瞭解各種 OpenThread 資源。

參考文件