26 KiB
深入了解物聯網
手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看更大版本。
本課程是 Microsoft Reactor 的 Hello IoT 系列 的一部分。課程分為兩段影片進行教學——一小時的課程以及一小時的辦公時間,深入探討課程的部分內容並回答問題。
🎥 點擊上方圖片觀看影片
課前測驗
簡介
本課程將更深入探討上一課中提到的一些概念。
在本課程中,我們將涵蓋以下內容:
物聯網應用的組成部分
物聯網應用的兩個主要組成部分是 網際網路 和 物件。讓我們更詳細地了解這兩個部分。
物件
物聯網中的 物件 指的是能與物理世界互動的設備。這些設備通常是小型、價格低廉的電腦,運行速度較慢且耗電量低——例如,僅有幾千字節 RAM 的簡單微控制器(相比之下,PC 的 RAM 是幾 GB),運行速度僅為幾百 MHz(而 PC 是 GHz 級別),但耗電量極低,有時甚至可以用電池運行數週、數月甚至數年。
這些設備通過使用感測器從周圍環境收集數據,或通過控制輸出或執行器進行物理改變來與物理世界互動。典型的例子是一個智能恆溫器——一個具有溫度感測器、設置目標溫度的方式(如旋鈕或觸控螢幕),以及與加熱或冷卻系統連接的設備,當檢測到的溫度超出目標範圍時,系統會啟動。
可以作為物聯網設備的物件種類繁多,從專門感測某一項的硬體到通用設備,甚至包括你的智能手機!智能手機可以使用感測器檢測周圍環境,並使用執行器與世界互動——例如,使用 GPS 感測器檢測你的地點,並通過揚聲器提供導航指示。
✅ 想一想你周圍有哪些系統會從感測器讀取數據並據此做出決策。一個例子是烤箱的恆溫器。你能找到更多例子嗎?
網際網路
物聯網應用中的 網際網路 部分包括物聯網設備可以連接以發送和接收數據的應用,以及可以處理來自物聯網設備的數據並幫助決策的其他應用,這些決策會發送請求給物聯網設備的執行器。
一個典型的設置是使用某種雲端服務,物聯網設備連接到該服務,該服務處理安全性、接收來自物聯網設備的消息,並將消息發送回設備。這個雲端服務還會連接到其他應用,這些應用可以處理或存儲感測器數據,或者將感測器數據與其他系統的數據結合起來進行決策。
設備並不總是通過 WiFi 或有線連接直接連接到網際網路。有些設備使用網狀網路技術(如藍牙)相互通信,通過具有網際網路連接的集線器設備進行連接。
以智能恆溫器為例,恆溫器通過家庭 WiFi 連接到雲端服務,將溫度數據發送到該服務,然後數據會被寫入某種數據庫,讓房主可以通過手機應用查看當前和過去的溫度。雲端中的另一個服務會知道房主想要的溫度,並通過雲端服務向物聯網設備發送消息,告訴加熱系統開啟或關閉。
更智能的版本可以使用雲端的 AI,結合其他物聯網設備(如檢測房間使用情況的佔用感測器)的數據,以及天氣數據甚至你的日曆,來智能地設置溫度。例如,如果從日曆中讀取到你正在度假,它可以關閉加熱;或者根據你使用的房間逐一關閉加熱,並隨著數據的積累變得越來越準確。
✅ 還有哪些數據可以幫助讓一個連接網際網路的恆溫器變得更智能?
邊緣上的物聯網
雖然物聯網中的 "I" 代表網際網路,但這些設備並不一定要連接到網際網路。在某些情況下,設備可以連接到 "邊緣" 設備——運行在本地網路上的閘道設備,這意味著你可以在不通過網際網路的情況下處理數據。當你有大量數據或網際網路連接速度較慢時,這樣做可以更快;它還允許你在無法連接網際網路的情況下運行,例如在船上或在人道主義危機的災區;此外,它還可以保護數據隱私。一些設備會包含使用雲端工具創建的處理代碼,並在本地運行以收集和響應數據,而無需通過網際網路進行決策。
一個例子是智能家居設備,例如 Apple HomePod、Amazon Alexa 或 Google Home,這些設備會使用在雲端訓練的 AI 模型來聆聽你的聲音,但實際運行在本地設備上。這些設備會在聽到某個詞或短語時 "喚醒",然後才將你的語音通過網際網路發送進行處理。設備會在檢測到語音中的停頓時停止發送語音。你在喚醒設備之前說的話,以及設備停止聆聽後說的話,都不會被發送到設備提供商的網際網路,因此是私密的。
✅ 想一想還有哪些情境中隱私很重要,因此數據處理最好在邊緣完成而不是在雲端完成。提示:想一想帶有攝像頭或其他影像設備的物聯網設備。
物聯網安全性
任何網際網路連接都需要考慮安全性。有一個老笑話說 "物聯網中的 S 代表安全性"——物聯網中沒有 "S",暗示它不安全。
物聯網設備連接到雲端服務,因此它的安全性取決於雲端服務的安全性——如果你的雲端服務允許任何設備連接,那麼惡意數據可能會被發送,或者可能發生病毒攻擊。由於物聯網設備與其他設備互動並進行控制,這可能會帶來非常現實的後果。例如,Stuxnet 蠕蟲 操控離心機中的閥門以損壞它們。黑客還利用安全性不足來訪問嬰兒監視器和其他家庭監控設備。
💁 有時物聯網設備和邊緣設備會運行在完全與網際網路隔離的網路上,以保持數據的私密性和安全性。這被稱為 空氣隔離。
深入了解微控制器
在上一課中,我們介紹了微控制器。現在讓我們更深入地了解它們。
CPU
CPU 是微控制器的 "大腦"。它是運行你的代碼的處理器,並可以向任何連接的設備發送數據或接收數據。CPU 可以包含一個或多個核心——本質上是一個或多個可以協同工作來運行代碼的 CPU。
CPU 依賴於時鐘每秒數百萬或數十億次的滴答聲。每次滴答聲或週期,會同步 CPU 可以執行的操作。每次滴答聲,CPU 可以執行程序中的一條指令,例如從外部設備檢索數據或執行數學計算。這種規律的週期允許所有操作在處理下一條指令之前完成。
時鐘週期越快,每秒可以處理的指令越多,因此 CPU 的速度越快。CPU 的速度以 赫茲 (Hz) 為單位測量,1 Hz 表示每秒一個週期或時鐘滴答。
🎓 CPU 的速度通常以 MHz 或 GHz 表示。1MHz 是 100 萬 Hz,1GHz 是 10 億 Hz。
💁 CPU 使用 取指-解碼-執行週期 執行程序。每次時鐘滴答,CPU 會從記憶體中取出下一條指令,解碼它,然後執行它,例如使用算術邏輯單元 (ALU) 來加兩個數字。一些執行可能需要多個滴答聲才能完成,因此下一個週期會在指令完成後的下一次滴答聲運行。
微控制器的時鐘速度遠低於桌面或筆記本電腦,甚至大多數智能手機。例如,Wio Terminal 的 CPU 運行速度為 120MHz,即每秒 120,000,000 次週期。
✅ 一台普通的 PC 或 Mac 的 CPU 有多個核心,運行速度為數 GHz,這意味著時鐘每秒滴答數十億次。研究一下你的電腦的時鐘速度,並比較它比 Wio Terminal 快多少倍。
每次時鐘週期都會消耗電力並產生熱量。滴答聲越快,消耗的電力越多,產生的熱量也越多。PC 有散熱片和風扇來散熱,否則它們會在幾秒鐘內過熱並關機。微控制器通常沒有這些,因為它們運行得更冷,因此速度更慢。PC 通常使用主電源或大電池運行幾小時,而微控制器可以使用小電池運行數天、數月甚至數年。微控制器還可以有以不同速度運行的核心,當 CPU 的需求較低時切換到較慢的低功耗核心以減少功耗。
💁 一些 PC 和 Mac 也採用了相同的快速高功耗核心和較慢低功耗核心的組合,根據運行的任務在節省電池和提高速度之間切換。例如,最新 Apple 筆記本中的 M1 晶片可以在 4 個性能核心和 4 個效率核心之間切換,以根據任務優化電池壽命或速度。
✅ 做一些研究:閱讀 Wikipedia CPU 文章 了解更多關於 CPU 的資訊。
任務
調查 Wio Terminal。
如果你正在使用 Wio Terminal 進行這些課程,試著找到 CPU。在 Wio Terminal 產品頁面 的 硬體概覽 部分找到內部結構的圖片,並試著通過背面的透明塑膠窗口找到 CPU。
記憶體
微控制器通常有兩種類型的記憶體——程序記憶體和隨機存取記憶體 (RAM)。
程序記憶體是非易失性的,這意味著無論是否有電力供應,寫入其中的內容都會保留。這是存儲程序代碼的記憶體。
RAM 是程序運行時使用的記憶體,包含程序分配的變數和從外設收集的數據。RAM 是易失性的,當電力中斷時,內容會丟失,程序會有效地重置。 🎓 程式記憶體儲存你的程式碼,即使沒有電力也能保留。
🎓 RAM 用於執行程式,當電源中斷時會被重置
與 CPU 一樣,微控制器上的記憶體比 PC 或 Mac 小得多。一台典型的 PC 可能有 8GB(8,000,000,000 字節)的 RAM,每個字節足以存儲一個字母或 0-255 之間的一個數字。而微控制器通常只有幾千字節(KB)的 RAM,一千字節等於 1,000 字節。上述提到的 Wio Terminal 擁有 192KB 的 RAM,即 192,000 字節,比一般 PC 少了超過 40,000 倍!
下圖顯示了 192KB 和 8GB 之間的相對大小差異——中心的小點代表 192KB。
程式存儲空間也比 PC 小。一台典型的 PC 可能有 500GB 的硬碟用於程式存儲,而微控制器可能只有幾千字節或幾百萬字節(MB)的存儲空間(1MB 等於 1,000KB 或 1,000,000 字節)。Wio Terminal 擁有 4MB 的程式存儲空間。
✅ 做一些研究:你正在使用的電腦有多少 RAM 和存儲空間?與微控制器相比如何?
輸入/輸出
微控制器需要輸入和輸出(I/O)連接來從感應器讀取數據並向執行器發送控制信號。它們通常包含多個通用輸入/輸出(GPIO)引腳。這些引腳可以通過軟體配置為輸入(接收信號)或輸出(發送信號)。
🧠⬅️ 輸入引腳用於從感應器讀取數值
🧠➡️ 輸出引腳向執行器發送指令
✅ 你將在後續課程中學到更多相關內容。
任務
研究 Wio Terminal。
如果你正在使用 Wio Terminal 進行這些課程,找到 GPIO 引腳。在 Wio Terminal 產品頁面 的 Pinout diagram 部分,了解每個引腳的功能。Wio Terminal 附帶了一張可以貼在背面的貼紙,上面標有引腳編號,如果還沒貼上,現在可以貼上。
實體大小
微控制器通常體積很小,其中最小的 Freescale Kinetis KL03 MCU 小到可以放進高爾夫球的凹槽中。而 PC 的 CPU 僅處理器本身就可能有 40mm x 40mm 的大小,這還不包括為了防止過熱而需要的散熱片和風扇,這些使得 PC 的 CPU 比完整的微控制器大得多。Wio Terminal 開發套件包含微控制器、外殼、螢幕以及一系列連接和元件,其大小甚至不比裸露的 Intel i9 CPU 大多少,並且比帶有散熱片和風扇的 CPU 小得多!
裝置 | 大小 |
---|---|
Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm |
Wio Terminal | 72mm x 57mm x 12mm |
Intel i9 CPU、散熱片和風扇 | 136mm x 145mm x 103mm |
框架與操作系統
由於速度和記憶體的限制,微控制器不會運行像桌面電腦那樣的操作系統(OS)。讓你的電腦運行的操作系統(Windows、Linux 或 macOS)需要大量的記憶體和處理能力來執行對微控制器來說完全不必要的任務。記住,微控制器通常被編程來執行一個或多個非常特定的任務,而不像 PC 或 Mac 這樣的通用電腦需要支持用戶界面、播放音樂或影片、提供文檔或程式編寫工具、玩遊戲或瀏覽互聯網。
要在沒有操作系統的情況下編程微控制器,你需要一些工具來構建你的程式碼,使其能夠在微控制器上運行,並使用 API 與任何外圍設備通信。每個微控制器都不同,因此製造商通常支持標準框架,這些框架允許你遵循標準的“配方”來構建程式碼,並使其能夠在支持該框架的任何微控制器上運行。
你也可以使用操作系統來編程微控制器——通常被稱為實時操作系統(RTOS),因為它們被設計用來實時處理與外圍設備的數據傳輸。這些操作系統非常輕量化,並提供以下功能:
- 多執行緒,允許你的程式碼同時運行多個程式塊,無論是在多個核心上還是通過在單個核心上輪流執行
- 網絡功能,允許安全地通過互聯網通信
- 圖形用戶界面(GUI)元件,用於在帶有螢幕的設備上構建用戶界面(UI)。
✅ 閱讀一些不同的 RTOS:Azure RTOS、FreeRTOS、Zephyr
Arduino
Arduino 可能是最受歡迎的微控制器框架,特別是在學生、愛好者和創客中。Arduino 是一個開源電子平台,結合了軟體和硬體。你可以從 Arduino 官方或其他製造商購買 Arduino 兼容的開發板,然後使用 Arduino 框架進行編程。
Arduino 開發板使用 C 或 C++ 編程。使用 C/C++ 可以使程式碼編譯得非常小且運行速度快,這對於像微控制器這樣受限的設備來說是必需的。Arduino 應用程式的核心被稱為 sketch,它是包含兩個函數的 C/C++ 程式碼——setup
和 loop
。當開發板啟動時,Arduino 框架程式碼會執行一次 setup
函數,然後不斷重複執行 loop
函數,直到電源關閉。
你可以在 setup
函數中編寫初始化程式碼,例如連接 WiFi 和雲服務或初始化輸入和輸出引腳。而在 loop
函數中,你可以編寫處理程式碼,例如從感應器讀取數據並將其發送到雲端。通常你會在每次循環中加入延遲,例如,如果你只想每 10 秒發送一次感應器數據,你可以在循環結束時加入 10 秒的延遲,這樣微控制器可以進入休眠狀態以節省電力,然後在需要時 10 秒後再次運行循環。
✅ 這種程式架構被稱為 事件循環 或 消息循環。許多應用程式在底層使用這種架構,這也是大多數運行在 Windows、macOS 或 Linux 等操作系統上的桌面應用程式的標準。loop
會監聽來自用戶界面元件(如按鈕)或設備(如鍵盤)的消息,並對其作出響應。你可以在這篇 事件循環的文章 中閱讀更多內容。
Arduino 提供了與微控制器和 I/O 引腳交互的標準庫,這些庫在底層有不同的實現方式,以便在不同的微控制器上運行。例如,delay
函數 會使程式暫停指定的時間,而 digitalRead
函數 會從指定的引腳讀取 HIGH
或 LOW
的值,無論程式碼在哪個開發板上運行。這些標準庫意味著為一塊開發板編寫的 Arduino 程式碼可以重新編譯後在任何其他 Arduino 開發板上運行,只要引腳相同且開發板支持相同的功能。
Arduino 還有一個龐大的第三方庫生態系統,這些庫可以為你的 Arduino 專案添加額外功能,例如使用感應器和執行器或連接到雲端 IoT 服務。
任務
研究 Wio Terminal。
如果你正在使用 Wio Terminal 進行這些課程,重新閱讀你在上一課中編寫的程式碼。找到 setup
和 loop
函數。監控串列輸出,觀察 loop
函數被反覆調用。嘗試在 setup
函數中添加程式碼以寫入串列埠,並觀察這段程式碼每次重新啟動時只被調用一次。嘗試使用側邊的電源開關重新啟動設備,觀察這段程式碼在每次設備重新啟動時都會被調用。
更深入了解單板電腦
在上一課中,我們介紹了單板電腦。現在讓我們更深入地了解它們。
樹莓派
樹莓派基金會 是一家來自英國的慈善機構,成立於 2009 年,旨在推廣計算機科學的學習,特別是在學校層面。作為這一使命的一部分,他們開發了一款單板電腦,稱為樹莓派。目前樹莓派有三種變體——全尺寸版本、較小的 Pi Zero,以及可以嵌入最終 IoT 設備中的計算模組。
最新的全尺寸樹莓派是樹莓派 4B。它擁有一個四核心(4 核)1.5GHz 的 CPU,2GB、4GB 或 8GB 的 RAM,千兆以太網,WiFi,2 個支持 4K 螢幕的 HDMI 埠,一個音頻和複合視頻輸出埠,USB 埠(2 個 USB 2.0 和 2 個 USB 3.0),40 個 GPIO 引腳,一個樹莓派相機模組的相機連接埠,以及一個 SD 卡插槽。所有這些都集成在一塊 88mm x 58mm x 19.5mm 的電路板上,並由 3A 的 USB-C 電源供電。這些起價為 35 美元,比 PC 或 Mac 便宜得多。
💁 還有一款 Pi400 一體機電腦,將 Pi4 集成到鍵盤中。
Pi Zero 更小,功耗更低。它擁有一個單核心 1GHz 的 CPU,512MB 的 RAM,WiFi(在 Zero W 型號中),一個 HDMI 埠,一個 micro-USB 埠,40 個 GPIO 引腳,一個樹莓派相機模組的相機連接埠,以及一個 SD 卡插槽。它的尺寸為 65mm x 30mm x 5mm,功耗非常低。Zero 售價 5 美元,帶 WiFi 的 W 版本售價 10 美元。
🎓 這兩款設備的 CPU 都是 ARM 處理器,而不是大多數 PC 和 Mac 中的 Intel/AMD x86 或 x64 處理器。這些處理器類似於一些微控制器中的 CPU,以及幾乎所有的手機、Microsoft Surface X 和新的 Apple Silicon Mac 中的 CPU。
所有樹莓派變體都運行一個基於 Debian Linux 的操作系統,稱為樹莓派 OS。這個系統有一個精簡版,沒有桌面,非常適合不需要螢幕的“無頭”專案,還有一個完整版本,帶有完整的桌面環境,包括網頁瀏覽器、辦公應用程式、編程工具和遊戲。由於該操作系統是 Debian Linux 的一個版本,你可以安裝任何在 Debian 上運行並為樹莓派內部的 ARM 處理器構建的應用程式或工具。
任務
研究樹莓派。
如果你正在使用樹莓派進行這些課程,閱讀有關電路板上不同硬體元件的資料。
- 你可以在 樹莓派硬體文檔頁面 上找到有關處理器的詳細資訊。閱讀你正在使用的樹莓派所使用的處理器。
- 找到 GPIO 引腳。在 樹莓派 GPIO 文檔 上閱讀更多相關內容。使用 GPIO 引腳使用指南 來識別樹莓派上的不同引腳。
編程單板電腦
單板電腦是完整的電腦,運行完整的操作系統。這意味著你可以使用多種編程語言、框架和工具來編寫程式,而不像微控制器那樣依賴於 Arduino 等框架對開發板的支持。大多數編程語言都有庫可以訪問 GPIO 引腳,以便從感應器和執行器發送和接收數據。
✅ 你熟悉哪些編程語言?它們是否支持 Linux?
在樹莓派上構建 IoT 應用程式最常用的編程語言是 Python。樹莓派有一個龐大的硬體生態系統,幾乎所有這些硬體都包括用於 Python 的相關程式庫。一些生態系統基於“帽子”(hats)——之所以這樣稱呼,是因為它們像帽子一樣坐在樹莓派的頂部,通過一個大插座連接到 40 個 GPIO 引腳上。這些帽子提供了額外的功能,例如螢幕、感應器、遙控車或適配器,允許你插入帶有標準化電纜的感應器。
專業物聯網部署中的單板電腦使用
單板電腦不僅僅是開發套件,它們也被用於專業的物聯網部署。這些電腦能夠提供強大的功能來控制硬件,並執行如運行機器學習模型等複雜任務。例如,Raspberry Pi 4 Compute Module 提供了與 Raspberry Pi 4 相同的性能,但採用更緊湊且更便宜的形式,去掉了大部分的接口,專為嵌入定制硬件而設計。
🚀 挑戰
上一課的挑戰是列出你家中、學校或工作場所中所有你能想到的物聯網設備。對於這些設備中的每一個,你認為它們是基於微控制器、單板電腦,還是兩者的結合?
課後測驗
回顧與自學
- 閱讀 Arduino 入門指南,以更深入了解 Arduino 平台。
- 閱讀 Raspberry Pi 4 簡介,以了解更多關於 Raspberry Pi 的資訊。
- 在 Electrical Engineering Journal 的文章「What the FAQ are CPUs, MPUs, MCUs, and GPUs」 中學習更多相關概念和縮寫。
✅ 使用這些指南,結合 硬件指南 中的鏈接所顯示的成本,決定你想使用哪種硬件平台,或者是否更願意使用虛擬設備。
作業
免責聲明:
本文件已使用人工智能翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。