//librerias
#include "FirebaseESP32.h"
#include "DHTesp.h"
#include <ESPDateTime.h>
//pines
#define btn 2
const int DHT_PIN = 15;
//Usuario de Firebase
String usuario = "/SleepData/SPs66H0MSwdBJlnC4WmDt4ayFNv1/";
//Conexion a internet
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
//Variables del circuito
bool iterar = true; //Iterador
String fechaInicio; //Fecha inicio de sesion
int duracion; //Duracion de sesion
String nodo; //Nodo donde guardar mediciones
FirebaseData firebaseData; //Base de datos
DHTesp dhtSensor; //Sensor DHT
//FUNCIONES
//Coneccion a wifi
void wifi(){
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
}
//Obtener datos del sensor DHT22
//Push:
// Temperatura
// Humedad
void sense(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Firebase.pushFloat(firebaseData,
nodo + "/temperatura",
String(data.temperature, 2).toFloat());
Firebase.pushFloat(firebaseData,
nodo + "/humedad",
String(data.humidity, 2).toFloat());
Serial.println("Data:");
Serial.println(String(data.temperature,2)+" "+String(data.humidity,2));
}
//Enviar datos a firebase
//setString:
// tiempo inicial
// tiempo final
void sendData() {
duracion=millis()/1000-10000; //tiempo en segundos
// escribir datos
Firebase.setInt(firebaseData,
nodo + "/duracion",
duracion);
}
//Configurar tiempo
void tiempo(){
DateTime.setTimeZone("UTC-5");
DateTime.begin(/* timeout param */);
if (!DateTime.isTimeValid()) {
Serial.println("Failed to get time from server.");
}
fechaInicio = DateTime.format(DateFormatter::DATE_ONLY);
Serial.println(
"Fecha: "+
DateTime.format(DateFormatter::DATE_ONLY));
}
//SETUP
void setup() {
//Comunicacion serial
Serial.begin(115200);
//Locacion de pines
pinMode(btn, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
wifi();
//Inicializacion de Firebase
Firebase.begin(
"https://dreamingmonitor-default-rtdb.firebaseio.com",
"asHPGsB4itGKvZsScnSmgcaN8l0egHHgZGYPVwWw");
tiempo();
nodo=usuario+fechaInicio;
}
//LOOP
void loop() {
while (iterar)
{
sense();
//Si el pulsador es presionado se pararan las mediciones
if(digitalRead(btn)==LOW){
Serial.println("btn pressed, terminating session");
sendData();
Firebase.end(firebaseData);
Serial.println("Firebase ended");
iterar=false;
}
delay(1000);
}
}