使用 Simply Studio v5 建構 Silicon Labs EFR32 主機板和 OpenThread 網路

1. 簡介

26b7f4f6b3ea0700.png

Google 的 OpenThread (OT) 是 Thread 的開放原始碼實作。Google 發布了 OpenThread,開放更多開發人員使用 Google Nest 產品中的網路技術,加快智慧聯網家庭和商業大樓的產品開發速度。採用狹窄的平台抽象層和少量記憶體用量,OpenThread 非常具有可攜性。同時支援晶片系統 (SoC) 和網路共同處理器 (NCP) 設計。

Thread 規格:為住家和商業建構應用程式定義採用 IPv6 的可靠安全無線裝置對裝置通訊協定。

Silicon Labs 已強化 OpenThread,可與 Silicon Labs 硬體搭配使用。此原始碼可前往 GitHub 取得,也能做為與 Simply Studio 5 (SSv5) 一起安裝的軟體開發套件 (SDK)。SDK 包含 GitHub 原始碼的完整測試快照。它支援的硬體種類比 GitHub 版本還多,並提供 GitHub 上沒有的說明文件和範例應用程式。

本指南說明如何使用 Silicon Labs OpenThread SDK 和 Simply Studio 5 開發 OpenThread 應用程式。下圖顯示透過 OT 邊界路由器 (OTBR) 設定的主機板 (BRD) 和硬體設定,以及程式碼研究室中使用的兩個 Thread 裝置。

EFR32MG 硬體設定

課程內容

  • 如何使用 Silicon Labs Simply Studio IDE 建立 OpenThread 專案。
  • 如何建構 OpenThread CLI 二進位檔,並刷新至 Silicon Labs 無線電板。
  • 如何使用 Docker 將 Raspberry Pi 3B 以上版本設為 OpenThread 邊界路由器 (OTBR)。
  • 如何在 OTBR 建立 Thread 網路。
  • 從頻外將裝置傳送到 Thread 網路。
  • 如何使用連線偵測 (ping) 指令驗證節點之間的執行緒通訊。

2. 必要條件

硬體:

  1. 3 EFR32MGxx 無線電主機 - 可與這些裝置搭配使用。本程式碼研究室使用 BRD4166A 做為 RCP,以及兩個 BRD4168 做為完整 Thread 裝置。
    • EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
    • EFR32MG13 (巴西4168A)
    • EFR32MG21 (BRD4180A、BRD4180B)
    ,瞭解如何調查及移除這項存取權。 如果是從頭開始,你可以取得 EFR32 Thread 入門套件,上面有列出的開發板。
  2. BRD4001A:無線入門主板 (WSTK),用於代管無線電板。除了 BRD4166A 以外,所有無線電板都需要入門主面板。可使用迷你 USB 傳輸線連接主板或 BRD4166A 的 Micro USB 傳輸線。

WSTK AEM

  1. Raspberry Pi 3B 以上版本。配備 Raspbian Stretch Lite OS 映像檔Raspbian Stretch with Desktop,且須透過乙太網路連線至網際網路。我們將此設為 OT 邊界路由器
  2. 具備至少 2 個 USB 連接埠且具備網際網路連線的 Windows/Linux/Mac 主機系統。如要瞭解硬體和 OS 的需求條件,請參閱 SSv5
  3. 至少一條乙太網路線用於將 Raspberry Pi 連至網際網路。WSTK 也支援透過 IP 偵錯和刷新,因此您可以選擇額外的乙太網路線,透過乙太網路開關將 WSTK 連接到主機系統。

軟體:

  • Simply Studio v5 在 Windows/Linux/Mac 主機系統上安裝及更新,方法是:
    • GNU ARM 工具鍊
    • Gecko SDK Suite 3.2.0 以上版本和 Silicon Labs OpenThread SDK。

3. 硬體設定

本程式碼研究室是使用

  1. EFR32MG12 BRD4166A Thunderboard Sense 2,如左圖所示。
  2. 如右圖所示,兩個 EFR32MG13 BRD4168A
  3. Simply Studio v5 安裝在 macOS Catalina 10.15.7 上,且已安裝
    1. Gecko SDK 3.2.0 版
    2. GNU ARM 7.2.1 版

巴西 4168A

如下圖所示,透過 USB 將每個無線入門套件主面板連接至主機電腦。這些連線將允許 RCP 和終端裝置的程式設計和網路分析。我們會先使用主機電腦使用 ot-rcp 韌體編寫 BRD4166A,最後再將其連接至 Raspberry Pi。(選用) 終端裝置可以透過常見的乙太網路開關連接至主機電腦。入門套件也支援透過 IPv4 進行程式設計和網路分析。

