1. 簡介
什麼是 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. 事前準備
完成先前的基本程式碼研究室
- 執行緒入門。您必須瞭解 Thread 的基本概念,才能瞭解本程式碼研究室所說明的內容。
- 使用 nRF52840 Jamboard 和 OpenThread 建構 Thread 網路。本程式碼研究室假設您已成功建構 Thread 網路。
- 使用 OTNS 模擬執行緒網路。本程式碼研究室假設您已成功執行 OTNS 工具。
檢查套件必備條件
請確認符合所有必備條件。
- 執行
which otns
,檢查$PATH
是否可供搜尋otns
執行檔。 - 執行
which wpantund
以確保wpantund
可供使用。 - 確認 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]
區段中的 LayoutCenter
和 LayoutRadius
欄位定義了版面配置的形狀。你可以將值設為此處顯示的值,是一個不錯的起點。
然後定義每個測試裝置的區段,並提供相關的硬體資訊。
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
程序來模擬網路。你的瀏覽器應該會自動使用空白畫布開啟視覺化頁面。
6. 執行支援 OTNS 的 Silk 測試案例
Silk 是完全自動化的測試平台,用於驗證真實執行緒中的 OpenThread 功能、功能和系統效能。README 專案中的操作說明會說明使用方式。
位於 silk/unit_tests
的 silk_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 會顯示已合併網路的拓撲視覺化。
左上角會顯示視覺化統計資料、OT 版本和測試名稱。左下方有記錄視窗的控制項,顯示於右側。一開始,系統會新增節點,但不會形成網路。隨著測試進行,每個節點的模式和角色也會發生變化,且會建立連結。
7. 恭喜
恭喜,你已成功在實體執行緒裝置上執行 Silk 測試,並使用 OTNS 以視覺化方式呈現!
您使用開發板進行閃爍測試,執行的是支援 OTNS 的韌體。Jamboard 會回報狀態,並監控及匯總所有伺服器,並將其傳送至 OTNS 服務以及其他測試資訊。在實際模式下執行的 OTNS 會以視覺化方式呈現網頁介面上的 Thread 網路。
後續步驟
請嘗試執行 Silk 套件中包含的其他 OpenThread 測試案例。
延伸閱讀
請參閱 openthread.io 和 Silk 以瞭解各種 OpenThread 資源。