1. 簡介
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) 和硬體。
課程內容
- 如何使用 Silicon Labs Ssimpley Studio IDE 建立 OpenThread 專案。
- 如何建構和刷新 OpenThread CLI 二進位檔並傳送至 Silicon Labs 廣播板。
- 如何使用 Docker 將 Raspberry Pi 3B+ 以上版本設為 OpenThread Border Router (OTBR)。
- 如何在 OTBR 上建立 Thread 網路。
- 裝置外有 1 個網路委任網路。
- 如何使用 ping 指令驗證節點之間的 Thread 通訊。
2. 必要條件
硬體:
- 3 個 EFR32MGxx 無線電板,可以使用這類裝置的任何組合。此程式碼研究室使用 BRD4166A 做為 RCP,使用 BRD4168A 做為完整執行緒裝置。
- EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A、BRD4180B)
- BRD4001A:用於代管無線電板的無線入門主板 (WSTK)。除了 BRD4166A 以外,所有收音機皆須有新手主板。供 USB 4166A 連接主板或微型 USB 傳輸線的迷你 USB 傳輸線。
- 具有 Raspbian Stretch Lite OS 映像檔或 Raspbian Stretch with Desktop (透過桌面連上網路) 的 Raspberry Pi 3B 以上版本。我們將其設定為 OT 邊界路由器。
- 擁有至少 2 個 USB 連接埠和網際網路連線的 Windows/Linux/Mac Host 系統。前往 SSv5 查看硬體和作業系統需求。
- 至少一張乙太網路線,用於將 Raspberry Pi 連上網際網路。WSTK 也支援透過 IP 進行偵錯及閃爍,因此您也可以使用額外的乙太網路線透過乙太網路轉換器將 WSTK 連接至主機系統。
軟體:
- 透過
- GNU ARM 工具鍊
- Gecko SDK Suite 3.2.0 以上版本和 Silicon Labs OpenThread SDK。
3. 硬體設定
此程式碼研究室是使用
- EFR32MG12 BRD4166A Thunderboard Sense 2,如左圖所示。
- 右圖顯示兩個 EFR32MG13 BRD4168A,
- 在 macOS Catalina 10.15.7 上安裝的 Simply Studio v5 與
- Gecko SDK 3.2.0
- GNU ARM v7.2.1
如下圖所示,透過 USB 將各個無線入門套件的主板連接到主機電腦。這些連線將允許對 RCP 和裝置進行程式設計和網路分析。我們會先使用主機電腦,透過 ot-rcp 韌體來編寫 BRD4166A,最終將連線至 Raspberry Pi。也可選擇,一般裝置可以透過通用乙太網路交換器連接至主機電腦。此外,這個入門套件也支援運用 IPv4 進行程式設計和網路分析。
4. 韌體設定
建立網路故事的方法有兩種。這兩個選項皆可讓您執行此程式碼研究室所需的韌體。
- 專案:(建議) 建立、建構並刷新範例應用程式。此選項可讓您自訂專案中的應用程式。
- 示範:(選用) 針對任何範例應用程式,直接在無線電板上建立預先建立的示範。我們建議使用者嘗試將示範模式設定成選擇性操作。詳情請參閱這個程式碼研究室的「選用韌體設定 - 示範」一節。
我們會針對此程式碼研究室,使用專案導向方法。
使用範例建立專案
我們將建立兩項專案。BRD4166A 的 ot-rcp
專案和這兩個 BRD4168A 的 ot-cli-ftd
專案。請按照下列步驟為你的 Jamboard 選取適當的範例應用程式。
- 開啟 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.0
和OpenThread 2.0.1.0 (GitHub-55af6ce2c)
。 - IDE/ 工具鍊:用於編譯 OT 專案的工具鍊。我們使用 GNU ARM
- 範例專案選取對話方塊隨即開啟。然後您會看見範例專案清單。使用 Thread 技術類型和關鍵字篩選器搜尋特定範例。請務必記下 Gecko SDK Suite 版本號碼。將 Raspberry Pi 設定為邊界路由器時,需要用到此版本標記。選取 ot-cli-ftd,然後點選 [下一步]。
- 「專案設定」對話方塊隨即開啟。您可以在其中重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。連結的專案檔案會指向 SDK,以及您所做的任何修改在 SDK 中所做的修改,也可用於後續專案。複製專案來源後,您可以編輯專案本機複本,以便讓 SDK 檔案保持不變。預設選項為 [Link sdk and copy project source&&33;]。按一下 [完成]。
- 「SIDEy IDE Perspective」隨即開啟,且「Project Configurator」會開啟「OVERVIEW」分頁。
如要設定專案,請在「軟體元件」分頁中設定並解除安裝元件,以及設定已安裝的元件。勾選已安裝的元件。按一下 [已安裝的元件] 即可查看範例應用程式所篩選的元件清單。系統會自動儲存您所做的任何變更,並自動產生專案檔案。進度會顯示在簡易 IDE 的右下角。
在本示範中,我們將使用範例應用程式的預設設定。重複上述步驟,為其他 Jamboard 建立 ot-rcp
專案。
建構和 Flash 專案
建構 ot-rcp
和 ot-cli-ftd
專案並閃爍。
- 專案設定完成後,按一下頂端工具列中的 [建構作業控制項 (鎚圖示)]。或者,您也可以在專案上按一下滑鼠右鍵,然後點選 [build project]。
- 「主控台」和「進度列」下方會顯示進度。所有與專案相關的錯誤或警告也會顯示在此輸出視窗中。
- 成功的映像檔建立之後,系統就會產生二進位檔映像檔。您可以從 Project Explorer 視圖中閃轉二進位映像檔。在編譯器子目錄中找出 .bin、.十六進位 或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取 [Flash 至裝置]。如果您連結了多部裝置,然後選取一部裝置進行設定,再按一下 [確定] 即可。Flash 程式設計師會開啟檔案並填入檔案路徑。按一下 [計劃]。
5. 韌體設定摘要
此時,您應該在廣播板上建立、編譯並閃爍適當的韌體。將 ot-rcp
閃爍到 BRD4166A 後,請中斷與主機系統的連線,然後將這個板連接到 Raspberry Pi。
完成本節所述的步驟後,您的 Thread 網路硬體設定會如下所示。
6. 為 ot-cli-ftd 裝置設定序列主控台
若要啟動控制台介面,請在 IDE 介面上在裝置檢視 / 偵錯轉接窗視窗中,對 J-Link 裝置按一下滑鼠右鍵。選擇 [Launch 主控台]。如要在主控台上接收提示,請選擇 [序列 1] 標籤並按下 Enter 鍵。檢查 FTD 節點的狀態。
您會發現目前還沒有 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
映像檔。
Raspberry Pi 設定
- 在您的 SD 卡上,請務必閃爍 Raspbian Stretch Lite OS 映像檔或 Raspbian Stretch with Desktop。
- 您可以透過 SSH 登入 Raspberry Pi,或選擇直接使用 Raspbian Desktop。開啟終端機。
- 請務必更新您的本機存放區和套件管理員 (安裝 Docker 前的 apt-get update 和 apt-getupgrade)。
安裝 Docker 映像檔
- 在 RPi 中以下列指令安裝 Docker。
curl -sSL https://get.docker.com | sh
- 完成後,您可以將 Docker 使用者設定修改為不需要 sudo 執行每個指令。必須重新啟動。
sudo usermod -aG docker $USER
- 請執行下列指令來安裝容器。請注意,您的 RCP 一次只能執行一個邊界路由器容器。此外,請務必將 Simply Studio GSDK 版本對應到正確的 Docker 映像檔。例如:
gsdk-4.0.1
:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
設定並執行 Docker
- 您必須在設定時設定要用於 OTBR 的 TTY 連接埠,以便連線 RCP。找出 RCP 裝置的 TTY 連接埠。最簡單的做法是在 RCP 連線後尋找
/tty/dev
... 項目。這個值通常為/dev/ttyUSB0
或/dev/ttyACM0
。 - 使用下列指令執行 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 個控制台。
- Simply Studio 中有兩個
ot-cli-ftd
控制台,並設為完整執行緒裝置。 - Raspberry Pi 上的一個
ot-ctl
互動殼層 (已設為 OT 邊界路由器)。
現在我們已準備好建立 Thread 網路了。
8. 建立 Thread 網路
設定 RCP
如要建立網路,我們會先在 OTBR 上使用 ot-ctl
殼層,用來與 RCP 節點進行通訊。請依照下列順序輸入下列指令:
索引 | 指令 | 指令說明 | 預期回應 | ||
1 |
| 建立新的網路設定。 | 完成 | ||
2 |
| 將新資料集修訂至有效的作業資料集。 | 完成 | ||
3 |
| 啟用 Thread 介面。 | 完成 | ||
4 |
| 啟用並附加 Thread 通訊協定作業。 | 完成 | ||
等待 10 秒,再顯示執行緒介面。 | |||||
5 |
| 查看裝置狀態。這應該是領導者。 | 領先者 | ||
6 |
| 查看網路設定。 | 有效時間戳記:1 |
我們會使用 ot-cli-ftd
的頻道編號與聯播網金鑰加入這個 FTD 聯播網。
設定 FTD,並將其新增到我們的 Thread 網路 (超出頻帶)
透過架構外的方法,我們知道所有安全性資訊,並手動新增節點。在「簡易主控台」主控台中,會按照以下順序將兩個 FTD 新增到我們的網路。
索引 | 指令 | 指令說明 | 預期回應 | ||
1 |
| 設定 OTBR 所使用的頻道。 | 完成 | ||
2 |
| 只有裝置才需要提供網路金鑰,才能連接到 Thread 網路。 | 完成 | ||
3 |
| 將新資料集修訂至有效的作業資料集。 | 完成 | ||
4 |
| 啟用 Thread 介面。 | 完成 | ||
5 |
| 啟用並附加 Thread 通訊協定作業。 | 完成 | ||
等候 20 秒,讓裝置加入並進行自行設定。 | |||||
6 |
| 查看網路設定。 | 兒童 |
執行緒裝置之間的通訊
我們會使用 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.io 和 GitHub,查看各種 OpenThread 資源,包括:
- 支援平台 — 探索所有支援 OpenThread 的平台
- 建構 OpenThread — 有關建構和設定 OpenThread 的詳細說明
- Thread Primer — 涵蓋這個程式碼研究室中所有 Thread 概念
- Silicon Labs OpenThread Training:
- QSG170:Silicon Labs OpenThread 快速入門指南:詳細說明 Silicon Labs Thread 開發的入門流程
- AN1256:將 Silicon Labs RCP 與 OpenThread Border Router 搭配使用 - Raspberry Pi Border Router Host 的建構和安裝操作說明
10. 選用韌體設定 - 示範
試用版是預先建立的韌體映像檔,可下載到相容裝置。如要找出簡易版 Studio 中針對您的零件是否提供示範,最快的方式就是按一下 [偵錯轉接程式檢視畫面] 下的零件,然後前往啟動器啟動器的「範例專案」和「示範」分頁。停用「範例專案」篩選器,然後勾選「技術類型」之下的「執行緒」圓形按鈕。
與 OpenThread SDK 搭配使用的預先編譯試用版應用程式映像檔與下列 Jamboard 相容:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
這份清單可能會在未來的版本中更新,以納入更多廣播板。如需完整的支援部分清單,請參閱「說明文件」中的 Silicon Labs OpenThread SDK 版本資訊。
將下列示範遊玩至各板上。要進行閃爍,請在左側的「偵錯轉接程式」下方選取您的 Jamboard,然後按一下相應範例應用程式的 RUN。彈出式視窗會顯示閃光燈進度。
- BRD4166A:ot-rcp — 本裝置將做為無線電 Co 處理器供 OT Border 路由器使用。我們會使用這個裝置建立 Thread 網路,並在 Thread 網路上加入另外兩個裝置。這個裝置也是邊界路由器,同時也是 Thread 網路中裝置的網際網路連線閘道。
- 兩個 BRD4168A:ot-cli-ftd — 這兩個裝置會成為完整執行緒裝置。他們將加入 OTBR 建立的 Thread 網路。