跳至主要内容

深入了解物聯網

本課程的手繪筆記概述

手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看大圖。

本課程是 Hello IoT 系列 的一部分,由 Microsoft Reactor 提供。課程分為兩個視頻 - 一個1小時的課程和一個1小時的辦公時間,深入探討課程的部分內容並回答問題。

課程2:深入了解物聯網

課程2:深入了解物聯網 - 辦公時間

🎥 點擊上方圖片觀看視頻

課前測驗

課前測驗

介紹

本課程深入探討上一課中介紹的一些概念。

在本課程中,我們將涵蓋:

物聯網應用的組成部分

物聯網應用的兩個組成部分是 互聯網物件。讓我們更詳細地了解這兩個組成部分。

物件

Raspberry Pi 4

物聯網中的 物件 指的是能夠與物理世界互動的設備。這些設備通常是小型、低價的計算機,運行速度低且功耗低 - 例如,具有幾千字節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)為單位測量,1Hz表示每秒一個週期或時鐘滴答。

🎓 CPU速度通常以MHz或GHz表示。1MHz是100萬Hz,1GHz是10億Hz。

💁 CPU使用取指-解碼-執行週期執行程序。對於每個時鐘滴答,CPU將從內存中取出下一條指令,解碼它,然後執行它,例如使用算術邏輯單元(ALU)來加兩個數字。一些執行將需要多個滴答來運行,因此下一個週期將在指令完成後的下一個滴答運行。

取指-解碼-執行週期顯示從RAM中取出程序中的指令,然後在CPU上解碼和執行

微控制器的時鐘速度比桌面或筆記本電腦,甚至大多數智能手機都低得多。例如,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的RAM,或8,000,000,000字節,每個字節足夠存儲一個字母或0-255之間的數字。微控制器可能只有幾千字節的RAM,1KB是1,000字節。上述的Wio Terminal有192KB的RAM,或192,000字節 - 比普通PC少了40,000多倍!

下圖顯示了192KB和8GB之間的相對大小差異 - 中心的小點代表192KB。

192KB和8GB之間的比較 - 大於40,000倍

程序存儲也比PC小。一台典型的PC可能有500GB的硬盤用於程序存儲,而微控制器可能只有幾千字節或幾兆字節(MB)的存儲(1MB是1,000KB,或1,000,000字節)。Wio Terminal有4MB的程序存儲。

✅ 做一些研究:你用來閱讀這篇文章的計算機有多少RAM和存儲空間?這與微控制器相比如何?

輸入/輸出

微控制器需要輸入和輸出(I/O)連接來從傳感器讀取數據並向執行器發送控制信號。它們通常包含一些通用輸入/輸出(GPIO)引腳。這些引腳可以在軟件中配置為輸入(即接收信號)或輸出(發送信號)。

🧠⬅️ 輸入引腳用於從傳感器讀取值

🧠➡️ 輸出引腳向執行器發送指令

✅ 你將在後續課程中學到更多關於這方面的知識。

任務

調查Wio Terminal。

如果你在這些課程中使用Wio Terminal,請找到GPIO引腳。找到 Wio Terminal產品頁面引腳圖部分,了解哪些引腳是哪些。Wio Terminal附帶了一個可以安裝在背面的引腳號碼貼紙,如果你還沒有安裝,現在就安裝。

物理尺寸

微控制器通常尺寸較小,最小的Freescale Kinetis KL03 MCU足夠小,可以放在高爾夫球的凹痕中。僅PC中的CPU就可以測量40mm x 40mm,這還不包括確保CPU可以運行超過幾秒鐘而不過熱所需的散熱片和風扇,這比完整的微控制器大得多。Wio Terminal開發套件包含微控制器、外殼、屏幕和一系列連接和組件,其尺寸不比裸露的Intel i9 CPU大多少,並且比帶有散熱片和風扇的CPU小得多!

設備尺寸
Freescale Kinetis KL031.6mm x 2mm x 1mm
Wio Terminal72mm x 57mm x 12mm
Intel i9 CPU, 散熱片和風扇136mm x 145mm x 103mm

