Series
Series ESP32 & Cảm Biến
  1. Series ESP32 & Cảm biến: Từ đọc dữ liệu cơ bản tới – Theo dõi realtime
  2. 1Series ESP32 & Cảm biến: Bài 1 – Hướng dẫn đọc cảm biến Quang trở (LDR) bằng ESP32: đo cường độ ánh sáng & theo dõi realtime
  3. 2Series ESP32 & Cảm biến: Bài 2 – Đọc cảm biến PIR HC-SR501: phát hiện chuyển động & theo dõi realtime
  4. 3Series ESP32 & Cảm biến: Bài 3 – Hướng dẫn đọc cảm biến Reed Switch (công tắc từ cửa): phát hiện đóng/mở cửa & theo dõi realtime
  5. 4Series ESP32 & Cảm biến: Bài 4 – Đọc cảm biến SW-420 bằng ESP32: phát hiện rung/va chạm & theo dõi realtime
  6. 5Series ESP32 & Cảm biến: Bài 5 – Đọc cảm biến nghiêng (Tilt Switch): phát hiện nghiêng/đổ & theo dõi realtime
  7. 6Series ESP32 & Cảm biến: Bài 6 – Đọc cảm biến Hall A3144: phát hiện từ trường & theo dõi realtime
  8. 7Series ESP32 & Cảm biến: Bài 7 – Đọc cảm biến lửa Flame Sensor: phát hiện ngọn lửa & theo dõi realtime
  9. 8Series ESP32 & Cảm biến: Bài 8 – Đọc cảm biến mưa Rain Sensor: phát hiện mưa & theo dõi realtime
  10. 9Series ESP32 & Cảm biến: Bài 9 – Đọc cảm biến Water Level Sensor: đo mực nước & theo dõi realtime
  11. 10Series ESP32 & Cảm biến: Bài 10 – Đọc cảm biến Sound Sensor (KY-038/KY-037): đo mức âm thanh & theo dõi realtime
  12. 11Series ESP32 & Cảm biến: Bài 11 – Hướng dẫn đọc cảm biến BH1750: đo độ sáng (Lux) & theo dõi realtime
  13. 12Series ESP32 & Cảm biến: Bài 12 – Đọc cảm biến DHT11: đo nhiệt độ/độ ẩm & theo dõi realtime
  14. 13Series ESP32 & Cảm biến: Bài 13 – Đọc cảm biến DHT22 (AM2302): đo nhiệt độ/độ ẩm chính xác hơn & theo dõi realtime
  15. 14Series ESP32 & Cảm biến: Bài 14 – Đọc cảm biến AHT20 (I2C): đo nhiệt độ/độ ẩm ổn định & theo dõi realtime
  16. 15Series ESP32 & Cảm biến: Bài 15 – Hướng dẫn đọc cảm biến SHT31: đo nhiệt độ/độ ẩm chất lượng cao & theo dõi realtime
  17. 16Series ESP32 & Cảm biến: Bài 16 – Hướng dẫn đọc cảm biến BMP280: đo áp suất/độ cao ước tính & theo dõi realtime
  18. 17Series ESP32 & Cảm biến: Bài 17 – Đọc cảm biến BME280: đo nhiệt độ/độ ẩm/áp suất & theo dõi realtime
  19. 18Series ESP32 & Cảm biến: Bài 18 – Đọc cảm biến DS3231 (RTC): giữ thời gian chính xác & theo dõi realtime
  20. 19Series ESP32 & Cảm biến: Bài 19 – Đọc cảm biến DS18B20: đo nhiệt độ (1-Wire) & theo dõi realtime
  21. 20Series ESP32 & Cảm biến: Bài 20 – Đọc cảm biến RC522 (RFID): quét thẻ RFID & theo dõi realtime
  22. 21Series ESP32 & Cảm biến: Tổng kết Level 1 – từ linh kiện cơ bản tới IoT realtime
  23. 22Series ESP32 & Cảm biến: Giới thiệu Level 2 – ESP32 & Cảm biến I2C: từ đọc đơn lẻ tới tư duy hệ thống
  24. 23Series ESP32 & Cảm biến: Bài 21 – Đọc thẻ nhớ MicroSD: ghi log dữ liệu & theo dõi realtime
  25. 24Series ESP32 & Cảm biến: Bài 22 – Đọc cảm biến TCS34725: đo màu sắc RGB & theo dõi realtime
  26. 25Series ESP32 & Cảm biến: Bài 23 – Đọc cảm biến IR Receiver (VS1838B / TSOP): nhận tín hiệu remote & theo dõi realtime
  27. 26Series ESP32 & Cảm biến: Bài 24 – Đọc cảm biến HC-SR04: đo khoảng cách siêu âm & theo dõi realtime
  28. 27Series ESP32 & Cảm biến: Bài 25 – Đọc cảm biến JSN-SR04T: đo khoảng cách chống nước & theo dõi realtime
  29. 28Series ESP32 & Cảm biến: Bài 26 – Đọc cảm biến VL53L0X: đo khoảng cách ToF chính xác & theo dõi realtime
  30. 29Series ESP32 & Cảm biến: Bài 27 – Đọc cảm biến RCWL-0516: phát hiện chuyển động bằng radar & theo dõi realtime
  31. 30Series ESP32 & Cảm biến: Bài 28 – Đọc cảm biến Soil Moisture (capacitive): đo độ ẩm đất & theo dõi realtime
  32. 31Series ESP32 & Cảm biến: Bài 29 – Đọc cảm biến Water Flow YF-S201: đo lưu lượng nước & theo dõi realtime
  33. 32Series ESP32 & Cảm biến: Bài 30 – Đọc cảm biến MQ-2: phát hiện khói/gas & theo dõi realtime
  34. 33Series ESP32 & Cảm biến: Bài 31 – Đọc cảm biến MQ-135: đo chất lượng không khí & theo dõi realtime
  35. 34Series ESP32 & Cảm biến: Bài 35 – Đọc cảm biến GPS NEO-6M: lấy toạ độ GPS & theo dõi realtime
  36. 35Series ESP32 & Cảm biến: Bài 36 – Đọc cảm biến PZEM-004T: đo điện năng AC & theo dõi realtime
  37. 36Series ESP32 & Cảm biến: Bài 37 – Đọc cảm biến INA226: đo dòng, áp DC & theo dõi realtime
  38. 37Series ESP32 & Cảm biến: Bài 38 – Đọc cảm biến vân tay AS608 / R307: nhận diện vân tay & theo dõi realtime
  39. 38Series ESP32 và Cảm biến: Tổng kết Level 2 – Cảm biến I2C & tư duy hệ thống IoT
