/**
IoT Ecosystem Exercise for Temperature & Huminity Monitoring System for Wokwi
- Sensor: DHT22
- Actuators: LED, LCD
- Computing: ESP32
- Connectivity: WiFi, I2C, HTTP
- IoT Platform: ThingSpeak https://thingspeak.com/
*/
#include "DHTesp.h"
#include <Wire.h> // Para la comunicación I2C
#include <LiquidCrystal_I2C.h> // Para controlar la pantalla LCD
#include <WiFi.h> // Para la conectividad WiFi
#include "ThingSpeak.h" // Para la conexión a ThingSpeak
// GPIOs
//*************Sensors
const int DHT_PIN = 15; // Pin number to which the DHT22 sensor is connected
//*************Actuators
const int LED_PIN = 5; // Numero de Pin al cual está conectado el LED
// CONNECTIVITY
//*************I2C connection
LiquidCrystal_I2C lcd(0x27, 16, 2); // Definición de la conexión del display LCD
//*************WiFi connection
const char* ssid = "Wokwi-GUEST"; //SSID de la Red pública
const char* password = ""; //Contraseña
//************* ThingSpeak connection
unsigned long channelID = 2318068;
const char* key = "QOWG7ECX5NY1Y1TU";
//*************Objects creation & variables definition
DHTesp dhtSensor; // Create an instance of the DHTesp library
WiFiClient client; // Crear una instancia de la librería WiFiClient
void setup() {
Serial.begin(115200); // Initialize the serial communication at a baud rate of 115200
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Initialize the DHT22 sensor
// Pin configuration
pinMode(LED_PIN, OUTPUT);
// Create a LCD initialization
lcd.init(); // Inicializar la pantalla LCD
lcd.backlight();
// Create a WiFi Connection initialization
Serial.begin(9600);
Serial.print("Conectando a WiFi");
WiFi.begin(ssid, password, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
// Create a ThinkSpeak Connection initialization
ThingSpeak.begin(client);
}
void loop() {
// Reading from DHT22 sensor
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Read temperature and humidity from the DHT22 sensor
// Storing current temperature & huminity values
float temp = data.temperature;
float hum = data.humidity;
// Printing values in the serial monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C"); // Print the temperature value with 2 decimal places
Serial.println("Humidity: " + String(data.humidity, 1) + "%"); // Print the humidity value with 1 decimal place
if(temp > 40.0){ //Verifica si la temperatura es mayor a 40 °C
digitalWrite(LED_PIN, HIGH); // Encender el LED si se cumple la condición
}
else if (hum < 20.0){ // Verifica si la humedad es menor al 20%
digitalWrite(LED_PIN, HIGH); // Encender el LED si se cumple la condición
}
else{
digitalWrite(LED_PIN, LOW); //Apagar el LED si no se cumple la condición
}
// Proyecta las mediciones de humedad y temperatura en el display LCD
lcd.clear();
lcd.setCursor(0, 0); // Establecer el cursor en la primera línea
lcd.print("Temp: " + String(temp) + " C"); // Mostrar temperatura
lcd.setCursor(0, 1); // Establecer el cursor en la segunda línea
lcd.print("Hum: " + String(hum) + "%"); // Mostrar humedad
// Envía las mediciones del sensor a la página ThingSpeak
ThingSpeak.setField(1, hum);
ThingSpeak.setField(2, temp);
ThingSpeak.writeFields(channelID, key);
Serial.println("Datos enviados!!");
delay(10000); // Delay for 10 seconds
}