#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ThingSpeak.h>
#define DHT_PIN 23
#define LDR_PIN 13 // Change this to your LDR pin
const char *ssid = "And"; // Replace with your WiFi SSID
const char *password = "0987654321"; // Replace with your WiFi password
const char *thingSpeakApiKey = "Z83OBBORHGEXUOG2"; // Replace with your ThingSpeak API key
const long channelId = 2332728;
WiFiClient client;
const int mq7Pin = 34;
const int mq135Pin = 35;
const int rainSensorPin = 33;
const int COThreshold = 25;
const int CO2Threshold = 5000;
float V_RL_MQ7 = 0.4;
float R_L_MQ7 = 10;
float S_MQ7 = 60;
float A_MQ135_CO2 = 400;
float B_MQ135_CO2 = 0.35;
float C_MQ135_CO2 = -0.48;
DHT dht(DHT_PIN, DHT22);
Adafruit_BMP085_Unified bmp;
void setup() {
Serial.begin(9600);
Serial.println("Gas Sensor Testing:");
pinMode(rainSensorPin, INPUT);
connectToWiFi();
ThingSpeak.begin(client);
dht.begin();
// Set custom SDA and SCL pins for ESP32
Wire.begin(21, 22); // SDA is GPIO21, and SCL is GPIO22 for ESP32
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
float temperature, humidity;
int mq7RawValue = analogRead(mq7Pin);
int mq135RawValue = analogRead(mq135Pin);
float mq7Voltage = mq7RawValue * (3.3 / 4095.0);
float mq135Voltage = mq135RawValue * (3.3 / 4095.0);
float mq7PPM = (mq7Voltage - V_RL_MQ7) * (R_L_MQ7 / S_MQ7);
float mq135PPM_CO2 = A_MQ135_CO2 * pow((mq135Voltage / B_MQ135_CO2), C_MQ135_CO2);
Serial.print("MQ7 PPM (CO): ");
Serial.print(mq7PPM);
Serial.print("\t MQ135 PPM (CO2): ");
Serial.println(mq135PPM_CO2);
checkAndSendToThingSpeak(mq7PPM, mq135PPM_CO2);
int rainValue = analogRead(rainSensorPin);
Serial.print("Rain sensor value: ");
Serial.println(rainValue);
sensors_event_t event;
bmp.getEvent(&event);
if (event.pressure) {
float pressure = event.pressure;
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" hPa");
} else {
Serial.println("BMP180 Sensor Error");
}
temperature = dht.readTemperature();
humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C\tHumidity: ");
Serial.print(humidity);
Serial.println(" %");
int ldrValue = analogRead(LDR_PIN);
Serial.print("LDR Sensor Value: ");
Serial.println(ldrValue);
if (mq7PPM > COThreshold || mq135PPM_CO2 > CO2Threshold) {
Serial.println("Gas Alert!");
if (mq7PPM > COThreshold) {
Serial.println("CO in excess");
} else if (mq135PPM_CO2 > CO2Threshold) {
Serial.println("CO2 in excess");
} else if (rainValue > 3000) {
Serial.println("Rain detected");
}
} else {
Serial.println("...");
}
delay(1000);
}
void connectToWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
void checkAndSendToThingSpeak(float mq7, float mq135_CO2) {
float temperature, humidity;
if (mq7 > COThreshold) {
Serial.println("Beware, polluted air! High CO concentration detected!");
triggerIFTTTEvent("Alert1");
triggerIFTTTEvent("Alert2");
}
if (mq135_CO2 > CO2Threshold) {
Serial.println("Beware, polluted air! High CO2 concentration detected!");
triggerIFTTTEvent("Alert1");
triggerIFTTTEvent("Alert2");
}
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.setField(1, mq7);
ThingSpeak.setField(2, mq135_CO2);
ThingSpeak.setField(3, temperature);
ThingSpeak.setField(4, humidity);
int response = ThingSpeak.writeFields(channelId, thingSpeakApiKey);
if (response == 200) {
Serial.println("Data sent to ThingSpeak successfully!");
} else {
Serial.println("Error sending data to ThingSpeak. HTTP error code " + String(response));
}
} else {
Serial.println("WiFi is not connected. Data not sent to ThingSpeak.");
}
}
void triggerIFTTTEvent(String eventName) {
String url = "https://maker.ifttt.com/trigger/" + eventName + "/json/with/key/cTPpOQswoK28BaLYucoHpQ";
HTTPClient http;
http.begin(url);
int httpResponseCode = http.GET();
http.end();
Serial.println("IFTTT event triggered: " + eventName);
}