C,發音為 *I-squared-C*,是一種多控制器、多周邊設備的通訊協議,任何連接的設備都可以作為控制器或周邊設備,通過 I²C 線路(用於傳輸數據的通訊系統名稱)進行通訊。數據以地址封包的形式傳輸,每個封包包含目標設備的地址。 > 💁 這種模型過去常被稱為主/從(master/slave),但由於其與奴隸制的聯想,這種術語正在被棄用。[開源硬件協會(Open Source Hardware Association)已採用控制器/周邊設備(controller/peripheral)](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/),但您可能仍會看到對舊術語的引用。 設備在連接到 I²C 線路時會有一個地址,該地址通常是硬編碼在設備上的。例如,Seeed 的每種 Grove 感測器都有相同的地址,因此所有光感測器都有相同的地址,所有按鈕的地址則與光感測器的地址不同。一些設備可以通過更改跳線設置或焊接引腳來更改地址。 I²C 線路由 2 條主要的數據線以及 2 條電源線組成: | 線路 | 名稱 | 描述 | | ---- | --------- | ----------- | | SDA | 串行數據(Serial Data) | 用於在設備之間傳輸數據的線路。 | | SCL | 串行時鐘(Serial Clock) | 傳輸由控制器設定速率的時鐘信號的線路。 | | VCC | 電壓公共集電極(Voltage Common Collector) | 為設備提供電源。這條線通過上拉電阻連接到 SDA 和 SCL 線,當沒有設備作為控制器時,該電阻會將信號切換為關閉狀態。 | | GND | 接地(Ground) | 為電路提供公共接地。 | ![I2C 線路,3 個設備連接到 SDA 和 SCL 線,共享一條接地線](../../../../../translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.mo.png) 在傳輸數據時,一個設備會發出啟動條件(start condition),表示它準備好傳輸數據。此時它將成為控制器。控制器接著發送目標設備的地址,以及它是要讀取還是寫入數據。在數據傳輸完成後,控制器會發送停止條件(stop condition),表示它已完成。之後,另一個設備可以成為控制器,進行數據的發送或接收。 2C 有速度限制,並有三種不同模式以固定速度運行。最快的是高速模式,最大速度為 3.4Mbps(每秒百萬位元),但很少有設備支持這種速度。例如,Raspberry Pi 的速度限制在 400Kbps(每秒千位元)的快速模式。標準模式的速度為 100Kbps。 > 💁 如果您使用的是帶有 Grove Base hat 的 Raspberry Pi 作為物聯網硬件,您會看到板上有多個 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.mo.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,然後將它們連接到另一個設備。 > 💁 如果您使用的是帶有 Grove Base hat 的 Raspberry Pi 作為物聯網硬件,您會看到板上有一個 UART 插槽,可以用來與使用 UART 協議的感測器通信。 ### 串行外設接口 (SPI) SPI 設計用於短距離通信,例如在微控制器上與存儲設備(如快閃記憶體)通信。它基於控制器/外設模型,單個控制器(通常是物聯網設備的處理器)與多個外設交互。控制器通過選擇一個外設並發送或請求數據來控制一切。 > 💁 與 I2C 一樣,控制器和外設這些術語是最近的變化,因此您可能仍會看到舊術語。 SPI 控制器使用 3 條線,外加每個外設 1 條額外的線。外設使用 4 條線。這些線包括: | 線 | 名稱 | 描述 | | ---- | --------- | ----------- | | COPI | 控制器輸出,外設輸入 | 這條線用於將數據從控制器發送到外設。 | | CIPO | 控制器輸入,外設輸出 | 這條線用於將數據從外設發送到控制器。 | | SCLK | 串行時鐘 | 這條線以控制器設置的速率發送時鐘信號。 | | CS | 芯片選擇 | 控制器有多條線,每條線連接到相應外設的 CS 線。 | ![SPI 與一個控制器和兩個外設](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.mo.png) CS 線用於一次激活一個外設,通過 COPI 和 CIPO 線通信。當控制器需要更換外設時,它會停用連接到當前活動外設的 CS 線,然後激活連接到下一個外設的 CS 線。 SPI 是 *全雙工* 的,這意味著控制器可以同時通過 COPI 和 CIPO 線從同一外設發送和接收數據。SPI 使用 SCLK 線上的時鐘信號使設備保持同步,因此與直接通過 UART 發送不同,它不需要起始位和停止位。 SPI 沒有定義的速度限制,實現通常能夠每秒傳輸多兆字節的數據。 物聯網開發套件通常支持通過一些 GPIO 引腳使用 SPI。例如,在 Raspberry Pi 上,您可以使用 GPIO 引腳 19、21、23、24 和 26 進行 SPI。 ### 無線 一些感測器可以通過標準無線協議通信,例如藍牙(主要是低功耗藍牙,或 BLE)、LoRaWAN(一種**長**距離低功耗網絡協議)或 WiFi。這些協議允許遠程感測器不需要物理連接到物聯網設備。 一個例子是商業土壤濕度感測器。這些感測器會測量田地中的土壤濕度,然後通過 LoRaWAN 將數據發送到集線設備,該設備會處理數據或將其發送到互聯網。這允許感測器遠離管理數據的物聯網設備,從而降低功耗並減少對大型 WiFi 網絡或長電纜的需求。 BLE 在高級感測器中很受歡迎,例如戴在手腕上的健身追蹤器。這些設備結合了多個感測器,並通過 BLE 將感測器數據發送到物聯網設備(如您的手機)。 ✅ 您身上、家中或學校中是否有任何藍牙感測器?這些可能包括溫度感測器、佔用感測器、設備追蹤器和健身設備。 商業設備的一種流行連接方式是 Zigbee。Zigbee 使用 WiFi 在設備之間形成網狀網絡,每個設備盡可能多地連接到附近的設備,形成像蜘蛛網一樣的大量連接。當一個設備想要向互聯網發送消息時,它可以將消息發送到最近的設備,然後由這些設備轉發給其他附近的設備,如此類推,直到到達協調器並發送到互聯網。 > 🐝 Zigbee 的名稱來源於蜜蜂返回蜂巢後的搖擺舞。 ## 測量土壤中的濕度水平 您可以使用土壤濕度感測器、物聯網設備和一盆植物或附近的一片土壤來測量土壤的濕度水平。 ### 任務 - 測量土壤濕度 按照相關指南使用您的物聯網設備測量土壤濕度: * [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) * [單板電腦 - Raspberry Pi](pi-soil-moisture.md) * [單板電腦 - 虛擬設備](virtual-device-soil-moisture.md) ## 感測器校準 感測器依賴於測量電氣特性,例如電阻或電容。 > 🎓 電阻,以歐姆 (Ω) 為單位,表示電流通過某物時的阻力大小。當電壓施加到材料上時,通過它的電流量取決於材料的電阻。您可以在 [電阻的維基百科頁面](https://wikipedia.org/wiki/Electrical_resistance_and_conductance) 上閱讀更多內容。 > 🎓 電容,以法拉 (F) 為單位,表示元件或電路收集和儲存電能的能力。您可以在 [電容的維基百科頁面](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.mo.png) 上圖顯示了如何校準感測器。對土壤樣本捕獲電壓,然後通過比較濕重與乾重(測量濕重,然後在烤箱中烘乾並測量乾重)在實驗室中測量。獲取幾個讀數後,可以將其繪製在圖表上並擬合一條線。這條線可以用來將物聯網設備的土壤濕度感測器讀數轉換為實際的土壤濕度測量值。 💁 對於電阻式土壤濕度感測器,電壓隨土壤濕度增加而增加。對於電容式土壤濕度感測器,電壓隨土壤濕度增加而減少,因此這些圖表的斜率會向下,而不是向上。 ![從圖表中插值的土壤濕度值](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.mo.png) 上圖顯示了土壤濕度感測器的電壓讀數,通過將其對應到圖表上的線,可以計算出實際的土壤濕度。 這種方法意味著農民只需要為一片田地獲取幾個實驗室測量值,然後他們就可以使用物聯網設備測量土壤濕度——大大加快了測量的速度。 --- ## 🚀 挑戰 電阻式和電容式土壤濕度感測器有許多不同之處。這些差異是什麼?哪種類型(如果有的話)對農民來說是最好的選擇?這個答案在發展中國家和已開發國家之間是否會改變? ## 課後測驗 [課後測驗](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) ## 回顧與自學 閱讀有關感測器和執行器使用的硬件和協議的資料: * [GPIO 維基百科頁面](https://wikipedia.org/wiki/General-purpose_input/output) * [UART 維基百科頁面](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) * [SPI 維基百科頁面](https://wikipedia.org/wiki/Serial_Peripheral_Interface) * [I2C 維基百科頁面](https://wikipedia.org/wiki/I²C) * [Zigbee 維基百科頁面](https://wikipedia.org/wiki/Zigbee) ## 作業 [校準您的感測器](assignment.md) --- **免責聲明**: 本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。