Kiến thức

Series ESP32 & Cảm biến: Bài 30 – Đọc cảm biến MQ-2: phát hiện khói/gas & theo dõi realtime

Th1 2026
Series ESP32 & Cảm biến: Bài 30 – Đọc cảm biến MQ-2: phát hiện khói/gas & theo dõi realtime

MQ-2 là một trong những cảm biến “quốc dân” cho DIY/Maker khi làm cảnh báo khói/gas.
Bài này tập trung vào cách dùng MQ-2 đúng kiểu IoT: đọc tín hiệu ổn định, đặt ngưỡng cảnh báo, và gửi dữ liệu realtime lên IoTLabs Cloud MQTT.

Lưu ý thực tế: MQ-2 phù hợp phát hiện sớm / cảnh báo tương đối, không dùng thay thiết bị an toàn công nghiệp.

1. MQ-2 đo được gì?

MQ-2 nhạy với:

  • Khói (smoke)
  • LPG / propane / butane
  • Methane (CH4)
  • Hydrogen (H2) (mức độ tuỳ môi trường)

MQ-2 thường có 2 ngõ ra:

  • AO (Analog): giá trị “mức độ” tương đối
  • DO (Digital): so sánh ngưỡng bằng biến trở trên module

2. Chuẩn bị phần cứng và lưu ý nguồn

Thiết bị

  • ESP32-C3 SuperMini
  • MQ-2 module (có AO/DO)
  • Dây jumper

Lưu ý rất quan trọng

  • MQ-2 có heater → tiêu thụ dòng khá lớn và nóng lên khi chạy.
  • Module MQ-2 thường chạy 5V.
  • Ngõ AO có thể lên mức 5V → cần đảm bảo ADC ESP32 không bị quá áp.

✅ Cách an toàn:

  • Dùng chân DO (digital) cho cảnh báo đơn giản (an toàn hơn)
  • Nếu đọc AO, nên có chia áp về 3.3V

3. Nối dây MQ-2 với ESP32

Option A (khuyến nghị cho bài này): dùng DO (cảnh báo ngưỡng)

MQ-2ESP32-C3
VCC5V
GNDGND
DOGPIO4

Option B: dùng AO (để vẽ chart “mức độ”)

MQ-2ESP32-C3
VCC5V
GNDGND
AOGPIO2 (ADC) (qua chia áp)

4. Warm-up & đọc ổn định

