Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //librerias para sensor de temperatura y humedad
- #include <DHT.h>
- #include <DHT_U.h>
- #include "WiFi.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <sqlite3.h>
- #include <SPI.h>
- #include <FS.h>
- #include "SPIFFS.h"
- #include <TimeLib.h>
- #include "ArduinoJson.h"
- #include "ESPAsyncWebServer.h"
- #define LED 2
- #define SENSORHUMO 15
- #define TEMPHUMEDAD 13
- #define ESTADOPUERTA 36
- #define DELAY 1000
- #define MAXHUMO 1000
- #define MAX_MINUTOS_SENSOR 2 //TIEMPO MAXMIMO EN MINUTOS -- CUANDO PASAN LOS 5 MINUTOS SE VUELVE A ESCRIBIR EN LA BASE DE DATOS
- #define DHTTYPE DHT11
- DHT dht(TEMPHUMEDAD, DHTTYPE);
- //VARIABLES PARA MANEJO DE TIEMPO
- time_t timeEventoHumo;
- time_t timeEventoPuerta;
- time_t timeEventoHumedad;
- time_t timeEventoTemperatura;
- time_t tiempo;
- String horaEvento;
- String sensorBaseDato;
- /*******************************/
- // VARIABLES PARA EL BUZZER
- int canal = 0;
- int freq = 2000;
- int resolucion = 8;
- int dutyCycle = 2755;
- int valorSensor = 0;
- int valorHumo = 0;
- int tiempoAlarma;
- char *zErrMsg = 0;
- //
- const char* ssid = "casa";
- const char* password = "MC.28_envyl";
- AsyncWebServer server(80);
- AsyncWebSocket ws("/ws");
- AsyncWebSocketClient * globalClient = NULL;
- String enviarDatos = "{\"temp\" : \"30°\", \"hum\" : \"45%\", \"humo\" : \"450\", \"puerta\" : \"Cerrada\"}";
- //VARIABLES DE BASE DE DATOS
- sqlite3 *baseDatos;
- int rc;
- //bool escribirDB = true;
- const char* data = "Callback function called";
- //FUNCION CALLBACK
- static int callback(void *data, int argc, char **argv, char **azColName) {
- int i;
- Serial.printf("%s: ", (const char*)data);
- for (i = 0; i<argc; i++){
- Serial.printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
- }
- Serial.printf("\n");
- return 0;
- }
- int db_open(const char *filename, sqlite3 **db) {
- int rc = sqlite3_open(filename, db);
- if (rc) {
- Serial.printf("Can't open database: %s\n", sqlite3_errmsg(*db));
- return rc;
- } else {
- Serial.printf("Opened database successfully\n");
- }
- return rc;
- }
- int db_exec(sqlite3 *db, const char *sql) {
- Serial.println(sql);
- long start = micros();
- int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
- if (rc != SQLITE_OK) {
- Serial.printf("SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- } else {
- Serial.printf("Operation done successfully\n");
- }
- Serial.print(F("Time taken:"));
- Serial.println(micros()-start);
- return rc;
- }
- int abrirSPIFFS(){
- if(!SPIFFS.begin()){
- Serial.println("Se ha producido un error al montar el sistema de archivos.");
- return 0;
- }else{
- Serial.println("El sistema de archivos se ha montado correctamente.");
- return 1;
- }
- }
- void setup() {
- Serial.begin(115200);
- delay(3000);
- pinMode(LED, OUTPUT);
- pinMode(ESTADOPUERTA, INPUT);
- abrirSPIFFS();
- Serial.println("Programa Iniciando");
- dht.begin(); //----> inicia el objeto de la clase dth (sensor temperatura humedad)
- ledcSetup(canal, freq, resolucion);
- ledcAttachPin(0, canal);
- //AJUSTAR LA HORA Y FECHA DEL ESP32 PARA PODER CONTROLAR EL TIMPO DE SENSADO
- setTime(2,16,0,18,06,2018);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.println("Connecting to WiFi..");
- }
- Serial.println(WiFi.localIP());
- ws.onEvent(onWsEvent);
- server.addHandler(&ws);
- server.on("/html", HTTP_GET, [](AsyncWebServerRequest *request){
- request->send(SPIFFS, "/ws.html", "text/html");
- });
- server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request){
- request->send(SPIFFS, "/script.js", "text/js");
- });
- server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
- request->send(SPIFFS, "/style.css", "text/css");
- });
- server.begin();
- }
- void loop() {
- delay(DELAY);
- //sensorHumo(); //----> ESTADO SENSOR HUMO
- //estadoHumedad(); //--->ESTADO SENSOR HUMEDAD
- //estadoTemperatura(); //---> ESTADO SENSOR TEMPERATURA
- //estadoPuerta(); //---> ESTADO SENSOR MAGNETICO PUERTA
- //int valorHumo = sensorHumo();
- Serial.println("Valor de Humo: "+ sensorHumo());
- //////////////////
- /*enviarDatos = "{\"temp\" : \""+String(estadoTemperatura())+"°\", \"hum\" : \""+String(estadoHumedad())+"%\", \"humo\" : \""+String(sensorHumo())+"\", \"puerta\" : \"Cerrada\"}";
- if(globalClient != NULL && globalClient->status() == WS_CONNECTED){
- String randomNumber = String(random(0,20));
- globalClient->text(enviarDatos);
- }*/
- //////////////////
- }
- float estadoHumedad(){
- float valorHumedad = dht.readHumidity();
- if(isnan(valorHumedad)){
- Serial.println("Error al intentar leer el Sensor de Humedad");
- valorHumedad = 0;
- }else if(valorHumedad > 80) {
- //alarma(1500);
- if((now() - timeEventoHumedad) > 120) {
- timeEventoHumedad = now();
- horaEvento = getHora();
- Serial.println("ESTADO PUERTA: han pasado 2 minutos");
- //escribirBaseDato("HUMEDAD", (String)valorHumedad, (String)horaEvento);
- }
- }
- return valorHumedad;
- }
- float estadoTemperatura(){
- float temperatura = dht.readTemperature(); //----> Por default lee la temperatura en grados Celsius
- if(isnan(temperatura)){
- Serial.println("Error al intentar leer el Sensor de Temperatura");
- temperatura = 0;
- }else if(temperatura > 40){
- if((now() - timeEventoTemperatura) > 120){
- timeEventoTemperatura = now();
- horaEvento = getHora();
- Serial.println("ESTADO TEMPERATURA: has pasado 2 munutos");
- escribirBaseDato("TEMPERATURA", (String)temperatura, (String)horaEvento);
- }
- }
- return temperatura;
- }
- void estadoPuerta(){
- if(digitalRead(ESTADOPUERTA) > 0){
- Serial.print("La puerta se ha abierto: ");
- Serial.println(digitalRead(ESTADOPUERTA));
- //alarma(3005);
- if((now() - timeEventoPuerta) > 120 ){ //---> REGISTRAR EL TIEMPO EN EL QUE SE DISPARA EL EVENTO
- timeEventoPuerta = now();
- horaEvento = getHora();
- Serial.println("ESTADO PUERTA: han pasado 2 minutos");
- //escribirBaseDato("PUERTA", (String)digitalRead(ESTADOPUERTA), (String)horaEvento);
- }
- //Serial.print("Hora de apertura de la Puerta: ");
- //Serial.println(timeEventoPuerta);
- }else{
- //alarma(0);
- }
- }
- void escribirBaseDato(String sensor, String valorSensor, String hora){
- if(sensor != sensorBaseDato){
- if(abrirSPIFFS()){
- sqlite3_initialize();
- db_open("/spiffs/basedato.db", &baseDatos);
- String cadenaSql = "INSERT INTO registros_sensor(sensor, valor_registro, fecha, hora) VALUES ('"+ sensor +"', '" + valorSensor + "', '14-06-19', '" + horaEvento + "');";
- //CONVERTIR LA SENSTENCIA DE TIPO STRING A CONST CHAR
- const char * sentencia = cadenaSql.c_str();
- //EJECUTO LA SENSTENCIA
- rc = db_exec(baseDatos, sentencia);
- if (rc != SQLITE_OK) {
- sqlite3_close(baseDatos);
- Serial.println("SE REALIZO UNA ESCRITURA EN LA BASE DE DATOS");
- }
- }
- }
- sensorBaseDato = sensor;
- }
- int sensorHumo(){
- //valorSensor = analogRead(SENSORHUMO);
- valorHumo =analogRead(SENSORHUMO);
- Serial.print("Valor Humo: ");
- Serial.println(valorHumo);
- if( valorHumo > MAXHUMO) {
- digitalWrite(LED, HIGH);
- //SUENA EL BUZZER
- //alarma(2755);
- //CONTROL DEL TIEMPO PARA ESCRITURA EN LA BASE DE DATOS
- if ((now() - timeEventoHumo ) > 120){
- //CADENA QUE CONTIENE LA SENTENCIA SQL
- horaEvento = getHora();
- //escribirBaseDato("HUMO", (String)valorHumo, horaEvento ); //----> escribo en la base de datos el valor del sensor
- Serial.println("Humo detectado");
- Serial.println("ESTADO HUMO: han pasado 2 minutos");
- //tomar lectura de la tempetarua
- //---> //float temperatura = dht.readTemperature();
- //escribirBaseDato("Temperatura", (String)temperatura, horaEvento); //---> escribo en la DB la temperatura
- //TOMO EL TIEMPO EN EL QUE SE DISPARA EL SENSOR
- timeEventoHumo = now();
- }
- }else{
- digitalWrite(LED, LOW);
- ledcWrite(canal, 0);
- //escribirDB = true;
- }
- return valorHumo;
- }
- void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
- if(type == WS_EVT_CONNECT){
- Serial.println("Websocket client connection received");
- globalClient = client;
- } else if(type == WS_EVT_DISCONNECT){
- Serial.println("Websocket client connection finished");
- globalClient = NULL;
- }
- }
- void alarma(int encender){
- ledcWrite(canal, encender);
- }
- String getHora(){
- tiempo = now();
- horaEvento = "";
- horaEvento.concat(hour(tiempo));
- horaEvento.concat(":");
- horaEvento.concat(minute(tiempo));
- horaEvento.concat(":");
- horaEvento.concat(second(tiempo));
- return horaEvento;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement