#include "DHT.h"
#include <WiFi.h>
#include "ThingSpeak.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// ---------- WiFi Configuration ----------
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ---------- ThingSpeak Configuration ----------
unsigned long myChannelNumber = 3111893;
const char* myWriteAPIKey = "5KCR5VHEQ5XF2YDT";
// ---------- Sensor Pins ----------
#define DHTPIN 15
#define DHTTYPE DHT22
#define MQ2_PIN 34
#define LDR_PIN 35
// ---------- Objects ----------
WiFiClient client;
DHT dht(DHTPIN, DHTTYPE);
Adafruit_MPU6050 mpu;
// ---------- Setup ----------
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ WiFi Connected!");
ThingSpeak.begin(client);
dht.begin();
if (!mpu.begin()) {
Serial.println("❌ MPU6050 not detected!");
while (1);
}
Serial.println("✅ MPU6050 Initialized");
pinMode(MQ2_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
}
// ---------- Get Vibration Data ----------
float getVibration() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
return sqrt(a.acceleration.x * a.acceleration.x +
a.acceleration.y * a.acceleration.y +
a.acceleration.z * a.acceleration.z);
}
// ---------- Main Loop ----------
void loop() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
delay(3000);
return;
}
// Read sensors
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int gasValue = analogRead(MQ2_PIN);
int lightValue = analogRead(LDR_PIN);
float vibration = getVibration();
// Convert raw values
float gasLevel = map(gasValue, 0, 4095, 0, 100);
float smokeLevel = map(lightValue, 0, 4095, 100, 0); // darker = more smoke
// Print values
Serial.println("=== Fire & Gas Plant Safety Data ===");
Serial.printf("Temp: %.2f°C | Humidity: %.2f%%\n", temp, hum);
Serial.printf("Gas Level: %.2f%% | Smoke Darkness: %.2f%%\n", gasLevel, smokeLevel);
Serial.printf("Vibration: %.2f m/s²\n", vibration);
Serial.println("==============================\n");
// Send data to ThingSpeak
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, hum);
ThingSpeak.setField(3, gasLevel);
ThingSpeak.setField(4, smokeLevel);
ThingSpeak.setField(5, vibration);
int status = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (status == 200)
Serial.println("✅ Data sent to ThingSpeak successfully!");
else
Serial.printf("❌ Error sending data: %d\n", status);
delay(15000); // ThingSpeak minimum interval
}