1. 簡介
什麼是 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 集線器
軟體業:
- Linux x86_64。
- Git。
- 前往 1.11 以上版本。
- 網路瀏覽器。OTNS-Web 使用網路瀏覽器顯示模擬結果。
需求條件:
2. 必備條件
完成先前的基本程式碼研究室
- Thread Primer。您必須瞭解 Thread 的基本概念,才能瞭解本程式碼研究室學到的內容。
- 使用 nRF52840 白板和 OpenThread 建立 Thread 網路。本程式碼研究室假設您已成功建構 Thread 網路。
- 使用 OTNS 模擬 Thread 網路。本程式碼研究室假設您已成功執行 OTNS 工具。
正在檢查套件必要條件
請確認你符合所有先決條件。
- 執行
which otns
來檢查$PATH
中是否有可供搜尋的otns
執行檔。 - 執行
which wpantund
確認wpantund
可用。 - 確認所有 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]
區段中的 LayoutCenter
和 LayoutRadius
欄位定義了裝置在網頁 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
程序來模擬網路。瀏覽器應會自動開啟內含空白畫布的視覺化頁面。
6. 執行支援 OTNS 的 Silk 測試案例
Silk 是全自動化的測試平台,用於驗證現實生活中的 OpenThread 函式、功能及系統效能。專案 README 中的操作說明會說明如何使用。
位於 silk/unit_tests
的 silk_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 會顯示格式網路的拓撲視覺化。
畫面左上角會顯示視覺化統計資料、OT 版本和測試名稱。左下方是記錄檔視窗的控制選項,如右方所示。一開始會新增節點,但並未建立網路。在測試期間,每個節點的模式和角色都會改變,連結也形成了。
7. 恭喜
恭喜!你已成功在實體 Thread 裝置上執行 Silk 測試,並使用 OTNS 以視覺化方式呈現!
您使用開發板執行了絲板測試,且該映像檔會使用支援 OTNS 的韌體進行刷新。董事會將狀態回報給 Silk 伺服器,以便監控及匯總所有主機,然後再將其傳送到 OTNS 服務和其他測試資訊。在即時模式下運作的 OTNS,會以視覺化的方式呈現網頁介面的「Thread」網路。
後續步驟
請嘗試執行 Silk 套件中包含的其他 OpenThread 測試案例。
其他資訊
如需各種 OpenThread 資源,請參閱 openthread.io 和 Silk。