#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define GAS_SENSOR_PIN 34 // Chân giả lập cảm biến khí gas
#define BUZZER_PIN 26 // Chân giả lập còi báo động
#define LED_PIN 5 // Chân giả lập còi báo động
#define GAS_THRESHOLD 400 // Ngưỡng cảnh báo khí gas
// Màn hình OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Giá trị khí gas giả lập trên Wokwi
int simulatedGasValue = 100;
void setup() {
Serial.begin(115200);
// Khởi tạo màn hình OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Không tìm thấy màn hình OLED!");
while (1);
}
display.clearDisplay();
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT); // Cấu hình LED là đầu ra
// Kiểm tra OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED không tìm thấy! Kiểm tra dây nối."));
while (1);
}
// Hiển thị thông báo trên OLED
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 25);
display.print("Hello ESP32");
display.display();
// Bật LED cảnh báo
digitalWrite(LED_PIN, HIGH);
}
void loop() {
// Giá trị khí gas mô phỏng (thay đổi dần)
simulatedGasValue += random(-40, 60);
if (simulatedGasValue < 100) simulatedGasValue = 100;
if (simulatedGasValue > 600) simulatedGasValue = 600;
Serial.print("Giá trị khí gas: ");
Serial.println(simulatedGasValue);
// Hiển thị trên OLED
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 10);
display.print("Gas: ");
display.print(simulatedGasValue);
display.display();
// Nhấp nháy LED mỗi giây
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
// Bật còi báo động khi vượt ngưỡng
if (simulatedGasValue > GAS_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("CẢNH BÁO! Rò rỉ khí gas!");
} else {
digitalWrite(BUZZER_PIN, LOW);
}
delay(2000);
}