#define BLYNK_TEMPLATE_ID "TMPL69CaT2QGt"
#define BLYNK_TEMPLATE_NAME "IOTProjecty3"
#define BLYNK_PRINT Serial
#define MQ2_ANA 0 //Gassensor Analog pin
#define MQ2_DIG 2 //Gassensor Digital pin
#define DHTPIN 16
#define DHTTYPE DHT11
#include "DHT.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "FbVqetHmU1w7hVXbAiZcg3qCCkcRwxa9";
char ssid[] = "Jinxx1490_2.4G";
char pass[] = "0926083366";
WiFiClient espClient;
const int relayPin = 12;
const int gasThreshold = 20;
int led_pin = 25;// mog up the fan
int data25;
DHT dht(DHTPIN, DHTTYPE);
bool manualMode = false; // Flag to track if the relay is in manual mode
void setup() {
dht.begin();
Blynk.begin(auth, ssid, pass);
Serial.begin(9600);
pinMode(MQ2_ANA, INPUT);
pinMode(MQ2_DIG, INPUT);
pinMode(led_pin, OUTPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
delay(2000);
}
BLYNK_WRITE(V1)
{
int relayControl = param.asInt(); // Get value from Blynk app
manualMode = (relayControl == 1); // Set manual mode based on app input
if (manualMode)
{
digitalWrite(relayPin, HIGH); // Turn on relay in manual mode
}
else
{
digitalWrite(relayPin, LOW); // Turn off relay when exiting manual mode
}
Blynk.virtualWrite(V3, relayControl); // Update relay status on
}
void loop() {
Blynk.run(); // Run Blynk
int sensorValue = analogRead(MQ2_ANA); // Read gas sensor value
int gas_percentage = map(sensorValue, 0, 4095, 0, 100); // Convert to percentage
float humidity = dht.readHumidity(); // Read humidity from DHT sensor
float temperature = dht.readTemperature(); // Read temperature from DHT sensor
// Check if sensor readings are valid
if (isnan(humidity) || isnan(temperature))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Print sensor values to the Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("°C ");
Serial.print("Gas sensor value: ");
Serial.println(sensorValue);
Serial.print("Gas Percentage: ");
Serial.print(gas_percentage);
Serial.println("%");
Serial.println();
// Automatic control logic based on gas levels
if (!manualMode)
{
if (gas_percentage > gasThreshold)
{
digitalWrite(relayPin, HIGH); // Activate relay if gas above threshold
Blynk.virtualWrite(V3, HIGH); // Update Blynk app
}
else
{
digitalWrite(relayPin, LOW); // Deactivate relay if gas below threshold
Blynk.virtualWrite(V3, LOW); // Update Blynk app
}
}
// Send sensor values to Blynk
Blynk.virtualWrite(V0, gas_percentage); // Send gas percentage
Blynk.virtualWrite(V1, temperature); // Send temperature
Blynk.virtualWrite(V2, humidity); // Send humidity
delay(1000); // Wait for a second before next loop iteration
}