使用 Silicon Labs EFR32 主機和 OpenThread 使用 Simplicity Studio v5 建立 Thread 網路

1. 簡介

26b7f4f6b3ea0700.png

Google 的 OpenThread (OT) 是開放原始碼的「開放原始碼」。Google 已推出 OpenThread,讓開發人員更廣泛地運用 Google Nest 產品所使用的網路技術,以便加快智慧聯網家庭和商用建築開發產品的速度。OpenThread 具備狹窄的平台抽象層和小型記憶體用量,因此相當可攜性。同時支援晶片系統 (SoC) 和網路共同處理器 (NCP) 設計。

「Thread 規格」針對家用和商用建築應用程式,定義了以 IPv6 為基礎的可靠、安全且低功耗的無線裝置對裝置通訊通訊協定。

Silicon Labs 強化了 OpenThread,可與 Silicon Labs 硬體搭配使用。您可以在 GitHub 上取得這個原始碼,也可當做安裝於 Ssimpley Studio 5 (SSv5) 的軟體開發套件 (SDK) 中。SDK 包含 GitHub 原始碼的完整測試快照。這個程式庫支援比硬體版本更多的硬體,且包括 GitHub 上未提供的文件和範例應用程式。

本指南將說明如何使用 Silicon Labs OpenThread SDK 與 Ssimpley Studio 5 開發 OpenThread 應用程式。下圖顯示使用 OT 邊界路由器 (OTBR) 和程式碼研究室所使用的 Thread 裝置所設定的 Jamboard (BRD) 和硬體。

EFR32MG 硬體設定

課程內容

  • 如何使用 Silicon Labs Ssimpley Studio IDE 建立 OpenThread 專案。
  • 如何建構和刷新 OpenThread CLI 二進位檔並傳送至 Silicon Labs 廣播板。
  • 如何使用 Docker 將 Raspberry Pi 3B+ 以上版本設為 OpenThread Border Router (OTBR)。
  • 如何在 OTBR 上建立 Thread 網路。
  • 裝置外有 1 個網路委任網路。
  • 如何使用 ping 指令驗證節點之間的 Thread 通訊。

2. 必要條件

硬體:

  1. 3 個 EFR32MGxx 無線電板,可以使用這類裝置的任何組合。此程式碼研究室使用 BRD4166A 做為 RCP,使用 BRD4168A 做為完整執行緒裝置。
    • EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A、BRD4180B)
    如果你才剛起步,可以取得包含上述 Jamboard 的 EFR32 Thread 入門套件
  2. BRD4001A:用於代管無線電板的無線入門主板 (WSTK)。除了 BRD4166A 以外,所有收音機皆須有新手主板。供 USB 4166A 連接主板或微型 USB 傳輸線的迷你 USB 傳輸線。

美國運通卡音樂

  1. 具有 Raspbian Stretch Lite OS 映像檔Raspbian Stretch with Desktop (透過桌面連上網路) 的 Raspberry Pi 3B 以上版本。我們將其設定為 OT 邊界路由器。
  2. 擁有至少 2 個 USB 連接埠和網際網路連線的 Windows/Linux/Mac Host 系統。前往 SSv5 查看硬體和作業系統需求。
  3. 至少一張乙太網路線,用於將 Raspberry Pi 連上網際網路。WSTK 也支援透過 IP 進行偵錯及閃爍,因此您也可以使用額外的乙太網路線透過乙太網路轉換器將 WSTK 連接至主機系統。

軟體:

  • 透過
    • GNU ARM 工具鍊
    • Gecko SDK Suite 3.2.0 以上版本和 Silicon Labs OpenThread SDK。

3. 硬體設定

此程式碼研究室是使用

  1. EFR32MG12 BRD4166A Thunderboard Sense 2,如左圖所示。
  2. 右圖顯示兩個 EFR32MG13 BRD4168A
  3. 在 macOS Catalina 10.15.7 上安裝的 Simply Studio v5 與
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

如下圖所示,透過 USB 將各個無線入門套件的主板連接到主機電腦。這些連線將允許對 RCP 和裝置進行程式設計和網路分析。我們會先使用主機電腦,透過 ot-rcp 韌體來編寫 BRD4166A,最終將連線至 Raspberry Pi。也可選擇,一般裝置可以透過通用乙太網路交換器連接至主機電腦。此外,這個入門套件也支援運用 IPv4 進行程式設計和網路分析。

連線

4. 韌體設定

建立網路故事的方法有兩種。這兩個選項皆可讓您執行此程式碼研究室所需的韌體。

  1. 專案:(建議) 建立、建構並刷新範例應用程式。此選項可讓您自訂專案中的應用程式。
  2. 示範:(選用) 針對任何範例應用程式,直接在無線電板上建立預先建立的示範。我們建議使用者嘗試將示範模式設定成選擇性操作。詳情請參閱這個程式碼研究室的「選用韌體設定 - 示範」一節。

