#include <WiFi.h>
#include <ThingSpeak.h>
#include <DHTesp.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// WiFi credentials
char ssid[] = "";
char pass[] = "";
// Pin definitions
#define DHTPIN 15 // Connect to pin D15 on ESP32 for DHT22
#define DS18B20_PIN 5 // Connect to GPIO5 pin on ESP32
#define sensorPin 35 // Connect to GPIO35 pin on ESP32
#define LedR 4 // Red LED pin
#define LedV 2 // Green LED pin
// ThingSpeak configuration
char thingSpeakApiKey[] = "BPLNEI70WG96AU21";
int channelNumber = 2358972;
WiFiClient client; // Declare the client variable here
// Initialize objects
DHTesp dht;
OneWire oneWire(DS18B20_PIN);
DallasTemperature sensor(&oneWire);
// Function to send DHT sensor data
void sendDHTSensor() {
TempAndHumidity data = dht.getTempAndHumidity();
// Update ThingSpeak fields
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
// Print sensor data to Serial monitor
Serial.print("Room Temperature: ");
Serial.print(data.temperature);
Serial.println(" °C");
Serial.print("Room Humidity: ");
Serial.print(data.humidity);
Serial.println(" %");
}
// Function to send DS18B20 sensor data
void sendDS18B20Sensor() {
sensor.requestTemperatures();
float tempC = sensor.getTempCByIndex(0);
// Update ThingSpeak field
ThingSpeak.setField(3, tempC);
// Print sensor data to Serial monitor
Serial.print("Body Temperature: ");
Serial.print(tempC);
Serial.println(" °C");
}
// Function to send CO sensor data
void sendCOValue() {
int lectura = analogRead(sensorPin);
float ppm = 400.0 / 4095.0; // Scale change for ESP32 (12-bit resolution)
float co = ppm * lectura;
// Update ThingSpeak field
ThingSpeak.setField(4, co);
// Print sensor data to Serial monitor
Serial.print("Monoxide Carbon: ");
Serial.print(co);
Serial.println(" ppm");
// Control LEDs based on CO level
if (co >= 100.0) {
digitalWrite(LedR, HIGH);
Serial.println("Danger! A high level of CO has been detected");
digitalWrite(LedV, LOW);
} else {
digitalWrite(LedR, LOW);
Serial.println("No danger");
digitalWrite(LedV, HIGH);
}
}
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
// Initialize ThingSpeak and sensors
ThingSpeak.begin(client);
dht.setup(DHTPIN, DHTesp::DHT22);
sensor.begin();
// Set up LED pins
pinMode(LedR, OUTPUT);
pinMode(LedV, OUTPUT);
// Configure ADC resolution and attenuation
analogReadResolution(12);
analogSetAttenuation(ADC_11db);
}
void loop() {
// Send DHT sensor data
sendDHTSensor();
ThingSpeak.writeFields(channelNumber, thingSpeakApiKey);
delay(15000); // Delay of 15 seconds between sends
// Send DS18B20 sensor data
sendDS18B20Sensor();
ThingSpeak.writeFields(channelNumber, thingSpeakApiKey);
delay(15000); // Delay of 15 seconds between sends
// Send CO sensor data
sendCOValue();
ThingSpeak.writeFields(channelNumber, thingSpeakApiKey);
delay(15000); // Delay of 15 seconds between sends
Serial.println("Data sent to ThingSpeak successfully");
}