使用 Simply Studio v5 建立含有 Silicon Labs EFR32 白板和 OpenThread 的 Thread 網路

1. 簡介

26b7f4f6b3ea0700.png

Google 的 OpenThread (OT) 是 Thread 的開放原始碼實作功能。Google 已推出 OpenThread,讓開發人員能更廣泛運用 Google Nest 產品的網路技術,進而加快為智慧聯網家庭和商業建築物開發產品的速度。OpenThread 的狹小平台抽象層及記憶體較少,因此相當具有可攜性。並支援系統晶片 (SoC) 和網路輔助處理器 (NCP) 設計。

Thread Spec》(定義規格) 定義了用於居家與商業建構應用程式的 IPv6 穩定、安全和低功率無線裝置對通訊通訊通訊協定。

Silicon Labs 已增強 OpenOpenThread,可搭配 Silicon Labs 硬體使用。您可以前往 GitHub 取得這個原始碼,也可以使用 Simply Studio 5 (SSv5) 安裝的軟體開發套件 (SDK)。這個 SDK 包含經過完整測試的 GitHub 原始碼快照。相較於 GitHub 版本,它支援更多的硬體,其中包含 GitHub 上沒有的說明文件和範例應用程式。

本指南說明如何使用 Silicon Labs OpenThread SDK 和 Simply Studio 5 開始開發 OpenThread 應用程式。下圖顯示白板 (BRD) 和硬體設定 OT B 路由器 (OTBR) 和程式碼研究室中使用的兩個 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,以及將 BRD4168A 做為完整執行緒裝置。
    • EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A、BRD4180B)
    如果你是從零開始,只要取得其中一個 EFR32 Thread 入門套件,即上方列出的白板即可。
  2. BRD4001A:無線入門主機 (WSTK) 用於代管無線電主機。除了 BRD4166A 以外,所有無線電主機都必須額外提供主機板。輕巧 USB 傳輸線,可用來連接 BRD4166A 的主白板或 micro USB 傳輸線。

WSTK AEM

  1. 使用 Raspbian Stretch Lite OS 映像檔Raspbian Stretch with Desktop (可在乙太網路上連上網際網路),使用 Raspberry Pi 3B 以上。我們將其設定為 OT 邊界路由器。
  2. 具備至少 2 個 USB 連接埠和網際網路連線的 Windows/Linux/Mac 主機系統。請前往 SSv5 查看硬體和 OS 需求。
  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. 使用 macOS Catalina 10.15.7 的 Simply Studio v5 (
      )
    1. Gecko SDK 3.2.0 版
    2. GNU ARM 7.2.1 版

BRD4168A

透過 USB 將每個 Wireless Starter Kit 主面板連接至主機電腦,如下圖所示。這些連線允許針對 RCP 和終端裝置進行程式設計與網路分析。首先,我們要使用主機電腦來編寫 ot rcp 韌體的 BRD4166A,最後再將其連線至 Raspberry Pi。您也可以選擇透過常見的乙太網路外接切換裝置連線到主機電腦。入門套件也支援 IPv4 的程式設計和網路分析。

連線

4. 設定韌體

開始使用的方式有兩種。這兩個選項都可讓您刷新本程式碼研究室所需的韌體。

  1. 專案:(建議) 建立、建構及刷新的範例應用程式。這個選項可讓您自訂專案中的應用程式。或者
  2. 示範:(選用) 直接在無線電板上為任何範例應用程式建立預建的展示模式。我們建議使用者將展示模式韌體設為選擇性運動。詳情請參閱本程式碼研究室結尾處的「選用韌體設定 - 示範」一節。

本程式碼研究室會使用專案型方法。

使用範例建立專案

我們會建立兩個專案。2D1166A 的 ot-rcp 專案以及兩個 BRD4168A 的 ot-cli-ftd 專案。請按照下列步驟操作,並為您的應用程式選取適當的範例應用程式。

  1. 開啟 Studio 的「File」選單,然後選取「New」>「Silicon Labs Project Wizard」。系統會開啟「Target」、「SDK」和「Toolchain Selection」對話方塊。請勿變更 OpenThread 支援的預設 IDE / GNU 工具鍊。點選「下一步」
    • 目標板:顯示所選無線電板 (BRD4168A) 以及主面板 (BRD4001A)
    • 目標裝置:這個欄位顯示微控制器晶片 (MCU) 新手上路流程。BRD4168A 已推出 EFR32MG13 MCU。
    • 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」,然後點選「NEXT」

新增專案精靈步驟 2

  1. 「Project Configuration」對話方塊隨即開啟。您可以重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。已連結的專案檔案會指向 SDK,您進行 SDK 後所做的任何變更,都會套用至日後的專案。複製專案來源後,您就可以編輯專案本機副本,確保 SDK 檔案完整運作。「連結 SDK 和複製專案來源」為預設選項,也是我們建議的選項。按一下「完成」

新增專案精靈步驟 3

  1. 「Slicy IDE Perspective」會開啟「Project Configurator」並開啟「OVERVIEW」分頁。

專案總覽

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

軟體元件

在這個範例中,我們會使用範例應用程式的預設設定。重複執行上述步驟,為其他面板建立 ot-rcp 專案。

建構專案並刷新專案

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

  1. 設定專案後,按一下頂端工具列中的「Build control (hammer icon)」。或者,您也可以在專案上按一下滑鼠右鍵,然後按一下「Build project」(建構專案)。

「Build project」(建構專案) 按鈕

  1. 「Console」(主控台) 和右側進度列會顯示進度。所有與專案相關的錯誤或警告也會顯示在這個輸出視窗中。