連線

4. 韌體設定

你可以透過兩種方式著手。這兩種選項都能讓您刷新本程式碼研究室所需的韌體。

  1. 專案:(建議) 建立、建構並刷新範例應用程式。這個選項可讓您自訂專案中的應用程式。
  2. 示範:(選擇性) 直接在任何範例應用程式的電台上,刷新預先建立的示範內容。我們鼓勵使用者嘗試將 Demos 韌體設定為選擇性練習。請參閱「選用韌體設定 - 示範」。

本程式碼研究室將使用以專案為基礎的方法。

使用範例建立專案

我們會建立兩個專案BRD4166A 的 ot-rcp 專案以及兩個 BRD4168A 的 ot-cli-ftd 專案。請按照以下步驟操作,為您的開發板選取合適的範例應用程式。

  1. 開啟 Studio 的「File」選單,然後依序選取「New」>Silicon Labs 專案精靈。系統會隨即開啟「Target」、「SDK」和「Toolchain Selection」對話方塊。請勿變更 OpenThread 支援的預設簡易 IDE / GNU 工具鍊。點選「下一步」
    • 目標主機:顯示所選的無線電板 (BRD4168A) 和主面板 (BRD4001A)
    • 目標裝置:這個欄位顯示已連接的微控制器晶片 (MCU)。BRD4168A 已支援 EFR32MG13 MCU。
    • SDK:您可以在此選取所使用的 OT SDK 版本。套件資訊包括 SDK 標記和 OpenThread 的 Silicon Labs 版本,例如 Platform 4.0.1.0OpenThread 2.0.1.0 (GitHub-55af6ce2c)
    • IDE/ 工具鍊:用於編譯 OT 專案的工具鍊。我們使用 GNU ARM。

「New Project」精靈

  1. 系統會隨即開啟範例專案選項對話方塊。您會看到範例專案清單。使用 Thread 技術類型和關鍵字篩選器,搜尋特定範例。請務必記下 Gecko SDK Suite 版本號碼。將 Raspberry Pi 設為邊界路由器時,會需要這個版本標記。選取「ot-cli-ftd」ot-cli-ftd,然後點選「下一步」ot-cli-ftd

新增專案精靈步驟 2

  1. 系統會開啟「Project Configuration」對話方塊。您可以在這裡重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。連結的專案檔案會指向 SDK,而您所做的任何修改都會在 SDK 中生效,並用於日後的專案。複製專案來源後,您就能編輯專案本機副本,讓 SDK 檔案維持不變。「連結 SDK 並複製專案來源」是預設選項,也是建議採用的選項按一下「結束」

「新增專案」精靈步驟 3

  1. 系統會開啟簡便的 IDE 觀點,並將「Project Configurator」開啟至「OVERVIEW」分頁。

專案總覽

您可以透過「軟體元件」分頁安裝及解除安裝元件,並設定已安裝的元件,藉此設定專案。已安裝的元件會經過檢查。按一下「已安裝的元件」,即可查看範例應用程式所安裝的元件篩選清單。系統會自動儲存您所做的任何變更,並自動產生專案檔案。進度會顯示在簡易 IDE 視角的右下角。

軟體元件

在本次示範中,我們將使用範例應用程式的預設設定。重複上述步驟來為您的其他主面板建立 ot-rcp 專案。

建構及刷新專案

建構及刷新 ot-rcpot-cli-ftd 專案。

  1. 專案設定完成後,按一下頂端工具列中的「Build Control (鎚子圖示)」。您也可以在專案上按一下滑鼠右鍵,然後點選「建構專案」。

「Build project」按鈕

  1. 進度會顯示在控制台中,右下角會顯示進度列。與專案相關的任何錯誤或警告也會顯示在這個輸出視窗中。

專案建構輸出內容視窗

  1. 成功建構專案後,會產生二進位檔映像檔。您可以透過「Project Explorer」檢視畫面刷新二進位映像檔。在編譯器子目錄中找出 .bin、.十六進位或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取「Flash to Device」。如果您連結多部裝置,請選取要加入計畫的裝置,請按一下「確定」。Flash 程式設計師隨即開啟,並填入檔案路徑。按一下「計畫」

Flash

5. 韌體設定摘要

此時,您應該已在無線電板上建立、編譯並刷新合適的韌體。將 ot-rcp 刷新至 BRD4166A 後,請將其與主機系統中斷連線,並將這個 Jamboard 連結至 Raspberry Pi。

完成本節後,Thread 網路硬體設定看起來會像這樣。

EFR32MG 設定

