Introduction: IoT - Arduino – NodeMCU ESP-12 ESP8266

By: @IoT_Live

Hace unos días, en medio de mis búsquedas para intentar solucionar algunos inconvenientes con el Modulo ESP8266, me encontré con algunos foros que hacían mención al NodemCU basado en el lenguaje de programación LUA. Me llamo tanto la atención, que compre algunos para probar su funcionalidad. Realmente fueron económicos (USD4,73 en Aliexpress)

Llevo algunos días trabajando con el, y he obtenido muy buenas respuestas ya que con el WIFI integrado y la disponibilidad de 11 puertos GPIO y uno Análogo, he logrado programar muy fácilmente funcionalidades que hace años requeríamos de muchas horas de trabajo y hardware costosos y de tamaños considerables.

El NodeMCU ESP-12 es posible programarlo incluso desde el IDE de Arduino logrando así usar una herramienta que ya para mi era familiar. Para lograrlo, utilice la versión de Arduino IDE 1.6.7 descargada desde la URL oficial de Arduino http://www.arduino.cc y adicione en la opción de preferencias, el gestor de URLs Adicionales para tarjetas correspondiente a ESP8266 http://www.arduino.cc



la ventaja, es que si ya estas trabajando con tarjetas de otros Fabricantes, puedes usar varias URLs.

Step 1:

reiniciar el IDE de Arduino, vamos a tener a nuestra disposición los Módulos de ESP8266 para programarlos como si se tratase de otro modulo de Arduino.

Es importante Seleccionar las demás características que se activan para estos módulos, en la imagen, se puede observar los valores que estoy utilizando con la placa ESP12



para utilizar los pines, fue necesario realizar algunas pruebas, para obtener las equivalencias de los pines, dependiendo de cómo los este utilizando, ya que la distribución física y son diferentes.
pines:
NODEMCU ESP12 LUA Descripción Arduino
20 - TX GPIO1 Digital 1
28 – D4 GPIO2 Digital 2
21 – RX GPIO3 Digital 3
30 – D2 GPIO4 Digital 4
31 – D1 GPIO5 Digital 5
24 – D6 GPIO12 Digital 12
23 – D7 GPIO13 Digital 13
25 – D5 GPIO14 Digital 14
22 – D8 GPIO15 Digital 15
32 – D0 GPIO16 – USER – WAKE Digital 16
01 – A0 ADC0 - TOUT Analog A0



Los Ejemplos básicos que vienen con Arduino, funcionan sin ningún inconveniente. En el Siguiente ejemplo, utilice los siguientes Materiales.

Placa: NodeMCU ESP-12 ESP8266
Sensor DHT22
Arduino IDE 1.6.7

Step 2: Programa Arduino

#include “ESP8266WiFi.h”

#include “WiFiClient.h”

#include “ESP8266WebServer.h”

#include “ESP8266mDNS.h”

#include "DHT.h"

#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "UNE_7586";
const char* password = "12345678";

ESP8266WebServer server(80);

const int led = 13;

void handleRoot() {

String message = "ESP8266 Server Nodemcu\n\n";

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);

message += "Humidity: ";
message += h;
message += " %\t";
message += "Temperature: ";
message += t;
message += " *C ";
message += f;
message += " *F\t";
message += "Heat index: ";
message += hic;
message += " *C ";
message += hif;
message += " *F \n";

digitalWrite(led, 1);
server.send(200, "text/plain", message);
digitalWrite(led, 0);

}

void handleNotFound(){
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}

void setup(void){

pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}

server.on("/", handleRoot);

server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});

server.onNotFound(handleNotFound);

server.begin();
Serial.println("HTTP server started");
}

void loop(void){
server.handleClient();
}