#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD I2C
const int mq135Pin = 33; // GPIO33
const int buzzerPin = 25; // GPIO25 for buzzer
WiFiServer server(80);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Warming Sensor...");
delay(2000);
pinMode(mq135Pin, INPUT);
pinMode(buzzerPin, OUTPUT);
//Verify if the WiFi connection is successfully done:
WiFi.begin("Wokwi-GUEST", "", 6);
Serial.println("Connecting to WiFi!!");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("Local IP: ");
Serial.println(WiFi.localIP());
delay(100);
lcd.clear();
server.begin();
}
void loop() {
int analogValue = analogRead(mq135Pin);
float air_quality = (analogValue / 4095.0) * 5000.0;
// Basic approximation
Serial.print("Air Quality: ");
Serial.print(air_quality);
Serial.println(" PPM");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AQ: ");
lcd.print(air_quality);
lcd.print(" PPM");
lcd.setCursor(0, 1);
if (air_quality <= 1000) {
lcd.print("Fresh Air");
digitalWrite(buzzerPin, LOW);
} else if (air_quality > 1000 && air_quality <= 2000) {
lcd.print("Poor, Ventilate!");
digitalWrite(buzzerPin, HIGH);
} else {
lcd.print("DANGER! Go Out!");
digitalWrite(buzzerPin, HIGH);
}
WiFiClient client = server.available();
if (client) {
String webpage = "<!DOCTYPE html><html><head><style>";
webpage += "body{font-family:sans-serif;text-align:center;padding:20px;}";
webpage += "h1{color:#0066cc;} h2{color:#444;}";
webpage += "</style></head><body>";
webpage += "<h1>IoT Air Pollution Monitoring</h1>";
webpage += "<p><h2>Air Quality: ";
webpage += air_quality;
webpage += " PPM</h2></p>";
if (air_quality <= 1000) {
webpage += "<p style='color:green;'>Fresh Air</p>";
} else if (air_quality <= 2000) {
webpage += "<p style='color:orange;'>Poor Air - Ventilate!</p>";
} else {
webpage += "<p style='color:red;'>DANGER! Move Out!</p>";
}
webpage += "</body></html>";
client.print("HTTP/1.1 200 OK\r\n");
client.print("Content-Type: text/html\r\n");
client.print("Connection: close\r\n\r\n");
client.print(webpage);
client.stop();
}
delay(2000);
}