6. 為下列項目設定序列控制台: 二氧化碳裝置

如要啟動控制台介面,請在簡易的 IDE 檢視模式的「Device View / Debug Adapters」視窗中,在 J-Link 裝置上按一下滑鼠右鍵。選擇「Launch Console」。如要在控制台中接收提示,請選擇「Serial 1」分頁標籤,然後按下 Enter 鍵。檢查 FTD 節點的狀態。

FTD Studio 主控台檢視畫面

您會發現我們尚未提供 ot-rcp 的控制台。在下一個步驟中,我們會將 Raspberry Pi 設為 OT 邊界路由器,並為 ot-rcp 設定控制台。

7. 將 Raspberry Pi 設為邊界路由器

Silicon Labs 建議使用 OTBR 部署公司的 Docker 容器。在容器中執行 OTBR 可輕鬆建立可部署的構件,並快速進行開發原型設計和測試。

Silicon Labs OTBR 映像檔託管於具有標記的 Siliconlabs DockerHub 中。每個代碼都對應至一個 GSDK 版本:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

Docker 容器必須與透過 Simply Studio 5 建構的指定版本的 RCP 搭配使用。請確保容器代碼版本與您要測試的 GSDK 版本相符。舉例來說,在「Example Project Selection」視窗中選取 ot-rcp 時,如果您的 GDSK 版本是 Gecko SDK Suite v4.0.1 (140),請使用 siliconlabsinc/openthread-border-router:gsdk-4.0.1 圖片。

GSDK 版本

Raspberry Pi 設定

  1. 務必在 SD 卡上刷新 Raspbian Stretch Lite OS 映像檔Raspbian Stretch with 電腦
  2. 你可以透過 SSH 連線至 Raspberry Pi,或是選擇直接使用 Raspbian Desktop。開啟終端機。
  3. 請務必更新本機存放區和套件管理員 (安裝 Docker 前請先更新 apt-get updateapt-get 升級)。

安裝 Docker 映像檔

  1. 在 RPi 上使用下列指令安裝 Docker。
    curl -sSL https://get.docker.com | sh
    
  2. 完成後,您可以修改 Docker 使用者設定,不必在每次指令前都使用 sudo。必須重新啟動。
    sudo usermod -aG docker $USER
    
  3. 請發出下列指令來安裝容器。請注意,使用 RCP 時,一次只能執行一個邊界路由器容器。此外,請確認您的 Simply Studio GSDK 版本與正確的 Docker 映像檔相符。例如 gsdk-4.0.1
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

設定並執行 docker

  1. 您必須設定要在 OTBR 連線時,用於 OTBR 連線 RCP 的 TTY 通訊埠。找出 RCP 裝置的 TTY 連接埠。最簡單的做法是在 RCP 連線後尋找 /tty/dev... 項目。通常應為 /dev/ttyUSB0/dev/ttyACM0
  2. 使用下列指令執行 Docker 安裝。請務必以相符的 GSDK 版本取代 Docker 映像檔名稱。例如 gsdk-4.0.1
    docker run -d --name "otbr" \
     --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
     -p 8080:80 --dns=127.0.0.1 -it \
     --volume /dev/ttyACM0:/dev/ttyACM0 \
     --privileged siliconlabsinc/openthread-border-router:gsdk-4.0.1 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d 可確保容器在卸離模式下執行。
    • 您可以使用 docker logs 指令隨時查看容器的執行記錄。
    • --name 會保持固定,直到 Docker 容器正確關閉 (或移除) 為止。
    • 通訊埠 8080 表示代管邊界路由器管理網頁的網路伺服器通訊埠。
    • 無線電網址選項中須有 ?uart-baudrate=460800,才能解決 UART 的片段化 / 重組問題,處理成本高昂的作業,例如含有長 IPv6 封包的 DTLS。

與 RCP 節點互動

docker 執行後,您就可以使用這個指令透過互動式殼層與 RCP 節點通訊。檢查 RCP 節點的狀態。

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

您可以取得執行中容器 ID 的清單

$ docker ps -aq

您可以檢查執行 OTBR Docker 容器的視窗以執行邊界路由器的記錄輸出,也可以按照下列方式追蹤容器記錄:

$ docker logs [container-id] -f

或者,如果已正確載入 Docker 容器,您可以選擇停止、移除或終止映像檔。

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

選用:如要退出殼層,請使用 CNTL + C。

此時,您應該擁有 3 個控制台。

  1. 在 Simply Studio 中有兩個 ot-cli-ftd 控制台,分別設為 Full Thread 裝置。
  2. 在 Raspberry Pi 上有一個 ot-ctl 互動式殼層,並設為 OT 邊界路由器。

