Contenido
1 – ¿Qué es NodeMCU ESP12?
NodeMCU es una pequeña, barata (7 euros) y simple placa electrónica, la puedes utilizar como receptor o emisor wifi, dispone de entradas y salidas tanto digitales como analógicas, perfecto para diseñar prototipos tipo arduino con casi las mismas prestaciones. Este pequeño circuito utiliza la ESP8266.
La última NodeMCU utiliza el modulo ESP32 con mejoras respecto a la versión anterior ESP12.
2 – Datos técnicos y características de NodeMCU con ESP12.
NodeMCU es capaz de conectarse vía wifi con un dispositivo, como por ejemplo un ordenador , una Tablet o un móvil, para recibir o transmitir información. Al mismo tiempo es capaz de interactuar con motores, leds, sensores de temperatura, detectores de humo, relés, etc.
Para conocer un poco mejor este dispositivo vamos a describir algunas de las características físicas y de software que posee.
Características de NodeMCU con ESP12:
- Procesador ESP8266, de 32 bits a 80MHz o incluso 160MHz.
- 35K de IRAM.
- 80K de DRAM.
- Memoria Flash de 32 Megabits (4 MegaBytes).
- Tensión de trabajo 3.3V.
- Intensidad de consumo 50mA aproximadamente aunque tiene picos de más de 300mA.
- Protocolo 802.11 b/g/n .
- Wifi Direct (P2P) Soft-AP.
- Stack TCP/IP.
- Interface WIFI a 2.4 Ghz.
- Pulsador para Flash.
- Pulsador para Reset.
- Conector micro usb.
- Pins GPIO (input-Output) y PWM de 0-12.
- Chip CH340G dedicado a USB-UART.
- El pin que utiliza para encender el led interno es el GPIO16 o D0, y debe estar en estado LOW para encenderse.
3 – Descripción de cada uno de los pines NodeMCU ESP12.
Importante conocer a que pin de la NodeMCU corresponde el numero el numero asignado en el programa, aqui te muestro la relación que existe:
El pin D0 corresponde con el número 16 .
El pin D1 corresponde con el número 5 .
El pin D2 corresponde con el número 4 .
El pin D3 corresponde con el número 0 .
El pin D4 corresponde con el número 2 .
El pin D5 corresponde con el número 14 .
El pin D6 corresponde con el número 12 .
El pin D7 corresponde con el número 13 .
El pin D8 corresponde con el número 15 .
El pin D9 corresponde con el número 3 .
El pin D10 corresponde con el número 1 .
- Pins GPIO. Los pins gpio (General Purpose Input/Output) son los destinados a entradas y salidas digitales.
- El pin A0 (ADC0) o TOUT, es el destinado a entradas analógicas. Este pin recibe una señal que dependiendo del receptor modula la tensión de entrada al pin A0, el rango de la tensión puede estar entre 0 y 5 Voltio (dependiendo del emisor). La tensión es recibida por la entrada y convertida en valores digitales que van del 0 al 1024.
Por ejemplo si conectamos un sensor de distancia por infrarrojos, este nos puede devolver un valor de 700 cuando detecta un obstáculo a 10 centímetros de distancia.
Mas tarde con lineas de código en el programa podemos indicar que muestre el valor de 10 centímetros de distancia cuando la señal recibida sea igual al valor 700.
La linea de código por la cual leeremos el valor de entrada en este pin es :
analogRead(A0)
- Los pines PWM se pueden utilizar para las salidas analógicas.
- Los pines SPI (Serial Peripheral Interface) se utilizan para las comunicaciones entre circuitos integrados siguiendo un protocolo de comunicación sincrono, como por ejemplo con pantallas OLED. Entre los pines SPI tenemos SPICLK, SPIQ (MISO), SPID (MOSI) y SPICS.
- Pines UART (Universal asynchronous Receiver / Transmitter) Los pines UART los utilizamos para la recepción (RX) y transmisión (TX) de datos de la nodemcu. Los datos enviados a través de los pines UART nos permiten configurar tanto la velocidad de transmisión de los datos como su formato.
Los pines UART en la nodemcu son TXD0 (GPIO1), RXD0 (GPIO3), TXD1 (GPIO2), TXD2 (GPIO15), RXD2 (GPIO13).
Hay que tener en cuenta que en la nodemcu no se pueden utilizar dos transmisiones de datos simultáneamente a pesar de que si dispone de dos puertos diferentes para esto.
- Pin Flash. El pin flash (GPIO0) es recomendable tenerlo en un estado «LOW», es decir puesto a tierra cada vez que quieras flashear tu nodemcu, al igual que el pin GPIO15. Por el contrario se deberá dar tensión de 3.3V (estado HIGH) al pin GPIO2, a través de una resistencia de 3.3k.
Cuando conectamos la nodemcu a través del cable usb y flasheamos la tarjeta, esta automáticamente pone los pines GPIO0, GPIO2 y GPIO15 en el estado descrito arriba sin necesidad de cablearla.
4 – Entorno de programación para NodeMCU con «Arduino ide».
Un entorno de programación para realizar nuestros proyectos con la nodemcu es el arduino ide, puedes descargarlo desde este enlace : arduino ide.
Una vez tienes instalado el entorno de programación debes configurarlo para poder empezar a trabajar con nodemcu, para configurarlo debes clickear en «Archivo», luego «preferencias»
En la casilla «Additional Boards Manager URLs» debes escribir la siguiente dirección : http://arduino.esp8266.com/stable/package_esp8266com_index.json
Después de clickear «Ok» deberás instalar el plugin de nodemcu.
El siguiente paso para instalar el plugin será acceder a «Herramientas», luego seleccionar «Placa:» y después clickear en «Boards Manager»
Una vez accedes a «Boards Manager» deberás buscar esp8266,
Y una vez instalado, ya podrás acceder a la configuración de la placa nodemcu para programar tu tarjeta.
5 – Entorno de programación para NodeMcu con «ESPlorer».
Hasta ahora he utilizado con muy buenos resultados el “ESPlorer”, la pagina oficial es http://esp8266.ru/ESPlorer/, desde donde te puedes descargar el programa y diferentes manuales.
Recuerda que debes tener instalado Java para que el entorno de programación pueda ejecutarse.
También tenemos esta otra pagina muy interesante para programar nuestro Nodemcu http://nodemcu.readthedocs.io/en/master/
Este es el aspecto que tiene nuestro entorno de programación para NodeMcu:
En esta ventana podemos ver marcados en rojo y numerados, los siguientes apartados:
- Con el número 1 tenemos indicado el puerto de comunicación que estamos utilizando para conectarnos a nuestro NodeMcu. Justo debajo del numero uno tenemos los botones: DTR (Terminal del dato listo, deberá estar seleccionado), RTS (Solicitud para enviar, y deberá estar seleccionado) y CTS (Limpiar para enviar, y este botón no es necesario que este seleccionado).
- con el número 2 establecemos comunicación clickeando en «open».
- En el número 3 indicamos la velocidad de transferencia de comunicación en baudios.
- En número 4 es la pestaña donde se encuentra el script que contiene las instrucciones de nuestro programa.
- En el número 5 vemos la ventana que utiliza ESPlorer para mostrar las instrucciones que hacen referencia al estado en el que se encuentra nuestra NodeMcu con nuestro entorno de programación ESPlorer.
- La ventana número 6 muestra las lineas de código del script que queremos transferir al NodeMcu.
- En el número 7 tenemos el boton «Save&Run» para transferir el programa al nodeMcu.
6 – Primer «Hola mundo» con el ide de Arduino.
En este ejemplo podemos ver la escritura de un «hola mundo» en el monitor del entorno de arduino y el encendido y apagado del led interno de la placa.
//hola mundo void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); } void loop() { Serial.println("hola mundo"); digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(1000); }
7 – Conectando wifi http con NodeMCU.
//esp8266wifi #include <ESP8266WiFi.h> const char* ssid = "nombre de la red wifi"; const char* password = "contraseña de la red wifi"; const char* host = "www.freepik.com";// este host es un ejemplo http const int httpPort = 80; void setup() { WiFi.mode(WIFI_STA);//modo cliente WiFi.begin(ssid, password); Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("IP:"); Serial.println(WiFi.localIP()); WiFiClient client; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // This will send the request to the server client.print(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n" ); while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } } void loop() { // el contenido del loop lo único que hace es encender el led dela placa nodemcu digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(1000); }
8 – Conectando wifi https con NodeMCU.
//wificlientsecure #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> const char* ssid = "nombre de la red wifi"; const char* password = "contraseña de la red wifi"; const char* host = "url del host, por ejemplo www.infootec.net"; //ejemplo de una pagina protocolo https const char* huella = "aqui escribimos la huella digital que nos proporciona la pagina"; const int httpsPort = 443; WiFiClientSecure client; void setup() { WiFi.mode(WIFI_STA);//modo cliente WiFi.begin(ssid, password); Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("IP:"); Serial.println(WiFi.localIP()); Serial.print("connecting to "); Serial.println(host); if (!client.connect(host, httpsPort)) { Serial.println("connection failed"); return; } if (client.verify(huella, host)) { Serial.println("certificate matches"); } else { Serial.println("certificate doesn't match"); } client.println("GET (aqui escribimos la url del archivo html que queremos) HTTP/1.1"); client.println("Host: (aqui escribimos url del host)"); client.println("Connection: close"); client.println(); Serial.println("request sent"); while (client.connected()) { String line = client.readStringUntil('\n'); Serial.println(line); if (line == "\r") { Serial.println("headers received"); String line = client.readStringUntil('\r');//hay un límite en la longitud de la página Serial.println(line); break; } } } void loop() { // el contenido del loop lo único que hace es encender el led dela placa nodemcu digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(1000); }
9 – NodeMCU como servidor.
//wifi.softAP #include <ESP8266WiFi.h> void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP ... "); boolean result = WiFi.softAP("hola", "12345678"); if(result == true) { Serial.println("Ready"); } else { Serial.println("Failed!"); } } void loop() { Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); delay(3000); }
Este ejemplo sencillo muestra por el monitor serie el número de dispositivos conectados a la nodemcu.
10 – NodeMCU utilizanda como servidor y cliente al mismo tiempo.
//Servidor y cliente #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> const char* ssid = "nombre de red wifi"; const char* password = "contraseña de la red wifi"; IPAddress ip(192,168,0,10); IPAddress subnet(255,255,255,0); ESP8266WebServer server(80); void handleRoot() { String page = "<!DOCTYPE html>\n"; page += "<html>\n<body>\n<h1>Hola</h1><br>Pagina alojada en NodeMCU\n</body>\n</html>"; server.send(200, "text/html", page); } void setup(){ WiFi.mode(WIFI_AP_STA); Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED){ delay(500); Serial.print("."); } if (WiFi.status()){ Serial.println(""); Serial.println("Red wifi conectada:"); Serial.println(ssid); } WiFi.softAPConfig(ip, ip, subnet); WiFi.softAP("hola", "12345678", 7); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.on("/test", [](){ server.send(200, "text/html", "<h3>Subdirectorio alojado en NodeMCU</h3>"); }); server.begin(); Serial.println("HTTP servidor arrancado..."); } void loop(){ server.handleClient(); digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(1000); }
Deja una respuesta Cancelar la respuesta