#include <WiFi.h>
#include "DHT.h"
#include "ThingSpeak.h"
const int DHT_PIN = 2; // Número del pin al que está conectado el sensor DHT22
const int LED_PIN = 13; // pin del LED rojo
const char* WIFI_NAME = "Wokwi-GUEST"; // Nombre de la red WiFi
const char* WIFI_PASSWORD = ""; // Contraseña de la red WiFi
const int myChannelNumber = 2426615; // Número de canal de ThingSpeak
const char* myWriteApiKey = "5IH7JZBVQSC6NYS2"; // Clave de API de escritura en ThingSpeak
const char* myReadApiKey = "K61BH80L1S13V2VZ"; // Clave de API de lectura en ThingSpeak
float temperatura; // Temperatura recogida por el sensor DHT22
float humedad; // Humedad recogida por el sensor DHT22
DHT sensorTemp1(DHT_PIN, DHT22); // Crear una instancia sensor DHT22
WiFiClient client; // Crear un objeto cliente WiFi
void setup()
{
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
sensorTemp1.begin(); // Inicializar el sensor DHT22
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); // Conectarse a la red WiFi
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print("."); // Imprimir un mensaje si no se ha conectado al WiFi
}
Serial.println("¡WiFi conectado!"); // Imprimir un mensaje si se ha conectado al WiFi
Serial.print("IP local: "); // Imprimir la dirección IP local
Serial.println(WiFi.localIP());
WiFi.mode(WIFI_STA); // Establecer el modo WiFi en modo estación
ThingSpeak.begin(client); // Inicializar la biblioteca ThingSpeak
}
void loop()
{
bool EstadoLED = ThingSpeak.readFloatField(myChannelNumber, 1); // Leer el valor del campo 1 como estado del LED
//bool EstadoLED = ThingSpeak.readFloatField(myChannelNumber, 1, myReadApiKey); //Si el canal es privado
int CodigoLectura = ThingSpeak.getLastReadStatus();
if(CodigoLectura == 200) // Si recibe mensaje "http 200"
{
Serial.println("Datos recibidos correctamente"); // Imprimir un mensaje si los datos se recibieron correctamente desde ThingSpeak
}
else
{
Serial.println("Error al recibir los datos" + String(CodigoLectura)); // Imprimir un mensaje de error con el código de estado HTTP si hubo un error al recibir los datos
}
if (EstadoLED == 0)
{
digitalWrite(LED_PIN, LOW);
Serial.println("LED APAGADO");
}
else
{
digitalWrite(LED_PIN, HIGH);
Serial.println("LED ENCENDIDO");
}
delay(15000); // Retardo para que ThingSpeak pueda enviar el valor del LED y no esté saturado recibiendo los valores de temperatura y humedad
temperatura = sensorTemp1.readTemperature(); // Leer la temperatura del sensor DHT22
humedad = sensorTemp1.readHumidity(); // Leer la temperatura del sensor DHT22
if (isnan(temperatura) || isnan(humedad))
{
Serial.println(F("Fallo al leer el sensor DHT"));
return;
}
Serial.println("Temperatura: " + String(temperatura, 2) + "ºC"); //Imprimir el valor de la temperatura con 2 decimales
Serial.println("Humedad: " + String(humedad, 1) + "%"); //Imprimir el valor de la humedad con 1 decimal
ThingSpeak.setField(2, temperatura); // Establecer el valor del campo 2 en el canal de ThingSpeak como la temperatura
ThingSpeak.setField(3, humedad); // Establecer el valor del campo 3 en el canal de ThingSpeak como la humedad
int CodigoEscritura = ThingSpeak.writeFields(myChannelNumber, myWriteApiKey); // Escribir los datos en el canal de ThingSpeak
if(CodigoEscritura == 200) // Si recibe mensaje "http 200"
{
Serial.println("Datos enviados correctamente"); // Imprimir un mensaje si los datos se enviaron correctamente a ThingSpeak
}
else
{
Serial.println("Error al enviar los datos" + String(CodigoEscritura)); // Imprimir un mensaje de error con el código de estado HTTP si hubo un error al enviar los datos
}
Serial.println();
Serial.println("----------------------- ESPERAMOS 15 SEGUNDOS -----------------------------");
Serial.println();
delay(15000); // Retardo de 15 segundos ya que ThingSpeak tiene un retardo de 15 segundos en version gratuita
}