現在我們已準備好建立 Thread 網路。

8. 建立 Thread 網路

設定 RCP

如要建立網路,我們從 OTBR 上的 ot-ctl Shell 開始,這個殼層用於與 RCP 節點通訊。請依序輸入下列指令:

索引

指令

指令說明

預期的回應

1

dataset init new

建立新的網路設定。

完成

2

dataset commit active

將新資料集修訂為有效作業資料集。

完成

3

ifconfig up

啟用 Thread 介面。

完成

4

thread start

啟用並附加 Thread 通訊協定作業。

完成

等待 10 秒,讓執行緒介面啟動。

5

state

請檢查裝置狀態。你應該是領導者。
其他可能的狀態:離線、已停用、卸離、
子項、路由器或主要版本

Leader
Done

6

dataset

查看網路設定。
您的值與這個程式碼研究室的值不同。
請記下頻道、聯播網金鑰、
聯播網名稱和 PAN ID。











我們會使用 ot-cli-ftd 上的頻道編號和網路金鑰,將兩個 FTD 加入這個執行緒網路。

設定 FTD 並新增至 Thread 網路 (頻外做法)

透過頻外方法,我們可以知道所有安全性資訊,並手動新增節點。在簡單易用的控制台中,使用下列指令以下列順序將 FTD 新增至我們的網路。

索引

指令

指令說明

預期的回應

1

dataset channel 20

設定 OTBR 使用的通道。

完成

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

裝置只需要網路金鑰即可連接至 Thread 網路。

完成

3

dataset commit active

將新資料集修訂為有效作業資料集。

完成

4

ifconfig up

啟用 Thread 介面。

完成

5

thread start

啟用並附加 Thread 通訊協定作業。

完成

等待 20 秒,讓裝置自行加入及設定裝置。

6

state

查看網路設定。

孩子
完成

Thread 裝置之間的通訊

我們會使用 ping 指令來檢查裝置是否能彼此通訊。如要使用連線偵測 (ping) 指令,我們需要裝置的 IPv6 位址。您可以使用 ipaddr 指令取得這些項目。

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)

來自兩個 FTD 的 RLOC 位址對 OTBR 的連線偵測 (ping)。

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
> 
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

回應表示已收到酬載,且通訊成功。重複此程序,對 OTBR 中的 FTD 執行連線偵測 (ping)。

9. 恭喜

您已建立 Thread 網路!

您已經知道:

  • 如何使用 Silicon Labs Simply Studio IDE 建立 OpenThread 專案。
  • 如何建構 OpenThread CLI 二進位檔,並刷新至 Silicon Labs 無線電板。
  • 如何使用 Docker 將 Raspberry Pi 3B 以上版本設為 OpenThread 邊界路由器 (OTBR)。
  • 如何在 OTBR 建立 Thread 網路。
  • 從頻外將裝置傳送到 Thread 網路。
  • 如何使用連線偵測 (ping) 指令驗證節點之間的執行緒通訊。

延伸閱讀

歡迎前往 openthread.ioGitHub 查看各種 OpenThread 資源,包括:

10. 選用韌體設定 - 示範

試用版是預先建構的韌體映像檔,可下載到相容裝置。如果要在 Simply Studio 中查詢所需工具是否提供示範,最快的方法是在「Debug Adapters」檢視畫面下方點選所需部分,然後前往範例專案,啟動器視角的「示範」分頁停用「Example Projects」篩選器,並勾選「技術類型」底下的 [Thread ] 圓形按鈕。

Studio 示範

OpenThread SDK 提供的預先編譯試用版應用程式映像檔可與下列開發板相容:

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

日後推出的 SDK 版本可能會更新這份清單,納入更多電台。如需完整的支援部分清單,請參閱「說明文件」底下的 Silicon Labs OpenThread SDK 版本資訊。

分別在各開發板上閃過以下示範。如要 Flash,請在左側的「Debug Adapters」(偵錯轉接程式) 下方選取您的主機板,然後按一下 [RUN] (執行) 存取對應的範例應用程式。彈出式視窗會顯示閃光燈進度。

  1. BRD4166A:ot-rcp - 此裝置將做為 OT 邊界路由器的無線電輔助處理器。我們會使用這部裝置建立 Thread 網路,並連上 Thread 網路的另外兩部裝置。Thread 網路中的裝置也可以做為邊界路由器,用來透過網際網路進行通訊。
  2. 兩部 BRD4168A:ot-cli-ftd - 這兩個裝置會做為 Full Thread 裝置。他們會加入 OTBR 建立的 Thread 網路。