MQ-2 cần thời gian làm nóng để ổn định.

  • Demo: 1–2 phút là dùng được
  • Ổn định hơn: 5–10 phút

Trong IoT thực tế, nên:

  • Bỏ qua dữ liệu ở giai đoạn warm-up
  • Hoặc báo trạng thái sensor_ready = 0/1

5. Ví dụ 1: Đọc MQ-2 đơn giản (DO + AO)

#define MQ2_DO_PIN 4
#define MQ2_AO_PIN 2

void setup() {
  Serial.begin(115200);
  pinMode(MQ2_DO_PIN, INPUT);
  pinMode(MQ2_AO_PIN, INPUT);
}

void loop() {
  int alarm = digitalRead(MQ2_DO_PIN);  // 0/1 tuỳ module
  int raw = analogRead(MQ2_AO_PIN);     // 0..4095 (ESP32 ADC)

  Serial.print("MQ2 DO: ");
  Serial.print(alarm);
  Serial.print(" | MQ2 AO(raw): ");
  Serial.println(raw);

  delay(1000);
}

Nếu DO đang “ngược” (báo 0 khi có khói) thì bạn chỉ cần đảo logic ở code.

6. Chuẩn hoá dữ liệu: “mức độ khói/gas” kiểu IoT

Với MQ-2 DIY, ta nên dùng cách “thực dụng”:

  • raw ADC làm mức độ tương đối
  • Hoặc map thành % theo baseline

Ví dụ:

  • baseline = ADC khi không có khói
  • smoke_index = max(0, raw - baseline)

Payload gợi ý:

{
  "ts": 1760000000,
  "metrics": {
    "gas_raw": 1530,
    "alarm": 0
  }
}

7. Ví dụ 2: Gửi dữ liệu realtime lên IoTLabs Cloud MQTT

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

#define MQ2_DO_PIN 4
#define MQ2_AO_PIN 2

const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASS";

const char* MQTT_HOST = "mqtt.iotlabs.vn";
const int MQTT_PORT = 8883;
const char* MQTT_USER = "YOUR_MQTT_USER";
const char* MQTT_PASS = "YOUR_MQTT_PASS";

const char* MQTT_TOPIC =
  "iotlabs/<orgId>/devices/<deviceId>/telemetry";

WiFiClientSecure net;
PubSubClient mqtt(net);

unsigned long lastSend = 0;

void connectWiFi() {
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void connectMQTT() {
  net.setInsecure();
  mqtt.setServer(MQTT_HOST, MQTT_PORT);
  while (!mqtt.connected()) {
    mqtt.connect("esp32c3-mq2", MQTT_USER, MQTT_PASS);
    delay(1000);
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(MQ2_DO_PIN, INPUT);
  pinMode(MQ2_AO_PIN, INPUT);

  connectWiFi();
  connectMQTT();
}

void loop() {
  if (!mqtt.connected()) connectMQTT();
  mqtt.loop();

  if (millis() - lastSend > 1000) {
    lastSend = millis();

    int alarm = digitalRead(MQ2_DO_PIN);
    int raw = analogRead(MQ2_AO_PIN);

    long ts = millis() / 1000;

    String payload = "{";
    payload += "\"ts\":" + String(ts) + ",";
    payload += "\"metrics\":{";
    payload += "\"gas_raw\":" + String(raw) + ",";
    payload += "\"alarm\":" + String(alarm);
    payload += "}}";

    mqtt.publish(MQTT_TOPIC, payload.c_str());
    Serial.println(payload);
  }
}

8. Kinh nghiệm thực tế để tránh báo giả

  • Đặt sensor tránh nơi có gió mạnh
  • Không đặt sát bếp, khói nấu ăn nếu không muốn cảnh báo liên tục
  • Dùng rule:
    • gas_raw > threshold trong N giây liên tục
    • Cooldown 30–60s
  • Kết hợp thêm:
    • nhiệt độ/độ ẩm (DHT/AHT) để phân tích môi trường

9. Ứng dụng thực tế

Sau bài này, bạn có thể làm:

  • Cảnh báo khói/gas realtime
  • Log lịch sử mức độ khói theo thời gian
  • Kết hợp relay:
    • bật quạt hút
    • bật còi
  • Kết hợp rule engine:
    • alarm=1 → gửi Telegram/Email

10. Tổng kết Bài 30

Bạn đã:

  • Hiểu MQ-2 đo gì và giới hạn DIY
  • Đọc DO/AO đúng cách
  • Gửi dữ liệu realtime lên IoTLabs Cloud MQTT
  • Sẵn sàng cho bài tiếp theo: cảnh báo thông minh + debounce/cooldown