一、簡介
什麼是 Thread、OpenThread、OTNS 和 Si 絲?
Thread 是一種以 IP 為基礎的低功率無線網狀網路通訊協定,可讓裝置和裝置和雲端之間的通訊安全無虞。執行緒網路可配合拓撲變更進行調整,避免單點故障。
Google 發布的 OpenThread 是由 Thread 的開放原始碼實作。儘管程式碼較小,但記憶體空間有限,OpenThread 仍支援 Thread 規格中定義的所有功能。
OpenThread Network 模擬工具 (OTNS) 可以在 posix 平台上執行模擬的 OpenThread 節點,用於模擬 Thread 網路。OTNS 提供簡單易用的網頁介面 (OTNS-Web),方便您視覺化及操作模擬 Thread 網路。
Silk 是全自動化的測試平台,可驗證真實裝置的 OpenThread 函式、功能和系統效能。
須知事項
- OpenThread 的功能驗證架構:Slk
- 為已啟用 OTNS 功能的真實裝置建構 OpenThread
- 使用 OTNS-Web 介面監控執行絲絲測試案例時產生的執行緒網路狀態
這個程式碼研究室著重於將 Silk 與 OTNS 搭配使用。但不適用絲 lk 和 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 模擬執行緒網路。這個程式碼研究室會假設您已成功執行 OTNS 工具。
檢查套件必備條件
我們要確保所有必備條件都符合。
- 執行
which otns
來檢查$PATH
中的otns
執行檔是否可供搜尋。 - 請執行
which wpantund
,確保wpantund
可供使用。 - 確認 ARM GNU 工具鍊、J-Link 和
nrfjprog
套件均已可用。 - 確認能夠建立 OpenThread 二進位檔,然後在
openthread
資料夾下執行make -f examples/Makefile-nrf52840
。
注意:請參閱連結說明文件中的設定指南。需求條件 1 來自使用 OTNS 模擬執行緒網路,另一個則是由使用 nRF52840 主機和 OpenThread 建立執行緒網路。
3. 絲 setup 設定
如要複製 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 產品。
「[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
如要閃爍 Jamboard,請按照建立執行緒網路程式碼研究室中步驟 4 的說明,使用 nrfjprog
。完成上述步驟後,透過 nRF USB 連接埠將所有主機板連接到主機電腦。同一組 USB 轉 Micro-USB 傳輸線可中斷 J-Link 連接埠的連接,並連接到 nRF52840 開發電路板的 nRF USB 連接埠。因此,只要在這 6 條傳輸線上進行測試即可。為方便起見,請使用 12 條傳輸線並連接兩個連接埠。
5. 使用實際模式執行 OTNS 伺服器
使用預設參數執行 OTNS,可讓使用者模擬會話串網路。如要將其當做實際實體網路的視覺化工具使用,請按照下列步驟操作:
otns -raw -real -ot-cli otns-silk-proxy
這些引數會指示 OTNS 使用 gRPC 和 UDP 訊息來說明 Thread 網路的視覺化呈現方式,而不是執行多個 ot-cli
程序來模擬網路。瀏覽器應該會以空白畫布自動開啟視覺化網頁。
6. 執行支援 OTNS 的絲 lk 檢測案例
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. 恭喜
恭喜!您已成功在實體執行緒裝置上執行 a 絲測試,並使用 OTNS 以視覺化方式呈現結果!
您執行開發板時使用了採用 OTNS 支援的韌體,使用開發板執行。主板回報使用者的狀態,藉此記錄並匯總所有裝置,然後傳送給 OTNS 服務 (內含其他測試資訊)。以即時模式執行 OTNS 會以視覺化方式呈現網頁介面中的執行緒網路。
後續步驟
嘗試執行 Silk 套件包含的其他 OpenThread 測試案例。
延伸閱讀
歡迎前往 openthread.io 和 Silk 探索各種 OpenThread 資源。