一、ESP32 真的直接讀探棒嗎?
很多初學者看到 pH 探棒或溶氧探棒,會直覺認為 ESP32 直接從探棒取得數值。實際上,多數智慧感測系統的結構是:
探棒負責感受物理或化學變化;感測 IC 則負責放大訊號、類比數位轉換、校正、補償與資料處理。ESP32 最後只要向感測 IC 詢問:「請把目前數值告訴我。」
二、什麼是 IC?
IC 是 Integrated Circuit 的縮寫,中文稱為「積體電路」。一顆看似很小的晶片,裡面可能包含:
以 Atlas EZO-pH 為例,ESP32 不需要自己把電壓換算成 pH,而是送出讀取命令,EZO-pH 內部完成計算後再回傳:
ESP32:R
pH IC:6.80
三、I²C 是什麼?
I²C 全名為 Inter-Integrated Circuit,意思就是「積體電路與積體電路之間的通訊」。它是一種同步、序列式、多裝置共用的通訊協定。
四、I²C 只需要兩條訊號線
| 訊號 | 全名 | 功能 |
|---|---|---|
| SDA | Serial Data | 傳送位址、命令與資料。 |
| SCL | Serial Clock | 提供時脈,讓所有裝置在相同節奏下交換資料。 |
多顆感測 IC 可以共用同一組 SDA 與 SCL,因此不用為每一顆感測器都準備一組獨立通訊線。
五、Address 就像每顆 IC 的門牌號碼
所有 IC 雖然共用 SDA 與 SCL,但每顆 IC 都必須有自己的 Address。ESP32 送出某個位址時,只有符合該位址的 IC 會回答。
| 感測 IC | 十六進位位址 | 十進位位址 |
|---|---|---|
| EZO-DO | 0x61 | 97 |
| EZO-pH | 0x63 | 99 |
| EZO-RTD | 0x66 | 102 |
| 本系統 EZO-EC | 0x69 | 105 |
六、Master 與 Slave 在做什麼?
入門階段可以先把 ESP32 視為 Master,把各個感測 IC 視為 Slave。
七、一次 I²C 讀取大致發生什麼事?
- ESP32 送出 Start 訊號。
- ESP32 傳送目標 IC 的 Address。
- 目標 IC 回覆 ACK,表示「我在這裡」。
- ESP32 傳送讀取命令,例如 R。
- IC 完成量測或計算。
- ESP32 向 IC 請求資料。
- IC 回傳數值。
- ESP32 送出 Stop,結束本次通訊。
Wire.beginTransmission(0x63);
Wire.write("R");
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x63, 20);
八、I²C Scanner:工程師的第一個除錯工具
當感測器沒有資料時,不應立刻懷疑探棒故障。第一步應先確認該 IC 是否真的出現在 I²C Bus 上。
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin(23, 22);
for (uint8_t address = 1; address < 127; address++) {
Wire.beginTransmission(address);
uint8_t error = Wire.endTransmission();
if (error == 0) {
Serial.print("找到 I2C 位址:0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
}
}
}
void loop() {
}
正常掃描可能得到:
找到 I2C 位址:0x61
找到 I2C 位址:0x63
找到 I2C 位址:0x66
找到 I2C 位址:0x69
九、從 Atlas Aquaponics Kit 看 I²C 的實際應用
在本次智慧養殖系統中,ESP32 透過同一條 I²C Bus 與四顆 EZO 感測 IC 溝通:
ESP32 先讀取 RTD 水溫,再把溫度送給 pH、DO 與 EC 進行溫度補償,最後取得完整水質資料。
RTD.send_read_cmd();
PH.send_cmd_with_num("T,", temperature);
DO.send_cmd_with_num("T,", temperature);
EC.send_cmd_with_num("T,", temperature);
十、I²C 只是 IoT 資料鏈的第一段
I²C 解決的是「板子內部 IC 與 IC 的通訊」。當 ESP32 取得資料後,還會經過 Wi-Fi、JSON、REST API、資料庫與 Dashboard。
十一、大一新生應記住的五個重點
- I²C 是 IC 與 IC 之間的通訊協定。
- I²C 主要使用 SDA 與 SCL 兩條訊號線。
- 多顆 IC 可以共用同一條 Bus。
- 每顆 IC 必須有不同的 Address。
- 感測器沒有資料時,先用 I²C Scanner 確認裝置是否存在。
十二、課後思考
- 如果兩顆 IC 使用相同 Address,會發生什麼事?
- I²C 與 UART、SPI 有什麼不同?
- 為什麼 SDA 與 SCL 通常需要上拉電阻?
- 如果 I²C 線太長,通訊會遇到什麼問題?
- 如何把掃描到的位址轉換成裝置名稱?
結語
I²C 看似只是兩條線,背後卻包含 Address、時脈、ACK、讀寫方向與匯流排共享等重要概念。對大一新生而言,先理解「ESP32 是如何點名某一顆 IC,再讀回資料」,就掌握了 I²C 的核心。從智慧養殖案例出發,也能進一步理解感測、通訊、雲端與 Dashboard 如何串成完整的智慧生活科技系統。

沒有留言:
張貼留言