#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define MQ2_PIN 34 // Chân cảm biến MQ-2
#define LED_ALERT 26 // LED cảnh báo khí gas
#define LED_STATUS 27 // LED báo trạng thái kết nối
#define SWITCH_PIN 14 // Công tắc bật/tắt cảnh báo
int gasThreshold = 400; // Ngưỡng phát hiện khí gas
void setup() {
Serial.begin(115200);
pinMode(MQ2_PIN, INPUT);
pinMode(LED_ALERT, OUTPUT);
pinMode(LED_STATUS, OUTPUT);
pinMode(SWITCH_PIN, INPUT_PULLUP); // Công tắc bật/tắt cảnh báo
// Khởi động OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED không khởi động được!");
while (1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("ESP32 Gas Monitor");
display.display();
// LED báo trạng thái kết nối
digitalWrite(LED_STATUS, HIGH);
delay(1000);
}
void loop() {
int gasValue = analogRead(MQ2_PIN);
bool alertEnabled = digitalRead(SWITCH_PIN) == LOW;
Serial.printf("Gas Value: %d\n", gasValue);
// Hiển thị trên OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Gas Monitoring");
display.print("Gas Level: ");
display.println(gasValue);
display.print("Alert: ");
display.println(alertEnabled ? "ON" : "OFF");
if (gasValue > gasThreshold && alertEnabled) {
digitalWrite(LED_ALERT, HIGH);
display.println("WARNING: Gas Leak!");
} else {
digitalWrite(LED_ALERT, LOW);
display.println("Safe");
}
display.display();
delay(1000);
}