1. 簡介
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 裝置。
課程內容
- 如何使用 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,以及將 BRD4168A 做為完整執行緒裝置。
- EFR32MG12 (BRD4161A、BRD4166A、BRD4170A、BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A、BRD4180B)
- BRD4001A:無線入門主機 (WSTK) 用於代管無線電主機。除了 BRD4166A 以外,所有無線電主機都必須額外提供主機板。輕巧 USB 傳輸線,可用來連接 BRD4166A 的主白板或 micro USB 傳輸線。
- 使用 Raspbian Stretch Lite OS 映像檔或 Raspbian Stretch with Desktop (可在乙太網路上連上網際網路),使用 Raspberry Pi 3B 以上。我們將其設定為 OT 邊界路由器。
- 具備至少 2 個 USB 連接埠和網際網路連線的 Windows/Linux/Mac 主機系統。請前往 SSv5 查看硬體和 OS 需求。
- 至少一條乙太網路纜線,用於將 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。
- 使用 macOS Catalina 10.15.7 的 Simply Studio v5 (
-
)
- Gecko SDK 3.2.0 版
- GNU ARM 7.2.1 版
透過 USB 將每個 Wireless Starter Kit 主面板連接至主機電腦,如下圖所示。這些連線允許針對 RCP 和終端裝置進行程式設計與網路分析。首先,我們要使用主機電腦來編寫 ot rcp 韌體的 BRD4166A,最後再將其連線至 Raspberry Pi。您也可以選擇透過常見的乙太網路外接切換裝置連線到主機電腦。入門套件也支援 IPv4 的程式設計和網路分析。
4. 設定韌體
開始使用的方式有兩種。這兩個選項都可讓您刷新本程式碼研究室所需的韌體。
- 專案:(建議) 建立、建構及刷新的範例應用程式。這個選項可讓您自訂專案中的應用程式。或者
- 示範:(選用) 直接在無線電板上為任何範例應用程式建立預建的展示模式。我們建議使用者將展示模式韌體設為選擇性運動。詳情請參閱本程式碼研究室結尾處的「選用韌體設定 - 示範」一節。
本程式碼研究室會使用專案型方法。
使用範例建立專案
我們會建立兩個專案。2D1166A 的 ot-rcp
專案以及兩個 BRD4168A 的 ot-cli-ftd
專案。請按照下列步驟操作,並為您的應用程式選取適當的範例應用程式。
- 開啟 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.0
和OpenThread 2.0.1.0 (GitHub-55af6ce2c)
。 - IDE/ 工具鍊:用於編譯 OT 專案的工具鍊。我們採用 GNU ARM。
- 範例專案選取對話方塊隨即開啟。畫面會顯示範例專案清單。使用 Thread 技術類型和關鍵字篩選器來搜尋特定範例。請務必記下 Gecko SDK Suite 版本號碼。將 Raspberry Pi 設為邊界路由器時,就必須使用這個版本標記。選取「ot-cli-ftd」,然後點選「NEXT」。
- 「Project Configuration」對話方塊隨即開啟。您可以重新命名專案、變更預設專案檔案位置,以及決定是否要連結或複製專案檔案。已連結的專案檔案會指向 SDK,您進行 SDK 後所做的任何變更,都會套用至日後的專案。複製專案來源後,您就可以編輯專案本機副本,確保 SDK 檔案完整運作。「連結 SDK 和複製專案來源」為預設選項,也是我們建議的選項。按一下「完成」。
- 「Slicy IDE Perspective」會開啟「Project Configurator」並開啟「OVERVIEW」分頁。
專案會從「軟體元件」分頁安裝及解除安裝元件,並設定已安裝的元件,藉此設定專案。系統會檢查已安裝的元件。按一下「Install Components」,即可查看範例應用程式所安裝的元件清單。系統會自動儲存您所做的任何變更,並自動產生專案檔案。簡易版 IDE 的右下角會顯示進度。
在這個範例中,我們會使用範例應用程式的預設設定。重複執行上述步驟,為其他面板建立 ot-rcp
專案。
建構專案並刷新專案
建構並刷新 ot-rcp
和 ot-cli-ftd
專案。
- 設定專案後,按一下頂端工具列中的「Build control (hammer icon)」。或者,您也可以在專案上按一下滑鼠右鍵,然後按一下「Build project」(建構專案)。
- 「Console」(主控台) 和右側進度列會顯示進度。所有與專案相關的錯誤或警告也會顯示在這個輸出視窗中。
- 系統會在成功建構專案後產生二進位檔。您可以在「Project Explorer」檢視畫面中列印二進位映像檔。找出編譯器子目錄中的 .bin、.十六進位或 .s37 檔案。在檔案上按一下滑鼠右鍵,然後選取「Flash 至裝置」。如果您連接多部裝置,請選取一部裝置來進行設定,然後按一下 [確定]。系統會開啟 Flash 程式設計師,並填入檔案路徑。按一下「計劃」。
5. 韌體設定摘要
此時,您應該已建立、編譯並刷適當無線電板上的韌體。ot-rcp
刷卡到 BRD4166A 後,請中斷主機與主機系統的連線,並且將這個白板連接至 Raspberry Pi。
完成這個部分後,Thread 網路硬體設定看起來會像這樣。
6. 為 ot-cli-ftd 裝置設定序列控制台
如要啟動 Console 介面,請在「Slicy IDE」檢視畫面的「裝置檢視」/「偵錯轉接程式」視窗中,在 J-Link 裝置上按一下滑鼠右鍵。選擇「Launch Console」(啟動控制台)。如要在控制台中顯示提示,請選擇「序列 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 容器必須與透過 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
映像檔。
設定 Raspberry Pi
- 確認 SD 卡上的 Raspbian Stretch Lite OS 映像檔或Raspbian Stretch with Desktop 正確無誤。
- 您可以透過 SSH 連線至 Raspberry Pi,或選擇使用 Raspbian Desktop。開啟終端機。
- 安裝 Docker 前,請務必更新本機存放區和套件管理員 (apt-get update 和 apt-get Upgrade)。
安裝 Docker 映像檔
- 在 RPi 中使用下列指令安裝 Docker。
curl -sSL https://get.docker.com | sh
- 完成後,您可以修改 Docker 使用者設定,讓每個指令不需要 sudo。必須重新啟動。
sudo usermod -aG docker $USER
- 請發出以下指令來安裝容器。請注意,使用 RCP 一次只能執行一個 Border 路由器容器。此外,請確保您的 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 安裝作業。請務必以相符的 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 個控制台。
- Simply Studio 中設定為兩個提供完整執行緒裝置的
ot-cli-ftd
控制台。 - 在 Raspberry Pi 上有一個
ot-ctl
互動殼層,設定為 OT 邊界路由器。
現在,我們已完成 Thread 網路了。
8. 建立 Thread 網路
設定 RCP
如要建立網路,我們要在用於與 RCP 節點通訊的 OTBR 上啟動 ot-ctl
殼層。請依序輸入以下指令,如下所示:
索引 | 指令 | 指令說明 | 預期的回應 | ||
1 |
| 建立新的網路設定。 | 完成 | ||
2 |
| 將新資料集提交至使用中的作業資料集。 | 完成 | ||
3 |
| 啟用 Thread 介面。 | 完成 | ||
4 |
| 啟用並附加 Thread 通訊協定作業。 | 完成 | ||
等待 10 秒,讓執行緒介面更新完畢。 | |||||
5 |
| 請查看裝置狀態,本身應是主管。 | 領先 | ||
6 |
| 查看網路設定。 | 使用中的時間戳記:1 |
我們會使用 ot-cli-ftd
中的頻道號碼和網路金鑰將兩個 FTD 加入這個執行緒網路。
設定 FTD ,並將 FTD 新增至我們的 Thread 網路 (非錶帶方法)
使用架構外的方法,我們知道所有安全性資訊並手動新增節點。在 Simply 控制台中,按照下方順序將 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 使用 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.io 和 GitHub,瞭解各種 OpenThread 資源,包括:
- 支援平台 — 探索所有支援 OpenThread 的平台
- 建構 OpenThread - 進一步瞭解如何建立及設定 OpenThread
- Thread Primer — 說明本程式碼研究室提及的所有 Thread 概念
- Silicon Labs OpenThread 訓練:OpenThread 的簡介、討論佣金與邊界路由器,以及建立 OpenThread 網路的實作練習。
- QSG170:晶片化 OpenThread 快速入門指南,其中詳細說明瞭 Silicon Labs Thread 的開發流程
- AN1256:使用 Silicon Labs RCP 搭配 OpenThread 邊界路由器 - Raspberry Pi Border 路由器主機的建立及安裝操作說明
10. 選用的韌體設定 - 示範
示範是預先建構的韌體映像檔,可下載至相容的裝置。如要確認您能否在 Simply Studio 中取得您提供的範例,最快的方法是在「Debug Adapters」檢視畫面下按一下,然後在「Launcher Perspective」的「EXAMPLE PROJECTS & DEMOS」分頁中操作。停用 [範例專案] 篩選器,然後勾選 [技術類型] 下方的 [會話串] 圓形按鈕。
OpenThread SDK 提供的預先編譯應用程式示範圖片可與下列主機相容:
- BRD4161a
- BR146a 巴西雷亞爾
- 4168a 巴西雷亞爾
- 4180 巴西雷亞爾
- 4304 巴西雷亞爾
我們會在日後的 SDK 版本中更新這份清單,加入更多電台。如需完整的支援章節清單,請參閱「說明文件」中的 Silicon Labs OpenThread SDK 版本資訊。
在個別主機上展示以下示範內容。如要刷新,請在左側的「偵錯轉接程式」下方選取面板,然後按一下相應的範例應用程式的「執行」。彈出式視窗會顯示閃光燈的進度。
- BRD4166A:ot-rcp - 本裝置將做為 OT Border 路由器的無線電無線電處理器。我們會使用這部裝置建立 Thread 網路,並將 2 部裝置加入 Thread 網路。當本裝置設為 Border 路由器時,裝置也會成為 Thread 網路中的裝置,透過網際網路透過網際網路進行通訊。
- 兩個 BRD4168A:ot-cli-ftd - 這兩款裝置將做為完整執行緒裝置。他們將加入由 OTBR 建立的 Thread 網路。