ESP8266 es un CHIP altamente integrado fabricado por la empresa china Espressif Systems, diseñado para las necesidades de un nuevo mundo conectado. Ofrece una solución de red Wi-Fi completa e independiente, lo que le permite alojar la aplicación o descargar todas las funciones de red Wi-Fi desde otro procesador de aplicaciones. ESP8266 tiene potentes capacidades de procesamiento y almacenamiento a bordo que le permiten integrarse con sensores y otros dispositivos específicos de la aplicación a través de sus GPIO con un desarrollo mínimo inicial y carga mínima durante el tiempo de ejecución.
Su alto grado de integración en chip permite un circuito externo mínimo, y toda la solución, incluido el módulo frontal, está diseñada para ocupar un área mínima de PCB.
Es un SoC (Sytem on a Chip), que tiene dentro un uC (Tensilica), modulo WiFi de 2.4 GHz (ESP-12 o ESP-12E), RAM (50 kB), una entrada analógico de 10 bits (ADC) y 17 pines GPIO de propósitos general.
Parámetro | Descripción |
---|---|
uC | Tensilica L106 80 MHz de 32 bits |
Modo Flash | 40 MHz |
Memoria Flash | 512 K |
Velocidad | 115200 |
Este modulo proporciona WiFi al Arduino. Tiene varios inconvenientes el principal es que trabaja con 3V3 lo que hace difícil la conexión. Antes había que usar comando AT para programarlo (Hayes), hoy gracias a la comunidad comparte el mismo IDE. Hoy se puede usar de manera autónoma, como si fuera un Arduino pero con algunas limitaciones. Lo primero es cargar un boceto, lo que reemplaza el firmware original que trabaja con comando AT.
Pin | Nombre | Descripción |
---|---|---|
1 | GND | Toma de tierra |
2 | GPIO2 | Tiene Pull-up |
3 | GPIO0 | Tiene Pull-up |
4 | Rx | (I2C) También GPIO3 |
5 | Tx | (I2C) También GPIO1 |
6 | CH_PD | LOW = apaga |
7 | Reset | LOW = resetea |
8 | Vcc | 3V3, 200 mA |
Ok entonces solo tenemos 4 pines digitales, no tenemos pines analógicos. Soporta comunicación I2C (Rx y Tx). No podrás alimentarlo desde Arduino porque 3V3 solo da 50 mA y EPS-01 requiere 200 mA. Una opción es usar un adaptador USB-Serie pero cuidado algunos dan apenas 120 mA. Existen dos modos de programarlo con un adaptador USB y con un Arduino UNO.
Arduino entiendo de manera automática que le queremos pasar un boceto, pero ESP-01 no, es manual. A través de GPIO0 (3) y GPIO2 (2) se puede poner en modo UART o Flash. El modo UART se usa para programación con GPIO0 = LOW, GPIO2 = HIGH mientras: encendemos (CH_PD = HIGH) o resetamos (Reset = LOW). El modo Flash se usa para ejecución GPIO0 = LOW, GPIO2 = HIGH, CH_PD = HIGH y Reset = HIGH. Podemos usar un Arduino como pasarela teniendo cuidado de poner divisores de tensión para adaptar los 5V de Arduino a 3V3 del ESP-01.
Pin ESP-01 | Nombre | pin Arduino |
---|---|---|
5 | Tx directo | Tx (pin D1) |
4 | Rx al medio de divisor | Rx (pin D0) al divisor |
2 | GPIO2 | Pulsador a GND |
7 | Reset | Pulsador a GND |
6 | CH_PD | 10K a GND |
3 | GPIO0 | Libre |
1 | GND | Toma de tierra |
8 | Vcc | 3V3, 200 mA |
Pin RESET de Arduino UNO a tierra, así se convierte en pasarela. Te recomiendo probar con el ejemplo ESP8266WebServer - HelloServer en ingresa los valores SSID y PASSWORD. Abre el monitor serie en 115200 y veras la IP asignada. No olvides regresar a modo FLASH.
Si usas un modulo USB fíjate que tenga los modos TTL (5V) y FTDI (3V3). Bien el lado USB va directo a la PC y el otro a los pines del ESP-01.
Fuente: Programacionfacil.com.
13 soles en Lima.
NodeMCU integra el ESP8266 con un modulo WiFi (ESP-12E). Este módulo tiene, además del microprocesador (Tensilica), una antena PCB, un LED conectado al GPIO2 y una memoria flash de 16 Mbit (= 4 MB). Es un proyecto de código abierto, el firmware y el diseño hardware esta disponible en GitHub
Cuando fue presentada, no existía la integración de ESP8266 con el entorno de IDE de Arduino. No usaba un lenguaje compilado sino uno interpretado llamado LUA. Como todas las placas que usan ESP8266, se les puede cargar cualquier firmware. Puede usarse desde el propio de NodeMCU con lenguaje LUA, a MicroPython. También se puede usar como una placa de Arduino, donde nosotros hacemos el firmware desde cero.
Pines digitales | 13 (D0~D12) |
Pines analógicos | 1 (A0) de 10 bits |
Serie | Rx (D9) y Tx (D10) |
Sd2 (D11) y SD3 (D12) | |
3V3 | 3V3 que a su vez es alimentación. |
5V | 5V proviene del USB |
GND | Tierra |
LED1 | D4 y pertenece al ESP-12E |
LED2 | D0 es de la propia placa, parpadea durante la carga de un programa |
RST | Reset, reinicia la placa pero no borra código. |
FLASH | Dejar estado de ejecución y pasar a estado de recibir código. |
El EPS12 se alimenta con 3V3, pero NodeMCU incluye un regulador de tensión, lo que nos permite alimentarlo por USB desde 5V. Tiene un consumo de 8 mA. Tenemos 11 pines de entrada/salida digital. Pero no te recomiendo usar los pines 6~11 porque están conectados a la memoria flash. Tiene dos botones: RST (reset) y FLASH, que permite activar el modo de carga de firmware. Si usamos el IDE Arduino no son necesarios. El puerto serie esta en pin 1 (Rx) y pin 3 (Tx), están protegidos con resistencias de 470 ohms. El ESP8266 también tiene un puerto análogo (A0).
NodeMCU | Nombre | Arduino |
---|---|---|
A0 | ADC | |
G | Tierra | |
VU | ||
S3 | Digital 10 | |
S2 | Digital 11 | |
S1 | ||
SC | ||
SO | ||
SK | ||
G | Tierra | |
3V | 3V3 | |
EN | ||
RST | ||
G | Tierra | |
VIN | Entrada (USB=5V) |
D0 | Digital 0 (LED) | 16 |
D1 | Digital 1 | 5 |
D2 | Digital 2 | 4 |
D3 | Digital 3 | 0 |
D4 | Digital 4 (LED ESP-12E) | 2 |
3V | 3V3 | |
G | Tierra | |
D5 | Digital 5 | 14 |
D6 | Digital 6 | 12 |
D7 | Digital 7 | 13 |
D8 | Digital 8 | 15 |
RX | Digital 9 | |
TX | Digital 10 | |
G | Tierra | |
3V | 3V3 |
Tener en cuenta que para referirse al pin digital 0 (D0) de EPS8266 hay que hacer referencia a 16 (GPIO-16) en Arduino.
pinMode(D2, OUTPUT); digitalWrite(D2,HIGH); //Esto es lo mismo en GPIO pinMode(4, OUTPUT); digitalWrite(4,HIGH);
Para hacer parpadear el LED interno del modulo EPS-12E (D4 = GPIO-2)
void setup() { pinMode(D2, OUTPUT); } void loop() { //El LED tiene una resistencia pull-up, por eso se enciende con LOW digitalWrite(D2, LOW); delay(1000); //Esperar un segundo //Apagar el LED digitalWrite(D2, HIGH); delay(1000); //Esperar un segundo }
Para hacer prender el LED interno con botón RESET
#define LED_BUILTIN 2 #define BUTTON_BUILTIN 0 void setup() { pinMode(2, OUTPUT); pinMode(0, INPUT); } void loop() { int estado = digitalRead(0); digitalWrite(2, estado); }
Quizás una de las cosas mas interesantes del NodeMCU es que puede conectarse al WiFi.
WiFi.mode(WIFI_STA); //Modo cliente WiFi WiFi.begin(ssid, password);
25 soles en Lima.
Una manera muy fácil de transferir datos desde NodeMCU a MySQL por ejemplo es usar un cliente web, que se conecta a una WiFi y puede lanzar una cadena de conexión del tipo http://192.168.1.100/abc.php?dato='12:28:36.123' que luego es procesado por una pagina justamente llamada abc.php que es ubicada en el servidor loca identificado con el IP 192.168.1.100 que tiene instalado XAMPP por ejemplo y captura el par nombre=valor enviado como parámetro.
#include <ESP8266WiFi.h> #include <NTPClient.h> //WiFi const char *ssid = "_SSID_"; const char *password = "_CLAVE_"; void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.print("IP: "); Serial.println(WiFi.localIP()); } void loop() { //Confirma WiFi if (WiFi.status() == WL_CONNECTED) { HTTPClient http; //Define donde conecta y lo que envia string x = "http://192.168.1.100/abc.php?dato="; string data = "13"; x += data; http.begin(x); int httpCode = http.GET(); //httpCode sera negativo si hay error if (httpCode > 0) { if (httpCode == HTTP_CODE_OK){ String res = http.getString(); Serial.println(res); } }else{ Serial.println("Fallo, error"); } http.end(); }else{ Serial.println("WiFi no conectado aun..."); } }
Es el sucesor del ESP8266, de bajo costo, bajo consumo de energía con WiFi, BLE y Ethernet integrados, dos núcleos, mas GPIS, mas pines de lecturas análogas a digitales (ADC), dos pines de salida digital a análoga (DAC). Ademas tiene la posibilidad de usar más sensores de lecturas analógicas sin la necesidad de usar multiplexores.
Parámetro | Descripción |
---|---|
uC | Tensilica Xtesa LX6 de doble núcleo de 160 o 240 MHz, 32 bits |
Modo Flash | 40 MHz |
Memoria Flash | 16 MB |
SRAM | 520 KB |
ROM | 448 KB |
WiFi | 802.11 b/g/n/e/i |
Bluetooth | v4.2 BLE |
ADC 12 bits | 18 |
DAC 8 bits | 2 |
SPI | 4 |
I2C | 2 |
I2S | 2 |
UART | 3 |
PWM | 16 |
Sensores de toque | 10 |
Sensor temperatura | 1 |
CAN bus | v2.0 |
IR | Rx/Tx |
55 soles en Lima.