#include "MQ135.h" //Agregar libreria para el uso del sensor MQ135
#include "ThingSpeak.h" //Libreria para el uso del servidor ThingSpeak donde se mostrará la información
#include "WiFi.h" //Libreria para habilitar el uso de WiFi en el ESP32 en el código
#define gassensor 12 //Definimos el pin 12 del ESP32 para el sensor de gas mq135 (analogico)
#define pirsensor 27 //Definimos el pin 27 del ESP32 para el sensor pir (digital)
#define tempsensor 34 //Definimos el pin 34 del ESP32 para el sensor de temperatura lm35 (analogico)
int encenderpir = 0;// iniciamos el sensor pir en 0 - LOW
const char* ssid = "Wokwi-GUEST"; //Almacenamos el ssid (nombre de la red) en una variable
const char* password = ""; //Almacenamos la password (contraseña de la red) en una variable
unsigned long channelID = 2326596; //Almacenamos el id del canal creado en ThingSpeak para la conexion del mismo
const char* WriteAPIKey = "WG56XVTO9D1YFZ8L"; //Almacenamos el WriteAPIKey para la conexion del proyecto en el ThingSpeak
WiFiClient cliente; /*Almacenamos la información del cliente en una variable WiFiClient,
para iniciar la conexion con el servidor ThingSpeak*/
void setup(){
Serial.begin(115200); // El puerto serial inicia con 115200 baudios
analogReadResolution(8);
//sensors
pinMode(gassensor, INPUT); //Seleccionamos el pin del sensor de gas y lo colocamos como modo de entrada de datos (INPUT)
pinMode(pirsensor, INPUT); //Seleccionamos el pin del sensor pir y lo colocamos como modo de entrada de datos (INPUT)
pinMode(tempsensor, INPUT); //Seleccionamos el pin del sensor de gas y lo colocamos como modo de entrada de datos (INPUT)
Serial.println("Test de sensores:"); // Mostrar mensaje en el Serial port
WiFi.begin(ssid,password); // Iniciar la conexion a la red wifi con la información definida anteriormente
while (WiFi.status() != WL_CONNECTED) { //Crear un bucle de carga mientras la conexion aún no sea realizada.
delay(500); //tiempo de espera de 0.5 segundos
Serial.print("."); //Imprimir un valor simulando la carga de conexión de wifi.
}
Serial.println("Wifi conectado!"); //Saliendo del bucle, se informará que la red WiFi ha sido conectado con exito.
ThingSpeak.begin(cliente); //Se inicia la conexión del cliente con el Servidor ThingSpeak
}
void loop(){
leergas(); //llamamos a la función leergas
delay(1000); //tiempo de espera de 1 segundo
leerTemperatura(); //llamamos a la función leerTemperatura
delay(1000); //tiempo de espera de 1 segundo
PIR(); //llamamos a la funcion PIR
delay(1000); //tiempo de espera de 1 segundo
ThingSpeak.writeFields(channelID,WriteAPIKey); //Seleccionamos el canal del servidor donde se enviará la información
Serial.println("Datos enviados a ThingSpeak!");
Serial.println("\n");
delay(5000); //tiempo de espera de 5 segundos
}
void leergas(){ //Creamos la función leergas
int gas = analogRead(gassensor); /*Agregamos la lectura analogica en el pin almacenado en gassensor,
la cual se almacena en una variable entera "gas"*/
MQ135 sensorgas = MQ135(gas); //Iniciamos una variable MQ135 sensorgas para almacenar el valor del sensor
float calidad_aire = sensorgas.getPPM(); //Adquirimos los valores de calidad de aire en unidad PPM
Serial.print("Calidad aire: ");
Serial.print(calidad_aire); //Imprimimos en la consola la calidad de aire
Serial.println(" PPM");
ThingSpeak.setField (1,calidad_aire); //Lo mostramos en la grafica seleccionada del servidor
}
void PIR(){ //Creamos la función PIR
encenderpir = digitalRead(pirsensor); //Hacemos lectura del pin digital almacenado en pinsensor
int flag = 1; //Creamos una variable bandera para mostrar la información en thingspeak
if(encenderpir == HIGH){ //Creamos una condicional para saber cuando el sensor PIR detecta movimiento cerca
Serial.println("Movimiento detectado!");
ThingSpeak.setField (2,flag); //La informacion de la bandera se enviará al grafico 2 del servidor.
delay(2000); //tiempo de espera de 2 segundos
}else{ //En caso de que la primera condicion no sea ejecutada:
Serial.println("No hay movimiento");
flag = 0; //Modificamos el valor de la variable bandera a 0
ThingSpeak.setField (2,flag); //La informacion de la bandera se enviará al grafico 2 del servidor.
delay(2000); //tiempo de espera de 2 segundos
}
}
void leerTemperatura(){ //Creamos la función leerTemperatura
int adcTEMP = analogRead(tempsensor); /*Agregamos la lectura analogica en el pin almacenado en tempsensor,
la cual se almacena en una variable entera "adcTEMP"*/
Serial.print("Valor sensor: ");
Serial.println(adcTEMP); /*Acá mostramos el valor que envía el sensor de temperatura
para corroborar si funciona correctamente*/
float miliVoltios = ((adcTEMP * 5000.0) / 1023); //Evaluamos la funcion en miliVoltios (5V)
float tempC = miliVoltios / 10; //Dividimos entre 10 para hallar la temperatura resultante
float tempF = tempC * 9 / 5 + 32; //Hallamos la temperatura en F°
Serial.print("Temperature: ");
Serial.print(tempC); //Imprimimos en consola la temperatura en C°
Serial.print(" °C");
ThingSpeak.setField (3,tempC); //Enviamos la información en la gráfica 3 del servidor
Serial.print(" ~ ");
Serial.print(tempF); //Imprimimos en consola la temperatura en F°
Serial.println(" °F");
ThingSpeak.setField (4,tempF); //Enviamos la información en la gráfica 4 del servidor
delay(500); //tiempo de espera de 0.5 segundos
}