Vous êtes sur la page 1sur 4

#include "DHT.

h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

/*Declaración de Variables: del sensor DHT (temperatura y humedad) */


DHT dht;
/*Variable cliente para la conexión red wifi*/
WiFiClient client;
/*Variable conexión de tipo MySQL_Connection para la conexión con mysql (BD)*/
MySQL_Connection conexion((Client *)&client);

/*
%s=cadena
Esos son parámetros de marcador de posición y es la forma preferida de construir consultas SQL.
%s puede sustituir cadenas, %d decimales, etc

Los que hay en INSERT_SQL sera lo que va ejecutar la librería mysql


es muy parecido a la "Inserción de datos" en mysql "INSERT INTO sensor01 VALUES (NULL, '192.168.1.10',
'45', '65', CURRENT_TIMESTAMP)"
en este caso solo tenemos "tres campos (DireccionIp,temperatura, humedad)"
Debido a que el campo "ID y tiempo" se generan automáticamente un vez que se insertan datos a la BD
Lo mismo para el INSERT_SQL2 con "dos campos" pero "ID y tiempo" se generan automáticamente.
*/
char s1[]="INSERT INTO proyecto.sensor01 (DireccionIp,temperatura, humedad) VALUES ('%s',%s,%s)";
char s2[]="INSERT INTO proyecto.sensor02 (DireccionIp,alcohol) VALUES ('%s',%s)";
char InsertIntoSensor01[128];
char InsertIntoSensor02[128];

//------CONEXIÓN del módulo nodemcu (wifi) CON LA RED INALÁMBRICA


//SSID: LAB-REDES
//PASS: L@B-R3D3$;2018

const char * SSID =" LAB-REDES ";


const char * PASSWORD =" L@B-R3D3$;2018";

void conectandoWiFi(){

Serial.println("-------------Conexion WIFI------------");
Serial.println("Conectandose a la red:....");
Serial.println(SSID);
Serial.println("Espere un momento por favor");

/*Verificando el estado del módulo nodemcu (wifi)


Preguntando si está conectado o si es = WL_CONNECTED. Si es TRUE termina el procedimiento (void)
*/
if(WiFi.status()==WL_CONNECTED)
return;

/* Iniciando el módulo NodeMCU(wifi) con (SSID,PASSWORD) de la red inalámbrica


* Esto para hacer la conexión del NodeMCU(wifi) con la red inalámbrica
*/
WiFi.begin(SSID,PASSWORD);

/*Verificando el estado del módulo nodemcu (wifi)


* preguntando si está conectado o si es <> WL_CONNECTED
* Si es diferente entrara dentro del ciclo(while). Buscando la red inalámbrica con un retardo de 100 mseg
* el retardo para no preguntar constantemente si está conectado a la red
*/
while(WiFi.status()!= WL_CONNECTED){
delay(100);
Serial.print(".");
}
Serial.println("Conexion exitosa a la red");
Serial.println(SSID);
Serial.println("IP Obtenida: ");
//WiFi.localIP() Devuelve la Dirección IP del Módulo NodeMCU
//Que fue asignada por punto de acceso del LAB123
Serial.println(WiFi.localIP());
}
//------FIN DEL PROCEDIMIENTO conexionWiFi

/*--------CONEXIÓN CON EL SERVIDOR MYSQL-------*/


/* (x,x,x,x) IP asignada por el punto de acceso del LAB123. Esta IP es de la PC del Servidor MYSQL */
IPAddress dir_servidorBD(172,20,168,158);
char userBD[]="user1"; //nombre de usuario de la BD
char passwordUserBD[]="12345"; // pass de usuario de la BD

//procedimiento conectando con el servidor mysql


void conectando_servidor_mysql(){
Serial.println("Conectando a la base de datos");
/*
*Preguntando si está conectado al servidor MYSQL
*IP del servidor MYSQL, puerto MYSQL, usuario BD, contraseña usuario BD
*Esperando un retardo de 200 mseg por cada intento de conexión con MYSQL
*/
while(conexion.connect(dir_servidorBD,3306,userBD,passwordUserBD)!=true){
delay(200);
Serial.print(".DB");
}
Serial.println("");
Serial.println("Conectado a SQL server");
}