框架和操作系統

由於速度和記憶體大小較低,微控制器不運行操作系統(OS)在桌面意義上的操作系統。使你的計算機運行的操作系統(Windows、Linux或macOS)需要大量的記憶體和處理能力來運行對微控制器完全不必要的任務。請記住,微控制器通常被編程來執行一個或多個非常特定的任務,而不像PC或Mac這樣的通用計算機需要支持用戶界面、播放音樂或電影、提供編寫文檔或代碼的工具、玩遊戲或瀏覽互聯網。

要在沒有操作系統的情況下編程微控制器,你需要一些工具來構建你的代碼,使其能夠在微控制器上運行,使用可以與任何外圍設備通信的API。每個微控制器都是不同的,因此製造商通常支持標準框架,這些框架允許你遵循標準“配方”來構建你的代碼,並使其在支持該框架的任何微控制器上運行。

你可以使用操作系統編程微控制器 - 通常稱為實時操作系統(RTOS),因為這些操作系統旨在實時處理向外圍設備發送和接收數據。這些操作系統非常輕量級,提供以下功能:

  • 多線程,允許你的代碼同時運行多個代碼塊,無論是在多個內核上還是通過在一個內核上輪流運行
  • 網絡,允許安全地通過互聯網通信
  • 圖形用戶界面(GUI)組件,用於在具有屏幕的設備上構建用戶界面(UI)。

✅ 閱讀一些不同的RTOS:Azure RTOSFreeRTOSZephyr

Arduino

Arduino標誌

Arduino 可能是最受歡迎的微控制器框架,特別是在學生、愛好者和製作者中。Arduino是一個開源電子平台,結合了軟件和硬件。你可以從Arduino本身或其他製造商那裡購買Arduino兼容板,然後使用Arduino框架進行編程。

Arduino板使用C或C++編碼。使用C/C++可以使你的代碼編譯得非常小並運行得非常快,這在受限設備如微控制器上是必需的。Arduino應用程序的核心被稱為草圖,是包含兩個函數的C/C++代碼 - setuploop。當板啟動時,Arduino框架代碼將運行一次 setup 函數,然後將不斷運行 loop 函數,直到電源關閉。

你會在 setup 函數中編寫你的設置代碼,例如連接到WiFi和雲服務或初始化輸入和輸出引腳。然後你的循環代碼將包含處理代碼,例如從傳感器讀取並將值發送到雲。你通常會在每個循環中包含一個延遲,例如,如果你只希望每10秒發送一次傳感器數據,你會在循環結束時添加10秒的延遲,這樣微控制器可以休眠,節省電力,然後在10秒後再次運行循環。

一個Arduino草圖首先運行setup,然後不斷運行loop

✅ 這種程序架構被稱為事件循環消息循環。許多應用程序在底層使用這種架構,並且是大多數在Windows、macOS或Linux等操作系統上運行的桌面應用程序的標準。loop 監聽來自用戶界面組件(如按鈕)或設備(如鍵盤)的消息,並對其做出響應。你可以在這篇事件循環文章中閱讀更多內容。

Arduino提供了與微控制器和I/O引腳交互的標準庫,底層有不同的實現來運行在不同的微控制器上。例如,delay 函數 將暫停程序一段時間,digitalRead 函數 將從給定引腳讀取 HIGHLOW 值,無論代碼運行在哪個板上。這些標準庫意味著為一個板編寫的Arduino代碼可以重新編譯為任何其他Arduino板並運行,假設引腳相同並且板支持相同的功能。

有一個龐大的第三方Arduino庫生態系統,允許你為Arduino項目添加額外功能,例如使用傳感器和執行器或連接到雲物聯網服務。

任務

調查Wio Terminal。

如果你在這些課程中使用Wio Terminal,重新閱讀你在上一課中編寫的代碼。找到 setuploop 函數。監控串行輸出以查看 loop 函數被反复調用。嘗試在 setup 函數中添加代碼以寫入串行端口,並觀察每次重新啟動時此代碼僅被調用一次。嘗試使用側面的電源開關重新啟動設備,以顯示每次設備重新啟動時都會調用此代碼。

