一、 實驗說明:為什麼選擇 ESP32 結合 MQ-2 氣體感測器?
在打造 IoT 物聯網智慧家庭防護專題時,結合 ESP32 開發板 與 MQ-2 氣體感測模組 是最熱門且實用的組合!
核心技術與感測原理
二氧化錫 () 半導體氣敏材料: 在潔淨空氣中, 電導率較低;當環境中出現煙霧、瓦斯(LPG)、甲烷、丙烷、丁烷、氫氣或酒精等易燃氣體時,感測器電導率上升。
雙訊號輸出 (AO / DO):
AO (Analog Output): 輸出類比電壓。由於 ESP32 內建 12 位元 ADC(範圍 0 ~ 4095),可提供更細緻的氣體濃度變化解析。
DO (Digital Output): 透過板載 LM393 比較器手動設定觸發門檻,超過設定濃度時輸出數位低電平。
加熱元件預熱需求: 模組內部設有加熱絲,通電後需經預熱使氣體分子順利吸附與反應。
二、 🔍 MQ-2 模組說明:腳位與靈敏度調節
MQ-2 模組整合了 LM393 比較器晶片與可變電阻。
📋 模組腳位定義表 (Pin Definition)
⚙️ 靈敏度微調步驟:
將模組通電預熱約 1~3 分鐘。
觀看板載的訊號指示燈 (Signal LED)。
旋轉藍色可變電阻,調整至 LED 剛好熄滅;當有打火機氣體或煙霧靠近時,LED 亮起即完成門檻設定。
三、 🛒 準備好你的硬體工具了嗎?
在開始進行電路接線與程式編寫前,建議備齊 ESP32 開發板與 MQ-2 氣體感測模組,確保居家安全物聯網專題流暢:
👉 推薦選購: 歡迎直接購買米羅為您搭配好的 ESP32 物聯網應用學習套件,新手零基礎也能輕鬆上手!
四、 實驗所需材料與電路接線圖 (Hardware Setup)
本專題結合 ESP32 開發板、MQ-2 模組 與 蜂鳴器 (Buzzer),打造智慧氣體防護系統。
⚠️ 注意事項:
MQ-2 加熱絲功率較大,建議將 MQ-2 的 VCC 連接至 ESP32 的 5V (VIN) 供電,以確保加熱穩定。
ESP32 的 ADC 腳位(如 GPIO 34、35、36、39)僅支援 0~3.3V 電壓輸入。好在 MQ-2 的 AO 輸出電平最高約為 3.3V ~ 4V 左右,為安全起見,建議透過 AO 串接一個 10k 分壓電阻或直接接至 ADC1 腳位讀取。
🛒 準備材料
ESP32 開發板 x 1
MQ-2 煙霧氣體感測器模組 x 1
有源蜂鳴器 (Buzzer) x 1
LED 發光二極體 + 220Ω 電阻 x 1
USB 傳輸線 x 1
杜邦線 若干
⚡ 腳位對接說明 (Pin Mapping)
五、 程式碼實作範例
🔹 程式範例一:使用 DO 數位門檻警報 (Digital Threshold Alarm)
本範例透過 ESP32 讀取 MQ-2 的 DO 數位腳位。當偵測到氣體超標時,立即觸發 GPIO 2 發光並驅動蜂鳴器警報。
const int MQ2_DO_PIN = 4; // MQ-2 DO 連接至 ESP32 GPIO 4
const int BUZZER_PIN = 23; // 蜂鳴器連接至 ESP32 GPIO 23
const int LED_PIN = 2; // 警報 LED 連接至 ESP32 GPIO 2
void setup() {
pinMode(MQ2_DO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
Serial.println("ESP32 MQ-2 數位門檻防護警報系統初始化...");
}
void loop() {
int sensorState = digitalRead(MQ2_DO_PIN);
if (sensorState == LOW) { // MQ-2 觸發時 DO 輸出 LOW
Serial.println("【警告】ESP32 偵測到煙霧/易燃氣體濃度過高!");
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH); // 觸發蜂鳴器
} else {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW); // 恢復正常
}
delay(200);
}
🔹 程式範例二:使用 AO 類比讀取與動態門檻警報 (ESP32 12-bit ADC & Level Monitoring)
本範例利用 ESP32 的 12 位元 ADC(範圍 0 ~ 4095)讀取 MQ-2 的 AO 類比數值,在序列埠監視器輸出即時濃度,並在數值超過設定門檻時啟動聲光警報。
const int MQ2_AO_PIN = 34; // MQ-2 AO 連接至 ESP32 GPIO 34 (ADC1)
const int BUZZER_PIN = 23; // 蜂鳴器連接至 ESP32 GPIO 23
const int LED_PIN = 2; // 警報 LED 連接至 ESP32 GPIO 2
// ESP32 ADC 解析度為 12-bit (0 ~ 4095),設定氣體觸發門檻
const int GAS_THRESHOLD = 1500;
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// ESP32 ADC 設定(可選:設定衰減以擴大輸入電壓範圍)
analogSetAttenuation(ADC_11db);
Serial.begin(115200);
Serial.println("ESP32 MQ-2 類比氣體濃度監測系統啟動...");
}
void loop() {
int analogVal = analogRead(MQ2_AO_PIN);
Serial.print("ESP32 讀取氣體濃度類比值 (AO): ");
Serial.println(analogVal);
if (analogVal > GAS_THRESHOLD) {
Serial.println("⚠️ 警告:氣體濃度超越安全臨界值!");
// 間歇性警報聲光效果
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
delay(100);
} else {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
delay(500);
}
}
六、 常見問題與除錯 (FAQ)
Q1:MQ-2 剛接上 ESP32 時發熱是正常的嗎?
解答: 是正常的。MQ-2 內部有加熱絲需持續發熱才能使半導體氣敏材料發揮效用。若發燙至燙傷或冒煙,請立即檢查 5V 與 GND 是否接反。
Q2:在乾淨空氣中,ESP32 讀到的類比數值 (AO) 偏高或浮動?
解答: MQ-2 首次啟用或久未使用時,表面會吸附殘餘雜質。請讓 ESP32 保持通電、持續預熱 12~24 小時,讓加熱絲完全清除雜質,數值就會下降並穩定。
Q3:ESP32 的 ADC 讀取數值不準確或碰到 4095 頂天?
解答: 請確認 AO 腳位是接在 ESP32 的 ADC1 專屬腳位(例如 GPIO 34、35、36、39),並在程式碼中加上
analogSetAttenuation(ADC_11db);以支援 0 ~ 3.3V 的輸入電壓範圍。
🔗 延伸閱讀與推薦課程
👉 上一篇回顧:第三十六篇:專題ESP32氣象站+電子時鐘 OpenWeather 天氣預報搭配 ILI9341顯示螢幕