//-----------------PRIMERA EJECUCION-----------------------
void setup(){
Serial.begin(9600);

//llamando a los procedimientos


conectandoWiFi();
conectando_servidor_mysql();

dht.setup(D1);
}

//---------------------CICLO-----------------------
void loop(){

/*
* por si se desconecta o detienen el servidor mysql
* si no existiera esta instrucción el módulo NodeMCU nunca se conectaría a MYSQL
*/
conectando_servidor_mysql();

char humedadd[10];
char temperaturaa[10];
char alcoholl[10];
//Inicializado en Cero, por si no hay conexión con MYSQL (BD). Sino subiría cualquier valor
float t=0;
float h=0;
float alcohol=0;
/*
En DirIP estará almacenando la IP del Módulo NodeMCU
para subir ese dato a los campos de la Base de Dato "proyecto"
WiFi.localIP()[0]=1er octeto WiFi.localIP()[1]=2do octeto WiFi.localIP()[2]=3er octeto
WiFi.localIP()[3]=4to octeto
*/
char DirIP[20];
sprintf(DirIP, "IP:%d.%d.%d.%d", WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], WiFi.localIP()[3] );

/*
sprintf(char* buffer, char* CadenaFormato, object Valor);
| | \_ Lista de valores que se van a convertir en cadena
| \_ cadena con la máscara de los valores a convertir
\_ Buffer donde devolveremos el resultado de los valores convertidos

DirIP=buffer
"IP:%d.%d.%d.%d"=CadenaFormato
WiFi.localIP()[0],....=Valor
%d=WiFi.localIP()[0] asi sucesivamente
%d=significa decimal
"IP:192.168.1.100" ejemplo: así quedara la cadena después de ejecutar "sprintf"
lo mismo aplica más abajo
*/
delay(20000); //retardo de 20 seg antes de subir datos al servidor de BD proyecto
//Creando variables que harán la ejecución de la instrucción "INSERT INTO"
MySQL_Cursor *ejecutarS1=new MySQL_Cursor(&conexion);
MySQL_Cursor *ejecutarS2=new MySQL_Cursor(&conexion);

//obteniendo datos del sensor DHT (temperatura y humedad)


h=dht.getHumidity();
t=dht.getTemperature();
//Retorna un valor real capturado del sensor de MQ2
alcohol=Detectordealcohol();
/*
char* dtostrf(float number, int tamanyo, int decimales, char* buffer);
| | | \_ buffer donde almacenaremos la cadena
| | \_ Precisión (nº decimales)
| \_Tamaño del número en caracteres
\_ Número a convertir

Ejemplo:
t=34.534
dtostrf(t,2,1,temperaturaa);
temperaturaa="34.5"
*/
dtostrf(t,2,1,temperaturaa);
dtostrf(h,2,1,humedadd);
dtostrf(alcohol,1,1,alcoholl);
Serial.println(temperaturaa);
Serial.println(humedadd);

/*
s1[]="INSERT INTO proyecto.sensor01 (DireccionIp,temperatura, humedad) VALUES ('%s',%s,%s)";
Después de ejecutar sprintf
s1[]="INSERT INTO proyecto.sensor01 (DireccionIp,temperatura, humedad) VALUES
("IP:192.168.1.100",32,70)";
*/

sprintf(InsertIntoSensor01,s1,DirIP,temperaturaa,humedadd);
sprintf(InsertIntoSensor02,s2,DirIP,alcoholl);

/*
* Ejecuta la instrucción primero del sensor01 y después los demás
s1[]="INSERT INTO proyecto.sensor01 (DireccionIp,temperatura, humedad) VALUES
("IP:192.168.1.100",32,70)";
*/
ejecutarS1 ->execute(InsertIntoSensor01);
ejecutarS2->execute(InsertIntoSensor02);

delete ejecutarS1;
delete ejecutarS2;
Serial.println("Datos registrados");
}//FIN DEL BUCLE

float Detectordealcohol(){
int adc_MQ=analogRead(A0);
float voltaje=adc_MQ *(2/1023.0);
float Rs=1000*((5-voltaje)/voltaje);
float miligr_alcohol=0.4091*pow(Rs/5463, -1.497);

Serial.print("alcohol: ");
Serial.print(miligr_alcohol);
Serial.println("mg/L");
return miligr_alcohol;
}

Vous aimerez peut-être aussi