深入了解單板電腦

在上一課中,我們介紹了單板電腦。現在讓我們深入了解它們。

樹莓派

樹莓派標誌

Raspberry Pi Foundation 是一家來自英國的慈善機構,成立於2009年,旨在推廣計算機科學的學習,特別是在學校層面。作為這一使命的一部分,他們開發了一種單板電腦,稱為Raspberry Pi。Raspberry Pi目前有3個變體 - 全尺寸版本、較小的Pi Zero和可以內置到最終物聯網設備中的計算模塊。

Raspberry Pi 4

最新的全尺寸Raspberry Pi是Raspberry Pi 4B。它具有四核(4核)CPU,運行速度為1.5GHz,2、4或8GB的RAM,千兆以太網,WiFi,2個支持4k屏幕的HDMI端口,一個音頻和複合視頻輸出端口,USB端口(2個USB 2.0,2個USB 3.0),40個GPIO引腳,一個Raspberry Pi相機模塊的相機連接器和一個SD卡插槽。所有這些都在一個88mm x 58mm x 19.5mm的板上,並由3A USB-C電源供電。這些起價為35美元,比PC或Mac便宜得多。

💁 還有一款Pi400一體機,將Pi4內置在鍵盤中。

Raspberry Pi Zero

Pi Zero更小,功率更低。它具有單核1GHz CPU,512MB的RAM,WiFi(在Zero W型號中),一個HDMI端口,一個micro-USB端口,40個GPIO引腳,一個Raspberry Pi相機模塊的相機連接器和一個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基於Apple Mac中的CPU。

所有變體的Raspberry Pi都運行一個名為Raspberry Pi OS的Debian Linux版本。這有一個精簡版,沒有桌面,這對於不需要屏幕的“無頭”項目非常完美,或者一個完整版本,具有完整的桌面環境,帶有網絡瀏覽器、辦公應用程序、編碼工具和遊戲。由於操作系統是Debian Linux的一個版本,你可以安裝任何在Debian上運行並為Pi內部的ARM處理器構建的應用程序或工具。

任務

調查Raspberry Pi。

如果你在這些課程中使用Raspberry Pi,請閱讀板上不同硬件組件的相關信息。

單板電腦的編程

單板電腦是完整的計算機,運行完整的操作系統。這意味著有廣泛的編程語言、框架和工具可以用來編程它們,不像微控制器依賴於在Arduino等框架中對板的支持。大多數編程語言都有庫可以訪問GPIO引腳,以便從傳感器和執行器發送和接收數據。

✅ 你熟悉哪些編程語言?它們是否支持Linux?

在Raspberry Pi上構建物聯網應用程序最常見的編程語言是Python。有一個龐大的硬件生態系統專為Pi設計,幾乎所有這些都包括使用它們所需的Python庫。一些這些生態系統基於“帽子” - 因為它們像帽子一樣坐在Pi的頂部,並通過一個大插座連接到40個GPIO引腳。這些帽子提供額外的功能,例如屏幕、傳感器、遙控車或適配器,允許你插入帶有標準化電纜的傳感器。

單板電腦在專業物聯網部署中的使用

單板電腦不僅用於開發套件,還用於專業物聯網部署。它們可以提供一種強大的方式來控制硬件並運行複雜的任務,例如運行機器學習模型。例如,有一個Raspberry Pi 4計算模塊,它提供了所有Raspberry Pi 4的功能,但在一個緊湊且更便宜的形式因素中,沒有大多數端口,設計用於安裝到定制硬件中。


🚀 挑戰

上一課的挑戰是列出你家、學校或工作場所中的所有物聯網設備。對於這些設備中的每一個,你認為它們是基於微控制器還是單板電腦,還是兩者的混合?

課後測驗

課後測驗

回顧與自學

✅ 使用這些指南,以及通過硬件指南中的鏈接顯示的成本,決定你想使用哪個硬件平台,或者你是否更願意使用虛擬設備。

作業

比較和對比微控制器和單板電腦