#define BLYNK_TEMPLATE_ID "TMPL6Adxi3wot"
#define BLYNK_TEMPLATE_NAME "Chemtex Sensor"
#define BLYNK_AUTH_TOKEN "GaZaIPUU7cd7n5NbCUqiDgesMrJmbd--"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int Gas_PIN = 35;
int led_green = 32;
int led_red = 33;
BlynkTimer timer;
void setup() {
Wire.begin(23, 22);
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(Gas_PIN,INPUT);
pinMode(led_green, OUTPUT);
pinMode(led_red, OUTPUT);
delay(3000);
lcd.clear();
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000, sendSensor);
}
void sendSensor()
{
float analogValue = analogRead(Gas_PIN );
Serial.print("Sensor RAW: ");
Serial.println(analogValue, 0);
int gasLevel = map(analogValue, 0, 4095, 0, 100);
Serial.print(gasLevel, 0);
Serial.println("%");
Blynk.virtualWrite(V0, gasLevel);
String gasMsg;
if (gasLevel < 20) {
gasMsg = "IDEAL";
} else {
gasMsg = "CAUTION";
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gas: ");
lcd.print(gasMsg);
lcd.setCursor(0, 1);
lcd.print("Gas Level: ");
lcd.print(gasLevel);
lcd.print(" %");
Serial.print("Gas Level: ");
Serial.println(gasLevel);
delayWithMillis(2000);
if (gasLevel < 20) {
digitalWrite(led_green, HIGH);
Blynk.virtualWrite(V1, HIGH);
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V2, LOW);
} else {
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V1, LOW);
digitalWrite(led_red, HIGH);
Blynk.virtualWrite(V2, HIGH);
}
}
void delayWithMillis(unsigned long ms)
{
unsigned long currentMillis = millis();
while (millis() - currentMillis < ms)
{
// Do nothing, just wait
}
}
void loop() {
Blynk.run();
timer.run();
}