我們會針對此程式碼研究室,使用專案導向方法。

使用範例建立專案

我們將建立兩項專案。BRD4166A 的 ot-rcp 專案和這兩個 BRD4168A 的 ot-cli-ftd 專案。請按照下列步驟為你的 Jamboard 選取適當的範例應用程式。

  1. 開啟 Studio 的 [File] 選單,然後選取 [New > Silicon Labs Project 精靈]。系統會隨即開啟「目標」、「SDK」和「工具鍊選擇」對話方塊。請勿變更 OpenThread 支援的預設簡易式 IDE / GNU 工具鍊。點選 [下一步]
    • 目標板:顯示所選取的電台板 (BRD4168A) 以及主板 (BRD4001A)
    • 目標裝置: 這個欄位會顯示內建晶片晶片 (MCU)。BRD4168A 具有 EFR32MG13 MCU。
    • SDK: 在這裡,您可以選取目前使用的 OT SDK SDK 版本。套件資訊包括 SDK 標記和 OpenThread 的 Silicon Labs 版本,例如 Platform 4.0.1.0OpenThread 2.0.1.0 (GitHub-55af6ce2c)
    • IDE/ 工具鍊:用於編譯 OT 專案的工具鍊。我們使用 GNU ARM

新增專案精靈

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

新專案精靈步驟 2

  1. 「專案設定」對話方塊隨即開啟。您可以在其中重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。連結的專案檔案會指向 SDK,以及您所做的任何修改在 SDK 中所做的修改,也可用於後續專案。複製專案來源後,您可以編輯專案本機複本,以便讓 SDK 檔案保持不變。預設選項為 [Link sdk and copy project source&&33;]。按一下 [完成]。

新專案精靈步驟 3

  1. 「SIDEy IDE Perspective」隨即開啟,且「Project Configurator」會開啟「OVERVIEW」分頁。

專案總覽

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

軟體元件

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

建構和 Flash 專案

建構 ot-rcpot-cli-ftd 專案並閃爍。

  1. 專案設定完成後,按一下頂端工具列中的 [建構作業控制項 (鎚圖示)]。或者,您也可以在專案上按一下滑鼠右鍵,然後點選 [build project]。

[建立專案] 按鈕

  1. 「主控台」和「進度列」下方會顯示進度。所有與專案相關的錯誤或警告也會顯示在此輸出視窗中。

專案建構輸出視窗

  1. 成功的映像檔建立之後,系統就會產生二進位檔映像檔。您可以從 Project Explorer 視圖中閃轉二進位映像檔。在編譯器子目錄中找出 .bin、.十六進位 或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取 [Flash 至裝置]。如果您連結了多部裝置,然後選取一部裝置進行設定,再按一下 [確定] 即可。Flash 程式設計師會開啟檔案並填入檔案路徑。按一下 [計劃]

Flash

5. 韌體設定摘要

此時,您應該在廣播板上建立、編譯並閃爍適當的韌體。將 ot-rcp 閃爍到 BRD4166A 後,請中斷與主機系統的連線,然後將這個板連接到 Raspberry Pi。

完成本節所述的步驟後,您的 Thread 網路硬體設定會如下所示。

EFR32MG 設定

6. 為 ot-cli-ftd 裝置設定序列主控台

若要啟動控制台介面,請在 IDE 介面上在裝置檢視 / 偵錯轉接窗視窗中,對 J-Link 裝置按一下滑鼠右鍵。選擇 [Launch 主控台]。如要在主控台上接收提示,請選擇 [序列 1] 標籤並按下 Enter 鍵。檢查 FTD 節點的狀態。

FTD Studio 主控台檢視

您會發現目前還沒有 ot-rcp 的主控台。在下一個步驟中,我們會將 Raspberry Pi 設為 OT 邊界路由器,並設定 ot-rcp 的主控台。

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

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

Silicon Labs OTBR 映像檔託管於 siliconlabsinc DockerHub,含有標記。每個標記都會對應至 GSDK 版本:

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

Docker 容器必須搭配 Ssimpley Studio 5 用於特定版本的 RCP 使用。請務必將容器代碼版本與您測試用的 GSDK 版本進行比對。舉例來說,如果您在「範例專案選擇」視窗中選取了 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 Desktop
  2. 您可以透過 SSH 登入 Raspberry Pi,或選擇直接使用 Raspbian Desktop。開啟終端機。
  3. 請務必更新您的本機存放區和套件管理員 (安裝 Docker 前的 apt-get updateapt-getupgrade)。

