1. 簡介
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 裝置。
課程內容
- 如何使用 Silicon Labs Simply Studio IDE 建立 OpenThread 專案。
- 如何建構 OpenThread CLI 二進位檔,並刷新至 Silicon Labs 無線電板。
- 如何使用 Docker 將 Raspberry Pi 3B 以上版本設為 OpenThread 邊界路由器 (OTBR)。
- 如何在 OTBR 建立 Thread 網路。
- 從頻外將裝置傳送到 Thread 網路。
- 如何使用連線偵測 (ping) 指令驗證節點之間的執行緒通訊。
2. 必要條件
硬體:
- 3 EFR32MGxx 無線電主機 - 可與這些裝置搭配使用。本程式碼研究室使用 BRD4166A 做為 RCP,以及兩個 BRD4168 做為完整 Thread 裝置。
- EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
- EFR32MG13 (巴西4168A)
- EFR32MG21 (BRD4180A、BRD4180B)
- BRD4001A:無線入門主板 (WSTK),用於代管無線電板。除了 BRD4166A 以外,所有無線電板都需要入門主面板。可使用迷你 USB 傳輸線連接主板或 BRD4166A 的 Micro USB 傳輸線。
- Raspberry Pi 3B 以上版本。配備 Raspbian Stretch Lite OS 映像檔或 Raspbian Stretch with Desktop,且須透過乙太網路連線至網際網路。我們將此設為 OT 邊界路由器
- 具備至少 2 個 USB 連接埠且具備網際網路連線的 Windows/Linux/Mac 主機系統。如要瞭解硬體和 OS 的需求條件,請參閱 SSv5。
- 至少一條乙太網路線用於將 Raspberry Pi 連至網際網路。WSTK 也支援透過 IP 偵錯和刷新,因此您可以選擇額外的乙太網路線,透過乙太網路開關將 WSTK 連接到主機系統。
軟體:
- Simply Studio v5 在 Windows/Linux/Mac 主機系統上安裝及更新,方法是:
- GNU ARM 工具鍊
- Gecko SDK Suite 3.2.0 以上版本和 Silicon Labs OpenThread SDK。
3. 硬體設定
本程式碼研究室是使用
- EFR32MG12 BRD4166A Thunderboard Sense 2,如左圖所示。
- 如右圖所示,兩個 EFR32MG13 BRD4168A。
- Simply Studio v5 安裝在 macOS Catalina 10.15.7 上,且已安裝
- Gecko SDK 3.2.0 版
- GNU ARM 7.2.1 版
如下圖所示,透過 USB 將每個無線入門套件主面板連接至主機電腦。這些連線將允許 RCP 和終端裝置的程式設計和網路分析。我們會先使用主機電腦使用 ot-rcp 韌體編寫 BRD4166A,最後再將其連接至 Raspberry Pi。(選用) 終端裝置可以透過常見的乙太網路開關連接至主機電腦。入門套件也支援透過 IPv4 進行程式設計和網路分析。
4. 韌體設定
你可以透過兩種方式著手。這兩種選項都能讓您刷新本程式碼研究室所需的韌體。
- 專案:(建議) 建立、建構並刷新範例應用程式。這個選項可讓您自訂專案中的應用程式。
- 示範:(選擇性) 直接在任何範例應用程式的電台上,刷新預先建立的示範內容。我們鼓勵使用者嘗試將 Demos 韌體設定為選擇性練習。請參閱「選用韌體設定 - 示範」。
本程式碼研究室將使用以專案為基礎的方法。
使用範例建立專案
我們會建立兩個專案BRD4166A 的 ot-rcp
專案以及兩個 BRD4168A 的 ot-cli-ftd
專案。請按照以下步驟操作,為您的開發板選取合適的範例應用程式。
- 開啟 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.0
和OpenThread 2.0.1.0 (GitHub-55af6ce2c)
。 - IDE/ 工具鍊:用於編譯 OT 專案的工具鍊。我們使用 GNU ARM。
- 系統會隨即開啟範例專案選項對話方塊。您會看到範例專案清單。使用 Thread 技術類型和關鍵字篩選器,搜尋特定範例。請務必記下 Gecko SDK Suite 版本號碼。將 Raspberry Pi 設為邊界路由器時,會需要這個版本標記。選取「ot-cli-ftd」ot-cli-ftd,然後點選「下一步」ot-cli-ftd。
- 系統會開啟「Project Configuration」對話方塊。您可以在這裡重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。連結的專案檔案會指向 SDK,而您所做的任何修改都會在 SDK 中生效,並用於日後的專案。複製專案來源後,您就能編輯專案本機副本,讓 SDK 檔案維持不變。「連結 SDK 並複製專案來源」是預設選項,也是建議採用的選項按一下「結束」。
- 系統會開啟簡便的 IDE 觀點,並將「Project Configurator」開啟至「OVERVIEW」分頁。
您可以透過「軟體元件」分頁安裝及解除安裝元件,並設定已安裝的元件,藉此設定專案。已安裝的元件會經過檢查。按一下「已安裝的元件」,即可查看範例應用程式所安裝的元件篩選清單。系統會自動儲存您所做的任何變更,並自動產生專案檔案。進度會顯示在簡易 IDE 視角的右下角。
在本次示範中,我們將使用範例應用程式的預設設定。重複上述步驟來為您的其他主面板建立 ot-rcp
專案。
建構及刷新專案
建構及刷新 ot-rcp
和 ot-cli-ftd
專案。
- 專案設定完成後,按一下頂端工具列中的「Build Control (鎚子圖示)」。您也可以在專案上按一下滑鼠右鍵,然後點選「建構專案」。
- 進度會顯示在控制台中,右下角會顯示進度列。與專案相關的任何錯誤或警告也會顯示在這個輸出視窗中。
- 成功建構專案後,會產生二進位檔映像檔。您可以透過「Project Explorer」檢視畫面刷新二進位映像檔。在編譯器子目錄中找出 .bin、.十六進位或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取「Flash to Device」。如果您連結多部裝置,請選取要加入計畫的裝置,請按一下「確定」。Flash 程式設計師隨即開啟,並填入檔案路徑。按一下「計畫」。
5. 韌體設定摘要
此時,您應該已在無線電板上建立、編譯並刷新合適的韌體。將 ot-rcp
刷新至 BRD4166A 後,請將其與主機系統中斷連線,並將這個 Jamboard 連結至 Raspberry Pi。
完成本節後,Thread 網路硬體設定看起來會像這樣。
6. 為下列項目設定序列控制台: 二氧化碳裝置
如要啟動控制台介面,請在簡易的 IDE 檢視模式的「Device View / Debug Adapters」視窗中,在 J-Link 裝置上按一下滑鼠右鍵。選擇「Launch Console」。如要在控制台中接收提示,請選擇「Serial 1」分頁標籤,然後按下 Enter 鍵。檢查 FTD 節點的狀態。
您會發現我們尚未提供 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
圖片。
Raspberry Pi 設定
- 務必在 SD 卡上刷新 Raspbian Stretch Lite OS 映像檔或 Raspbian Stretch with 電腦。
- 你可以透過 SSH 連線至 Raspberry Pi,或是選擇直接使用 Raspbian Desktop。開啟終端機。
- 請務必更新本機存放區和套件管理員 (安裝 Docker 前請先更新 apt-get update 和 apt-get 升級)。
安裝 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 連線時,用於 OTBR 連線 RCP 的 TTY 通訊埠。找出 RCP 裝置的 TTY 連接埠。最簡單的做法是在 RCP 連線後尋找
/tty/dev
... 項目。通常應為/dev/ttyUSB0
或/dev/ttyACM0
。 - 使用下列指令執行 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 個控制台。
- 在 Simply Studio 中有兩個
ot-cli-ftd
控制台,分別設為 Full Thread 裝置。 - 在 Raspberry Pi 上有一個
ot-ctl
互動式殼層,並設為 OT 邊界路由器。
現在我們已準備好建立 Thread 網路。
8. 建立 Thread 網路
設定 RCP
如要建立網路,我們從 OTBR 上的 ot-ctl
Shell 開始,這個殼層用於與 RCP 節點通訊。請依序輸入下列指令:
索引 | 指令 | 指令說明 | 預期的回應 | ||
1 |
| 建立新的網路設定。 | 完成 | ||
2 |
| 將新資料集修訂為有效作業資料集。 | 完成 | ||
3 |
| 啟用 Thread 介面。 | 完成 | ||
4 |
| 啟用並附加 Thread 通訊協定作業。 | 完成 | ||
等待 10 秒,讓執行緒介面啟動。 | |||||
5 |
| 請檢查裝置狀態。你應該是領導者。 | Leader | ||
6 |
| 查看網路設定。 |
我們會使用 ot-cli-ftd
上的頻道編號和網路金鑰,將兩個 FTD 加入這個執行緒網路。
設定 FTD 並新增至 Thread 網路 (頻外做法)
透過頻外方法,我們可以知道所有安全性資訊,並手動新增節點。在簡單易用的控制台中,使用下列指令以下列順序將 FTD 新增至我們的網路。
索引 | 指令 | 指令說明 | 預期的回應 | ||
1 |
| 設定 OTBR 使用的通道。 | 完成 | ||
2 |
| 裝置只需要網路金鑰即可連接至 Thread 網路。 | 完成 | ||
3 |
| 將新資料集修訂為有效作業資料集。 | 完成 | ||
4 |
| 啟用 Thread 介面。 | 完成 | ||
5 |
| 啟用並附加 Thread 通訊協定作業。 | 完成 | ||
等待 20 秒,讓裝置自行加入及設定裝置。 | |||||
6 |
| 查看網路設定。 | 孩子 |
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.io 和 GitHub 查看各種 OpenThread 資源,包括:
- 支援平台 - 找出所有支援 OpenThread 的平台
- 建構 OpenThread - 進一步瞭解建構及設定 OpenThread
- Thread Primer - 涵蓋本程式碼研究室介紹的所有 Thread 概念
- Silicon Labs OpenThread 訓練:OpenThread 簡介、討論調用路由器和邊界路由器,以及建立 OpenThread 網路的實作練習。
- QSG170:Silicon Labs OpenThread 快速入門指南 - 詳細說明 Silicon Labs Thread 開發入門程序
- AN1256:搭配 OpenThread 邊界路由器使用 Silicon Labs RCP - Raspberry Pi 邊界路由器主機的建置和安裝操作說明
10. 選用韌體設定 - 示範
試用版是預先建構的韌體映像檔,可下載到相容裝置。如果要在 Simply Studio 中查詢所需工具是否提供示範,最快的方法是在「Debug Adapters」檢視畫面下方點選所需部分,然後前往範例專案,啟動器視角的「示範」分頁停用「Example Projects」篩選器,並勾選「技術類型」底下的 [Thread ] 圓形按鈕。
OpenThread SDK 提供的預先編譯試用版應用程式映像檔可與下列開發板相容:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
日後推出的 SDK 版本可能會更新這份清單,納入更多電台。如需完整的支援部分清單,請參閱「說明文件」底下的 Silicon Labs OpenThread SDK 版本資訊。
分別在各開發板上閃過以下示範。如要 Flash,請在左側的「Debug Adapters」(偵錯轉接程式) 下方選取您的主機板,然後按一下 [RUN] (執行) 存取對應的範例應用程式。彈出式視窗會顯示閃光燈進度。
- BRD4166A:ot-rcp - 此裝置將做為 OT 邊界路由器的無線電輔助處理器。我們會使用這部裝置建立 Thread 網路,並連上 Thread 網路的另外兩部裝置。Thread 網路中的裝置也可以做為邊界路由器,用來透過網際網路進行通訊。
- 兩部 BRD4168A:ot-cli-ftd - 這兩個裝置會做為 Full Thread 裝置。他們會加入 OTBR 建立的 Thread 網路。