|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
深入探討物聯網 (IoT)
手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看更大版本。
本課程是 Hello IoT 系列 的一部分,由 Microsoft Reactor 提供。課程分為兩段影片進行教學——一段為 1 小時的課程,另一段為 1 小時的辦公時間,深入探討課程內容並回答問題。
🎥 點擊上方圖片觀看影片
課前測驗
簡介
本課程將深入探討上一課中提到的一些概念。
在本課程中,我們將涵蓋:
物聯網應用的組成部分
物聯網應用的兩個主要組成部分是 Internet(網際網路)和 Thing(物件)。讓我們更詳細地了解這兩個部分。
物件
物聯網中的 物件 指的是能與物理世界互動的設備。這些設備通常是小型、低成本的計算機,運行速度較低且功耗低——例如,僅有幾千字節 RAM 的簡單微控制器(而非 PC 中的幾千兆字節),運行速度僅為幾百兆赫(而非 PC 中的幾千兆赫),但功耗極低,有時甚至可以用電池運行數週、數月甚至數年。
這些設備通過使用感測器收集周圍環境的數據,或通過控制輸出或執行器進行物理改變來與物理世界互動。典型的例子是智能溫控器——一種具有溫度感測器、可設置所需溫度(如旋鈕或觸摸屏)以及連接到加熱或冷卻系統的設備,當檢測到的溫度超出所需範圍時,系統會啟動。溫度感測器檢測到房間太冷,執行器則啟動加熱系統。
可以作為物聯網設備的物件種類繁多,從專用硬件到一般用途設備,甚至包括您的智能手機!智能手機可以使用感測器檢測周圍環境,並使用執行器與世界互動——例如使用 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 是 1 百萬 Hz,1GHz 是 1 十億 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 這樣的通用電腦需要支援用戶界面、播放音樂或影片、提供文檔或程式編寫工具、玩遊戲或瀏覽網路。
要在沒有 OS 的情況下編程微控制器,你需要一些工具來構建你的程式碼,使其能夠在微控制器上運行,並使用 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 秒的延遲,這樣微控制器可以進入休眠狀態以節省電力,然後在需要時再次運行迴圈。
✅ 這種程式架構被稱為 事件迴圈 或 消息迴圈。許多應用程式在底層使用這種架構,這也是大多數運行在 Windows、macOS 或 Linux 等作業系統上的桌面應用程式的標準。loop
監聽來自用戶界面元件(如按鈕)或裝置(如鍵盤)的消息,並對其作出響應。你可以在這篇 事件迴圈文章 中閱讀更多內容。
Arduino 提供了與微控制器和 I/O 引腳交互的標準庫,這些庫在底層有不同的實現,可以在不同的微控制器上運行。例如,delay
函數 會使程式暫停指定的時間,digitalRead
函數 會從指定的引腳讀取 HIGH
或 LOW
的值,無論程式碼在哪個開發板上運行。這些標準庫意味著為一塊開發板編寫的 Arduino 程式碼可以重新編譯後在任何其他 Arduino 開發板上運行,只要引腳相同且開發板支援相同的功能。
Arduino 還有一個龐大的第三方庫生態系統,這些庫可以為你的 Arduino 專案添加額外的功能,例如使用感測器和執行器或連接到雲端 IoT 服務。
任務
研究 Wio Terminal。
如果你在這些課程中使用 Wio Terminal,重新閱讀你在上一課中編寫的程式碼。找到 setup
和 loop
函數。監控串列輸出,觀察 loop
函數被反覆調用。嘗試在 setup
函數中添加程式碼以寫入串列埠,並觀察這段程式碼在每次重新啟動時僅被調用一次。嘗試使用側面的電源開關重新啟動裝置,觀察每次重新啟動時 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 基於 ARM 的 Mac。
所有型號的樹莓派都運行一個基於 Debian Linux 的作業系統,稱為 Raspberry Pi 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。
✅ 使用這些指南,以及在 硬體指南 中提供的連結所顯示的成本,來決定你想使用哪種硬體平台,或者是否更願意使用虛擬設備。
作業
免責聲明:
本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。