安裝 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 的 TTY 連接埠,以便連線 RCP。找出 RCP 裝置的 TTY 連接埠。最簡單的做法是在 RCP 連線後尋找 /tty/dev... 項目。這個值通常為 /dev/ttyUSB0/dev/ttyACM0
  2. 使用下列指令執行 Docker 安裝。請務必將您的 Docker 映像檔名稱替換為相符的 GSDK 版本。例如: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 指令查看容器的執行記錄。
    • 在 Docker 容器正確關閉 (或移除) 之前,--name 會固定。
    • 通訊埠 8080 表示代管邊界管理網頁的網路伺服器通訊埠。
    • ?uart-baudrate=460800

與 RCP 節點互動

當 Docker 執行時,您可以使用下列指令透過互動式殼層與 RCP 節點進行通訊。檢查 RCP 節點的狀態。

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

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

$ docker ps -aq

您可以檢查執行 OTBR Docker 容器的視窗以執行 Border Router 的輸出輸出,或按照下列方式追蹤容器記錄:

$ docker logs [container-id] -f

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

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

選擇性:如要結束殼層,請使用 CNTL + C。

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

  1. Simply Studio 中有兩個 ot-cli-ftd 控制台,並設為完整執行緒裝置。
  2. Raspberry Pi 上的一個 ot-ctl 互動殼層 (已設為 OT 邊界路由器)。

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

8. 建立 Thread 網路

設定 RCP

如要建立網路,我們會先在 OTBR 上使用 ot-ctl 殼層,用來與 RCP 節點進行通訊。請依照下列順序輸入下列指令:

索引

指令

指令說明

預期回應

1

dataset init new

建立新的網路設定。

完成

2

dataset commit active

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

完成

3

ifconfig up

啟用 Thread 介面。

完成

4

thread start

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

完成

等待 10 秒,再顯示執行緒介面。

5

state

查看裝置狀態。這應該是領導者。
其他可能的狀態:離線、已停用、卸離、
子、路由器或勝出版本

領先者
已完成

6

dataset

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

有效時間戳記:1
頻道:20
頻道遮罩:0x07fff800
完整 PAN ID:39ba71f7fc367160
網狀區域安全前置字串:fd5c:c6b:3a17:40b9:/64
網路金鑰:81ae2c2c1c::064
網路金鑰:81ae2c2c1c::0094019

我們會使用 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

查看網路設定。

兒童
完成

執行緒裝置之間的通訊

我們會使用 ping 指令檢查裝置是否能相互通訊。我們需要連線裝置的 IPv6 位址才能使用 ping 指令。您可以使用 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 都會透過 OTBR 的 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) 程序。

9. 恭喜

你已建立 Thread 網路!

你現在知道:

  • 如何使用 Silicon Labs Ssimpley Studio IDE 建立 OpenThread 專案。
  • 如何建構和刷新 OpenThread CLI 二進位檔並傳送至 Silicon Labs 廣播板。
  • 如何使用 Docker 將 Raspberry Pi 3B+ 以上版本設為 OpenThread Border Router (OTBR)。
  • 如何在 OTBR 上建立 Thread 網路。
  • 裝置外有 1 個網路委任網路。
  • 如何使用 ping 指令驗證節點之間的 Thread 通訊。

延伸閱讀

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

10. 選用韌體設定 - 示範

試用版是預先建立的韌體映像檔,可下載到相容裝置。如要找出簡易版 Studio 中針對您的零件是否提供示範,最快的方式就是按一下 [偵錯轉接程式檢視畫面] 下的零件,然後前往啟動器啟動器的「範例專案」和「示範」分頁。停用「範例專案」篩選器,然後勾選「技術類型」之下的「執行緒」圓形按鈕。

Studio 示範

與 OpenThread SDK 搭配使用的預先編譯試用版應用程式映像檔與下列 Jamboard 相容:

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

這份清單可能會在未來的版本中更新,以納入更多廣播板。如需完整的支援部分清單,請參閱「說明文件」中的 Silicon Labs OpenThread SDK 版本資訊。

將下列示範遊玩至各板上。要進行閃爍,請在左側的「偵錯轉接程式」下方選取您的 Jamboard,然後按一下相應範例應用程式的 RUN。彈出式視窗會顯示閃光燈進度。

  1. BRD4166A:ot-rcp — 本裝置將做為無線電 Co 處理器供 OT Border 路由器使用。我們會使用這個裝置建立 Thread 網路,並在 Thread 網路上加入另外兩個裝置。這個裝置也是邊界路由器,同時也是 Thread 網路中裝置的網際網路連線閘道。
  2. 兩個 BRD4168A:ot-cli-ftd — 這兩個裝置會成為完整執行緒裝置。他們將加入 OTBR 建立的 Thread 網路。