/*
Sketch generated by the Arduino IoT Cloud Thing "Untitled"
https://create.arduino.cc/cloud/things/31283e1d-e58c-4a39-bfc3-2f787dfd73ba
Arduino IoT Cloud Variables description
The following variables are automatically generated and updated when changes are made to the Thing
bool vstatus;
Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/
//______________________________SENSOR TEMPERATURA___________________________________
#include "DHTesp.h" //Llamar librería del sensor DHT
const int DHT_PIN = 15; //Pin al que está conectado el sensor
DHTesp dhtSensor;
//__________________________________PANTALLA LCD_____________________________________
#include <LiquidCrystal_I2C.h> //Llamar librería de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); //Tipo de LCD: 16x2
//___________________________________FIREBASE________________________________________
//Llamar librerías
#include <Arduino.h>
#include <ArduinoJson.h>
#include <HTTPClient.h>
//Declarar variables
char Fecha[]="04/09/2022";
char CodigoSensor[]="12345";
const char* ssid = "Wokwi-GUEST";
const char* password = "";
HTTPClient client;
//_________________________________ARDUINO CLOUD______________________________________
//Llamar librería
#include "thingProperties.h"
//Definir pines a los que se conectaron los LEDS
#define LED1 27
#define LED2 14
#define LED3 12
#define LED4 13
void setup() {
//___________________________________FIREBASE________________________________________
Serial.begin(115200); //Inicializar comunicación serial
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //Sensor de temperatura DHT22 en pin declarado
//LCD
Wire.begin(21, 22); //Pin SDA/SCL
lcd.init(); //Inicializar LCD
lcd.backlight(); //Encender luz
lcd.clear(); //Limpiar pantalla
//Realizar conexión Wifi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
//firebase();
//_________________________________ARDUINO CLOUD______________________________________
//Declarar LEDS como salidas
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
//_________________________________PROGRAMA PRINCIPAL______________________________________
void loop() {
//SensorTemperatura();
firebaseloop();
ArduinoCloud.update();
}
/*
void SensorTemperatura() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperatura = data.temperature;
Serial.println("Temperatura: " + String(temperatura) + "°C");
}
*/
/*
void firebase() {
client.begin("https://practicasensores-16811-default-rtdb.firebaseio.com/SensorWokwi.json");
client.addHeader("Content-Type","application/json");
String json;
StaticJsonDocument<200> doc;
doc["Fecha"]=Fecha;
lcd.print(Fecha);
lcd.print(" ");
doc["Codigo del sensor"]=CodigoSensor;
lcd.print(CodigoSensor);
serializeJson(doc,json);
client.PATCH(json);
String payload = client.getString();
Serial.println(payload);
}
*/
//_________________________________SUBPROGRAMA: FIREBASE______________________________________
void firebaseloop() {
//Link hacia la base de datos a conectar junto con el apartado "SensorWokwi" donde se guardarán los datos
client.begin("https://practicasensores-16811-default-rtdb.firebaseio.com/SensorWokwi.json");
client.addHeader("Content-Type","application/json");
String json;
StaticJsonDocument<200> doc;
doc["Fecha"]=Fecha; //Enviar variable "Fecha" a Firebase
lcd.print(Fecha); //Imprimir variable "Fecha" en la LCD
lcd.print(" "); //Imprimir espacio en la LCD
doc["Codigo del sensor"]=CodigoSensor;//Enviar variable "Codigo del sensor" a Firebase
lcd.print(CodigoSensor); //Imprimir variable "Codigo del sensor" en la LCD
TempAndHumidity data = dhtSensor.getTempAndHumidity(); //Leer temperatura del sensor
float temperatura = data.temperature; //Declarar y guardar temperatura como flotante
doc["Medicion de Temperatura"]=temperatura; //Enviar variable "Temperatura" a Firebase
lcd.setCursor(0, 1); //Pasar al segundo renglón de la LCD
lcd.print(temperatura); //Imprimir variable "Temperatura" en la LCD
lcd.print("C "); //Imprimir caracter " C" de grados centígrados en la LCD
//_______________________ ASIGNACIÓN DE ESTATUS_________________________
//_________________________ESTATUS: BAJO CERO___________________________
if (temperatura<0){
char Estatus[]="BajoCero"; //Asignar estatus bajo cero
doc["Estatus"]=Estatus; //Enviar variable "Estatus" a Firebase
lcd.print(Estatus); //Imprimir variable "Estatus" en la LCD
}
//_________________________ESTATUS: FRÍO_________________________________
else if (temperatura<20 and temperatura>=0){
char Estatus[]="Frio"; //Asignar estatus frío
doc["Estatus"]=Estatus; //Enviar variable "Estatus" a Firebase
lcd.print(Estatus); //Imprimir variable "Estatus" en la LCD
lcd.print(" "); //Imprimir espacio en la LCD
}
//_________________________ESTATUS: AGRADABLE ____________________________
else if (temperatura>=20 and temperatura<=35){
char Estatus[]="Agradable"; //Asignar estatus agradable
doc["Estatus"]=Estatus; //Enviar variable "Estatus" a Firebase
lcd.print(Estatus); //Imprimir variable "Estatus" en la LCD
}
//_________________________ESTATUS: CALIENTE _____________________________
else if (temperatura>35){
char Estatus[]="Caliente"; //Asignar estatus caliente
doc["Estatus"]=Estatus; //Enviar variable "Estatus" a Firebase
lcd.print(Estatus); //Imprimir variable "Estatus" en la LCD
lcd.print(" "); //Imprimir espacio en la LCD
}
//_____________________ESTATUS: DESCONOCIDO ______________________________
else {
char Estatus[]="Desconocido";
doc["Estatus"]=Estatus; //Enviar variable "Estatus" a Firebase
lcd.print(Estatus); //Imprimir variable "Estatus" en la LCD
}
serializeJson(doc,json);
client.PATCH(json);
String payload = client.getString();
Serial.println(payload);
}
/*
Since Vstatus is READ_WRITE variable, onVstatusChange() is
executed every time a new value is received from IoT Cloud.
*/
//_________________________________SUBPROGRAMA: ARDUINO CLOUD______________________________________
void onVstatusChange() {
//Si el interruptor enlazado a la varaible "vstatus" está encendido
if (vstatus){
TempAndHumidity data = dhtSensor.getTempAndHumidity(); //Leer temperatura del sensor
float temperatura = data.temperature; //Declarar y guardar temperatura como flotante
vvalor=temperatura; //Guardar el valor de la temperatura en la variable "vvalor"
Serial.println("Temperatura: " + String(vvalor) + "°C"); //Imprimir temperatura en la consola de Wokwi
Serial.println("ON"); //Imprimir "ON" en la consola de Wokwi
//_________________________ESTATUS: BAJO CERO___________________________
if (vvalor<0){
//Encender LED blanco, apagar el resto
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
//_________________________ESTATUS: FRÍO_________________________________
else if (vvalor<20 and vvalor>=0){
//Encender LED azul, apagar el resto
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
//_________________________ESTATUS: AGRADABLE ____________________________
else if (vvalor>=20 and vvalor<=35){
//Encender LED verde, apagar el resto
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
}
//_________________________ESTATUS: CALIENTE _____________________________
else if (vvalor>35){
//Encender LED naranja, apagar el resto
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
}
}
//Si el interruptor enlazado a la varaible "vstatus" está apagado
else {
Serial.println("OFF"); //Imprimir "OFF" en la consola de Wokwi
//Apagar todos los LEDS
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
}