專案建構輸出視窗

  1. 系統會在成功建構專案後產生二進位檔。您可以在「Project Explorer」檢視畫面中列印二進位映像檔。找出編譯器子目錄中的 .bin、.十六進位或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取「Flash 至裝置」。如果您連接多部裝置,請選取一部裝置來進行設定,然後按一下 [確定]。系統會開啟 Flash 程式設計師,並填入檔案路徑。按一下「計劃」

Flash

5. 韌體設定摘要

此時,您應該已建立、編譯並刷適當無線電板上的韌體。ot-rcp 刷卡到 BRD4166A 後,請中斷主機與主機系統的連線,並且將這個白板連接至 Raspberry Pi。

完成這個部分後,Thread 網路硬體設定看起來會像這樣。

設定 EFR32MG

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

如要啟動 Console 介面,請在「Slicy IDE」檢視畫面的「裝置檢視」/「偵錯轉接程式」視窗中,在 J-Link 裝置上按一下滑鼠右鍵。選擇「Launch Console」(啟動控制台)。如要在控制台中顯示提示,請選擇「序列 1」分頁標籤,然後按下 Enter 鍵。檢查 FTD 節點的狀態。

FTD Studio Console 檢視畫面

您會看到我們還沒有「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 容器必須與透過 Simply Studio 5 建構的 RCP 搭配使用。確保容器標記版本和您要測試的 GSDK 版本相符。舉例來說,假設您從「Sample 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 Desktop 正確無誤。
  2. 您可以透過 SSH 連線至 Raspberry Pi,或選擇使用 Raspbian Desktop。開啟終端機。
  3. 安裝 Docker 前,請務必更新本機存放區和套件管理員 (apt-get updateapt-get Upgrade)。

安裝 Docker 映像檔

  1. 在 RPi 中使用下列指令安裝 Docker。
    curl -sSL https://get.docker.com | sh
    
  2. 完成後,您可以修改 Docker 使用者設定,讓每個指令不需要 sudo。必須重新啟動。
    sudo usermod -aG docker $USER
    
  3. 請發出以下指令來安裝容器。請注意,使用 RCP 一次只能執行一個 Border 路由器容器。此外,請確保您的 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 安裝作業。請務必以相符的 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 指令查看容器的執行記錄檔。
    • 除非固定使用或關閉 Docker 容器,否則 --name 沒有固定狀態。
    • 通訊埠 8080 表示代管邊界路由器管理網頁的網路伺服器通訊埠。
    • 無線電網址選項中的 ?uart-baudrate=460800 需要透過 UART 處理零散 / 重組問題,且使用成本高昂的操作 (例如使用較長的 IPv6 封包)

與 RCP 節點互動

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

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

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

$ docker ps -aq

您可以查看執行 OTBR Docker 容器的視窗,執行 Border 路由器的記錄檔輸出內容,或按照下列方式執行容器記錄:

$ 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

如要建立網路,我們要在用於與 RCP 節點通訊的 OTBR 上啟動 ot-ctl 殼層。請依序輸入以下指令,如下所示:

索引

指令

指令說明

預期的回應

1

dataset init new

建立新的網路設定。

完成

2

dataset commit active

將新資料集提交至使用中的作業資料集。

完成

3

ifconfig up

啟用 Thread 介面。

完成

4

thread start

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

完成

等待 10 秒,讓執行緒介面更新完畢。

5

state

請查看裝置狀態,本身應是主管。
其他可能的狀態:離線、已停用、卸離、
子項、路由器或領導者

領先
完成

6

dataset

查看網路設定。
您的值會與本程式碼研究室不同。
請記下頻道、網路金鑰、
網路名稱和永久帳號 ID。

使用中的時間戳記:1
頻道:20
頻道遮罩:0x07fff800
Ext PAN ID: 39ba71f7fc367160
Mesh 本機前置字串:fd5c:c6b:3a17:40b9::/64
網路金鑰:81ae2c2c26c2629c2602902602602602602602006




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

設定 FTD ,並將 FTD 新增至我們的 Thread 網路 (非錶帶方法)

使用架構外的方法,我們知道所有安全性資訊並手動新增節點。在 Simply 控制台中,按照下方順序將 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 使用 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 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」檢視畫面下按一下,然後在「Launcher Perspective」的「EXAMPLE PROJECTS & DEMOS」分頁中操作。停用 [範例專案] 篩選器,然後勾選 [技術類型] 下方的 [會話串] 圓形按鈕。

Studio 示範

OpenThread SDK 提供的預先編譯應用程式示範圖片可與下列主機相容:

  1. BRD4161a
  2. BR146a 巴西雷亞爾
  3. 4168a 巴西雷亞爾
  4. 4180 巴西雷亞爾
  5. 4304 巴西雷亞爾

我們會在日後的 SDK 版本中更新這份清單,加入更多電台。如需完整的支援章節清單,請參閱「說明文件」中的 Silicon Labs OpenThread SDK 版本資訊。

在個別主機上展示以下示範內容。如要刷新,請在左側的「偵錯轉接程式」下方選取面板,然後按一下相應的範例應用程式的「執行」。彈出式視窗會顯示閃光燈的進度。

  1. BRD4166A:ot-rcp - 本裝置將做為 OT Border 路由器的無線電無線電處理器。我們會使用這部裝置建立 Thread 網路,並將 2 部裝置加入 Thread 網路。當本裝置設為 Border 路由器時,裝置也會成為 Thread 網路中的裝置,透過網際網路透過網際網路進行通訊。
  2. 兩個 BRD4168A:ot-cli-ftd - 這兩款裝置將做為完整執行緒裝置。他們將加入由 OTBR 建立的 Thread 網路。