#define BLYNK_TEMPLATE_ID "TMPL377gYVTEi"
#define BLYNK_TEMPLATE_NAME "Forest Fire "
#define BLYNK_AUTH_TOKEN "CHtEULq0Iy933kc_WsJUDPpDpcGiMG_U"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <TinyGPSPlus.h>
#include <HardwareSerial.h>
char ssid[] = "Wokwi-GUEST"; // Wokwi WiFi
char pass[] = "";
#define DHTPIN 15
#define DHTTYPE DHT22
#define MQ2_PIN 34
#define LED_PIN 13
DHT dht(DHTPIN, DHTTYPE);
TinyGPSPlus gps;
HardwareSerial SerialGPS(1);
BlynkTimer timer;
// GPS data
double latitude = 0.0;
double longitude = 0.0;
void sendSensorData() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int gas = analogRead(MQ2_PIN);
Serial.print("Temp: "); Serial.print(temp);
Serial.print(" °C | Humidity: "); Serial.print(hum);
Serial.print(" % | Gas: "); Serial.println(gas);
// Fire detection condition
if (temp > 50 || gas > 400) {
digitalWrite(LED_PIN, HIGH);
Blynk.virtualWrite(V3, 1);
} else {
digitalWrite(LED_PIN, LOW);
Blynk.virtualWrite(V3, 0);
}
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, hum);
Blynk.virtualWrite(V2, gas);
// Send GPS data
Blynk.virtualWrite(V4, latitude, longitude);
}
void readGPS() {
while (SerialGPS.available() > 0) {
gps.encode(SerialGPS.read());
if (gps.location.isUpdated()) {
latitude = gps.location.lat();
longitude = gps.location.lng();
Serial.print("GPS: ");
Serial.print(latitude, 6);
Serial.print(", ");
Serial.println(longitude, 6);
}
}
}
void setup() {
Serial.begin(115200);
SerialGPS.begin(9600, SERIAL_8N1, 16, 17); // GPS RX=16, TX=17
pinMode(LED_PIN, OUTPUT);
dht.begin();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(2000L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run();
readGPS();
}