C,讀作 *I-squared-C*,是一種多控制器、多外設的通訊協議,任何連接的設備都可以作為控制器或外設,通過 I 2C 有速度限制,並且有三種不同模式以固定速度運行。最快的模式是高速模式,最大速度為 3.4Mbps(每秒百萬位元),但支持該速度的設備非常少。例如,Raspberry Pi 的速度限制在快速模式下為 400Kbps(每秒千位元)。標準模式的速度為 100Kbps。 💁 如果你使用 Raspberry Pi 和 Grove Base hat 作為你的 IoT 硬件,你會看到板上有多個 I2C 插座,可以用來與 I2C 傳感器通信。模擬 Grove 傳感器也使用 I2C 和 ADC(模擬數字轉換器)將模擬值作為數字數據發送,因此你使用的光傳感器模擬了一個模擬引腳,並通過 I2C 發送值,因為 Raspberry Pi 只支持數字引腳。 ### 通用異步接收器-發射器 (UART) UART 涉及物理電路,允許兩個設備進行通信。每個設備都有兩個通信引腳——發射 (Tx) 和接收 (Rx),第一個設備的 Tx 引腳連接到第二個設備的 Rx 引腳,第二個設備的 Tx 引腳連接到第一個設備的 Rx 引腳。這使得數據可以雙向傳輸。 * 設備 1 從其 Tx 引腳發送數據,設備 2 在其 Rx 引腳接收數據 * 設備 1 在其 Rx 引腳接收由設備 2 從其 Tx 引腳發送的數據 ![UART 的 Tx 引腳連接到另一個芯片的 Rx 引腳,反之亦然](../../../../../translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hk.png) 🎓 數據是一次發送一位,這被稱為*串行*通信。大多數操作系統和微控制器都有*串行端口*,即可以向你的代碼提供串行數據的連接。 UART 設備有一個 [波特率](https://wikipedia.org/wiki/Symbol_rate)(也稱為符號率),即數據以每秒位數發送和接收的速度。一個常見的波特率是 9,600,意味著每秒發送 9,600 位(0 和 1)的數據。 UART 使用起始位和停止位——即它發送一個起始位來表示即將發送一個字節(8 位)數據,然後在發送完 8 位後發送一個停止位。 UART 的速度取決於硬件,但即使是最快的實現也不超過 6.5 Mbps(每秒百萬位元,或每秒發送的 0 或 1 數據)。 你可以通過 GPIO 引腳使用 UART——你可以設置一個引腳為 Tx,另一個引腳為 Rx,然後將它們連接到另一個設備。 💁 如果你使用 Raspberry Pi 和 Grove Base hat 作為你的 IoT 硬件,你會看到板上有一個 UART 插座,可以用來與使用 UART 協議的傳感器通信。 ### 串行外設接口 (SPI) SPI 是為短距離通信設計的,例如在微控制器上與存儲設備(如閃存)通信。它基於控制器/外設模型,單個控制器(通常是 IoT 設備的處理器)與多個外設交互。控制器通過選擇一個外設並發送或請求數據來控制所有操作。 💁 與 I2C 一樣,控制器和外設這些術語是最近的改變,因此你可能仍然會看到使用舊術語。 SPI 控制器使用 3 根線,外加每個外設額外的一根線。外設使用 4 根線。這些線包括: | 線 | 名稱 | 描述 | | ---- | --------- | ----------- | | COPI | 控制器輸出,外設輸入 | 這根線用於將數據從控制器發送到外設。 | | CIPO | 控制器輸入,外設輸出 | 這根線用於將數據從外設發送到控制器。 | | SCLK | 串行時鐘 | 這根線以控制器設置的速率發送時鐘信號。 | | CS | 芯片選擇 | 控制器有多根線,每個外設一根,每根線連接到相應外設的 CS 線。 | ![一個控制器和兩個外設的 SPI](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hk.png) CS 線用於一次激活一個外設,通過 COPI 和 CIPO 線進行通信。當控制器需要更換外設時,它會停用連接到當前激活外設的 CS 線,然後激活連接到下一個外設的線。 SPI 是*全雙工*的,這意味著控制器可以同時從同一外設發送和接收數據,使用 COPI 和 CIPO 線。SPI 使用 SCLK 線上的時鐘信號來保持設備同步,因此不像直接通過 UART 發送那樣需要起始位和停止位。 SPI 沒有定義的速度限制,實現通常能夠每秒傳輸多兆字節的數據。 IoT 開發套件通常支持通過一些 GPIO 引腳使用 SPI。例如,在 Raspberry Pi 上,你可以使用 GPIO 引腳 19、21、23、24 和 26 進行 SPI。 ### 無線 一些傳感器可以通過標準無線協議進行通信,例如藍牙(主要是藍牙低功耗,或 BLE)、LoRaWAN(一種**Lo**ng **Ra**nge 低功耗網絡協議)或 WiFi。這些允許遠程傳感器不需要物理連接到 IoT 設備。 一個例子是商業土壤濕度傳感器。這些傳感器會測量田地中的土壤濕度,然後通過 LoRaWAN 將數據發送到集線設備,該設備會處理數據或通過互聯網發送。這使得傳感器可以遠離管理數據的 IoT 設備,減少功耗以及對大型 WiFi 網絡或長電纜的需求。 BLE 在高級傳感器中很受歡迎,例如用於手腕上的健身追蹤器。這些設備結合了多個傳感器,並通過 BLE 將傳感器數據發送到你的手機等 IoT 設備。 ✅ 你身上、家裡或學校裡是否有任何藍牙傳感器?這些可能包括溫度傳感器、佔用傳感器、設備追蹤器和健身設備。 商業設備的一種流行連接方式是 Zigbee。Zigbee 使用 WiFi 在設備之間形成網狀網絡,每個設備盡可能多地連接到附近的設備,形成像蜘蛛網一樣的大量連接。當一個設備想要向互聯網發送消息時,它可以將消息發送到最近的設備,然後由這些設備轉發給其他附近的設備,如此類推,直到到達協調器並可以發送到互聯網。 🐝 Zigbee 的名字來源於蜜蜂返回蜂巢後的搖擺舞。 ## 測量土壤中的濕度水平 你可以使用土壤濕度傳感器、IoT 設備和一盆室內植物或附近的一片土壤來測量土壤中的濕度水平。 ### 任務 - 測量土壤濕度 按照相關指南使用你的 IoT 設備測量土壤濕度: * [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) * [單板計算機 - Raspberry Pi](pi-soil-moisture.md) * [單板計算機 - 虛擬設備](virtual-device-soil-moisture.md) ## 傳感器校準 傳感器依賴於測量電氣特性,例如電阻或電容。 🎓 電阻,以歐姆 (Ω) 為單位,表示電流通過某物時的阻力有多大。當電壓施加到材料上時,通過它的電流量取決於材料的電阻。你可以在 [Wikipedia 的電阻頁面](https://wikipedia.org/wiki/Electrical_resistance_and_conductance) 上了解更多。 🎓 電容,以法拉 (F) 為單位,表示元件或電路收集和存儲電能的能力。你可以在 [Wikipedia 的電容頁面](https://wikipedia.org/wiki/Capacitance) 上了解更多。 這些測量值並不總是有用——想像一下,一個溫度傳感器給你一個 22.5KΩ 的測量值!因此,測量值需要通過校準轉換為有用的單位——即將測量值與測量的量匹配,以便新測量值可以轉換為正確的單位。 一些傳感器是預先校準的。例如,你在上一課中使用的溫度傳感器已經校準,可以返回以 °C 為單位的溫度測量值。在工廠中,第一個傳感器會暴露於一系列已知溫度,並測量電阻。然後,這些數據會用於建立一個計算公式,可以將測量值從 Ω(電阻的單位)轉換為 °C。 💁 計算電阻與溫度的公式稱為 [Steinhart–Hart 方程](https://wikipedia.org/wiki/Steinhart–Hart_equation)。 ### 土壤濕度傳感器校準 土壤濕度是通過重力或體積含水量測量的。 * 重力含水量是測量每單位重量土壤中的水重量,單位為每公斤干土中的公斤水 * 體積含水量是測量每單位體積土壤中的水體積,單位為每立方米干土中的立方米水 🇺🇸 對於美國人,由於單位的一致性,這些可以用磅代替公斤或立方英尺代替立方米進行測量。 土壤濕度傳感器測量電阻或電容——這不僅因土壤濕度而異,還因土壤類型而異,因為土壤中的成分會改變其電氣特性。理想情況下,傳感器應進行校準——即從傳感器獲取讀數並與使用更科學方法獲得的測量值進行比較。例如,實驗室可以使用特定田地的樣本幾次一年計算重力土壤濕度,並使用這些數據校準傳感器,將傳感器讀數與重力土壤濕度匹配。 ![電壓與土壤濕度含量的圖表](../../../../../translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hk.png) 上圖顯示了如何校準傳感器。電壓是通過土壤樣本捕獲的,然後通過實驗室測量濕重與干重進行測量(通過測量濕重,然後在烤箱中烘干並測量干重)。一旦獲得了一些讀數,就可以將它們繪製在圖表上並擬合一條線。這條線可以用來將 IoT 設備的土壤濕度傳感器讀數轉換為實際的土壤濕度測量值。 💁 對於電阻式土壤濕度傳感器,隨著土壤濕度的增加,電壓會增加。對於電容式土壤濕度傳感器,隨著土壤濕度的增加,電壓會減少,因此這些圖表的斜率會向下而不是向上。 ![從圖表中插值的土壤濕度值](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hk.png) 上圖顯示了土壤濕度傳感器的電壓讀數,通過將其追蹤到圖表上的線,可以計算出實際的土壤濕度。 這種方法意味著農民只需要為田地獲得一些實驗室測量值,然後他們可以使用 IoT 設備測量土壤濕度——大大加快了測量的速度。 --- ## 🚀 挑戰 電阻式和電容式土壤濕度傳感器有許多差異。這些差異是什麼?哪種類型(如果有的話)最適合農民使用?這個答案是否會因發展中國家和已開發國家而改變? ## 課後測驗 [課後測驗](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) ## 回顧與自學 閱讀有關傳感器和執行器使用的硬件和協議: * [GPIO Wikipedia 頁面](https://wikipedia.org/wiki/General-purpose_input/output) * [UART Wikipedia 頁面](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) * [SPI Wikipedia 頁面](https://wikipedia.org/wiki/Serial_Peripheral_Interface) * [I2C Wikipedia 頁面](https://wikipedia.org/wiki/I²C) * [Zigbee Wikipedia 頁面](https://wikipedia.org/wiki/Zigbee) ## 作業 [校準你的傳感器](assignment.md) --- **免責聲明**: 本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。