#include <WiFiClient.h>// inluimos libreria para manejar un cliente WiFi
#include <ESP8266WebServer.h>// incluimos libreria para manejar un webserver en un modulo ESP8266
#include <DHT.h>// incluimos la libreria para utilizar un sensor DHT
#include <Adafruit_BMP085.h> // incluimos libreria para utilizar un sensor atmosferico BMP05
#define ssid "Infinitum_3010" // Definimos el nombre de nuestro SSID
#define password "1484349071" // definimos la key para conectarse a nuestro SSID
#define DHTTYPE DHT22 // definimos que nuestro sensor de temeperatura es un DHT22
#define DHTPIN D4 // Definimos en que pin conectamos nuestro sensor de temperatura
const uint8_t GPIOPIN[4] = {D5,D6,D7,D8}; // Led
float t = 0 ; //Variable que contendrá la Temperatura
float h = 0 ;// Variable que contendrá la Humedad
float p = 0;//Variable que contendrá la presión Atmosférica
String etatGpio[4] = {"OFF","OFF","OFF","OFF"};
// Creamos los objetos
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
ESP8266WebServer server ( 80 );
String getPage(){ // se genera codigo HTML para el cliente
String page = "<html lang='eng'><head><meta http-equiv='refresh' content='60' name='viewport' content='width=device-width, initial-scale=1'/>";
page += "<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'><script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script><script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script>";
page += "<title>Foros de Electronica ESP8266 como Web server</title></head><body>";
page += "<div class='container-fluid'>";
page += "<div class='row'>";
page += "<div class='col-md-12'>";
page += "<h1>Foros de Electronica</h1>";
page += "<h3>Mostrando datos de sensor DHT22;o</h3>";
page += "<ul class='nav nav-pills'>";
page += "<li class='active'>";
page += "<a href='#'> <span class='badge pull-right'>";
page += t;
page += "</span> Temperatura</a>";
page += "</li><li>";
page += "<a href='#'> <span class='badge pull-right'>";
page += h;
page += "</span> Humedad;</a>";
page += "</li><li>";
page += "<a href='#'> <span class='badge pull-right'>";
page += p;
page += "</span> Pression atmosferica</a></li>";
page += "</ul>";
page += "<table class='table'>"; // tabla de valores
page += "<thead><tr><th>Transductor</th><th>Medida</th><th>Valor</th><th>Valor Anterior</th></tr></thead>"; //Encabezado de la tabla
page += "<tbody>"; // contenido de la tabla
page += "<tr><td>DHT22</td><td>Temperatura</td><td>"; // Presentamos la primera linea de temperatura
page += t;
page += "°C</td><td>";//presentamos el simbolo de grados centigrados
page += "-</td></tr>";
page += "<tr class='active'><td>DHT22</td><td>Humedad;</td><td>"; // Segunda linea de Humedad
page += h;
page += "%</td><td>"; // presentamos el simbolo de %
page += "-</td></tr>";
page += "<tr><td>BMP180</td><td>Pression Atmosferica</td><td>"; //tercera Linea: presion Atsmosferica (BMP180)
page += p;
page += " mbar</td><td>";// presntamos el simbolo de Milibars
page += "-</td></tr>";
page += "</tbody></table>";
page += "<h3>GPIO</h3>";
page += "<div class='row'>";
page += "<div class='col-md-4'><h4 class ='text-left'>D5 ";
page += "<span class='badge'>";
page += etatGpio[0];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D5' value='1' class='btn btn-success btn-lg'>ON</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D5' value='0' class='btn btn-danger btn-lg'>OFF</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>D6 ";
page += "<span class='badge'>";
page += etatGpio[1];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D6' value='1' class='btn btn-success btn-lg'>ON</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D6' value='0' class='btn btn-danger btn-lg'>OFF</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>D7 ";
page += "<span class='badge'>";
page += etatGpio[2];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D7' value='1' class='btn btn-success btn-lg'>ON</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D7' value='0' class='btn btn-danger btn-lg'>OFF</button></form></div>";
page += "<div class='col-md-4'><h4 class ='text-left'>D8 ";
page += "<span class='badge'>";
page += etatGpio[3];
page += "</span></h4></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D8' value='1' class='btn btn-success btn-lg'>ON</button></form></div>";
page += "<div class='col-md-4'><form action='/' method='POST'><button type='button submit' name='D8' value='0' class='btn btn-danger btn-lg'>OFF</button></form></div>";
page += "</div>";
page += "<br><p><a href='http://www.forosdeelectronica.com'>www.forosdeelectronica.com</p>";
page += "</div></div></div>";
page += "</body></html>";
return page;
}
void handleRoot(){
if ( server.hasArg("D5") ) {
handleD5();
} else if ( server.hasArg("D6") ) {
handleD6();
} else if ( server.hasArg("D7") ) {
handleD7();
} else if ( server.hasArg("D8") ) {
handleD8();
} else {
server.send ( 200, "text/html", getPage() );
}
}
void handleD5() {
String D5Value;
updateGPIO(0,server.arg("D5"));
}
void handleD6() {
String D6Value;
updateGPIO(1,server.arg("D6"));
}
void handleD7() {
String D7Value;
updateGPIO(2,server.arg("D7"));
}
void handleD8() {
String D8Value;
updateGPIO(3,server.arg("D8"));
}
void updateGPIO(int gpio, String DxValue) {
Serial.println("");
Serial.println("Actualizar GPIO "); Serial.print(GPIOPIN[gpio]); Serial.print(" -> "); Serial.println(DxValue);
if ( DxValue == "1" ) {
digitalWrite(GPIOPIN[gpio], HIGH);
etatGpio[gpio] = "On";
server.send ( 200, "text/html", getPage() );
} else if ( DxValue == "0" ) {
digitalWrite(GPIOPIN[gpio], LOW);
etatGpio[gpio] = "Off";
server.send ( 200, "text/html", getPage() );
} else {
Serial.println("Valor incorrecto de Led");
}
}
void setup() {
for ( int x = 0 ; x < 5 ; x++ ) {
pinMode(GPIOPIN[x],OUTPUT);
}
Serial.begin ( 115200 );
// Inicializamos el sensor BMP180
if ( !bmp.begin() ) {
Serial.println("BMP180 No se pudo inicializar");
while(1);
} else {
Serial.println("BMP180 Listo y en servicio");
}
WiFi.begin ( ssid, password );
// Iniciamos Conexion a router
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 ); Serial.print ( "." );
}
// OK si la conexion se realiza
Serial.println ( "" );
Serial.print ( "Conectado a: " ); Serial.println ( ssid );
Serial.print ( "Direccion Ip de escucha " ); Serial.println ( WiFi.localIP() );
// Liga para la funcion que maneja la pagina de lanzamiento
server.on ( "/", handleRoot );
server.begin();
Serial.println ( "Servidor HTTP iniciado en el puerto 80" );
}
void loop() {
// aqui debemos incluir el codigo que consideremos deba estar corriendo repetidamente
// en este caso mantenemos la atencion a un posible cliente, leemos la temperatura y humedad del DHT y por ultimo la presion atmosferica del BMP180
server.handleClient();
t = dht.readTemperature();
h = dht.readHumidity();
p = bmp.readPressure() / 100.0F;
delay(1000);// este delay es meramente opcional y solo sirve para efectos de depurar el programa
}