Arduino Wifi Modulo
Arduino Wifi Modulo
LUIS LLAMAS
INICIO
Ingenieria
INGENIERIA
Informática
INFORMÁTICA
Zona Geek
ZONA GEEK
Programacion
PROGRAMACION
Diseño/3d
DISEÑO/3D
Acerca de mi
ACERCA DE MI
Contacto
CONTACTO
ESP8266 ESP01
27 MAYO, 2017
ENCUENTRA LO QUE TE INTERESA
NUESTRAS
SECCIONES
INFORMÁTICA
INGENIERIA
¿QUÉ ES EL ESP8266?
El ESP8266 es un microprocesador de bajo coste con Wi integrado
fabricado por Espressif. Podemos usar el ESP8266 para conectar nuestros
proyectos de electrónica y robótica con Arduino.
El ESP01 monta la versión más sencilla del ESP8266. Aún así, sigue siendo un
procesador de 32bits a 80 Mhz, con 512kB o 1MB de memoria según modelo.
Dispone de 2 pines GPIO, SPI, I2C y UART.
ZONA GEEK
En cuanto a comunicación Wi , el ESP01 tiene comunicación integrada
802.11 b/g/n, incluidos modos Wi-Fi Direct (P2P) y soft-Ap. Incluye una pila de
TCP/IP completa, lo que libera de la mayor parte del trabajo de comunicación al
procesador.
ESQUEMA DE MONTAJE
La conexión de un módulo ESP01 con Arduino no es complicada, aunque en
la práctica van a aparecer ciertas di cultades que nalmente nos harán
plantearnos la idoneidad de emplearlo junto a Arduino, o bien optar por una
solución basada en ESP8266.
El resto de la conexión no tiene ninguna di cultad. Por un lado tenemos el INTERRUPCIONES EN TODOS LOS PINES DE
pin CH_PD que apaga o enciende el módulo conectándolo, respectivamente, ARDUINO CON LAS PCINT
22 AGOSTO, 2018
a Gnd o 3.3V. Por su parte, el pin RST reinicia el módulo si se conecta a Gnd.
En algunas versiones del módulo podremos dejarlo sin conexión pero, en
general, tendremos que conectarlo a 3.3V para que el módulo arranque.
Para la conexión con Arduino podemos emplear el puerto serie normal, pero
esto implica que tendremos que desconectar el ESP01 cuando queramos
programar Arduino, y no podremos usar el puerto serie para la comunicación
con el PC.
EJEMPLOS DE CÓDIGO
Convertido de web en PDF a https://www.htmlapdf.com con el api html a pdf
USO DEL ESP8266 CON COMANDOS AT
La comunicación con el ESP01 con el rmware por defecto se realiza a
través de comandos AT, que recordemos no son más que comandos de texto
enviados por Serial.
PRIMERA PRUEBA
Vamos a hacer la primera prueba de conexión con el ESP01. Para ello
conectamos el ESP01 a Arduino como hemos visto en el apartado anterior.
Dejamos conectado Arduino al ordenador por USB.
LISTADO COMANDOS AT
A continuación, un listado de algunos de los comandos AT disponibles para
el ESP8266.
EJEMPLOS AT
Aquí tenemos algunos ejemplos sencillos para realizar acciones básicas con
el ESP01 a través de comandos AT.
Por ejemplo, para con gurar el ESP01 desde un Arduino para actuar como servidor
pasaríamos los comandos AT de la siguiente forma.
1 #define ESP8266_USE_SOFTWARE_SERIAL
Otra mejoras sugeridas para el empleo del ESP8266 con Arduino son
incremenar el tamaño del bu er del hardware serial o software serial, para lo
cuál es necesario editar el chero
\arduino\hardware\arduino\avr\cores\arduino\HardwareSerial o
\arduino\hardware\arduino\avr\cores\arduino\SoftwareSerial y modi car la
siguiente línea.
1 // En HardwareSerial.h
2 #define SERIAL_BUFFER_SIZE 64
3
4 // En SoftwareSerial.h
5 #define _SS_MAX_RX_BUFF 64 // RX buffer size
1 #include "ESP8266.h"
2 #include <SoftwareSerial.h>
3
4 const char* SSID = "myssid";
5 const char* PASSWORD = "mypassword";
6 const char* HOST_NAME = "www.pasted.co";
7 const int HOST_PORT = 80;
8
9 SoftwareSerial softSerial(2, 3); // RX, TX
10 ESP8266 wifi(softSerial);
11
12 void setup(void)
13 {
14 Serial.begin(9600);
15
16 if (wifi.setOprToStationSoftAP()) {
17 Serial.print("to station + softap ok\r\n");
18 }
19 else {
20 Serial.print("to station + softap err\r\n");
21 }
22
23 if (wifi.joinAP(SSID, PASSWORD)) {
1 #include "ESP8266.h"
2 #include <SoftwareSerial.h>
3
4 const char* SSID = "myssid";
5 const char* PASSWORD = "mypassword";
6
7 SoftwareSerial softSerial(2, 3); // RX, TX
8 ESP8266 wifi(softSerial);
9
10 void setup(void)
11 {
12 Serial.begin(9600);
13 Serial.print("setup begin\r\n");
14
15 wifi.restart();
16 delay(500);
17
18 if (wifi.setOprToStationSoftAP()) {
19 Serial.print("to station + softap ok\r\n");
20 }
21 else {
22 Serial.print("to station + softap err\r\n");
23 }
24
25 if (wifi.joinAP(SSID, PASSWORD)) {
26 Serial.print("Join AP success\r\n");
27 Serial.print("IP: ");
28 Serial.println(wifi.getLocalIP().c_str());
29 }
30 else {
31 Serial.print("Join AP failure\r\n");
32 }
33
34 if (wifi.enableMUX()) {
35 Serial.print("multiple ok\r\n");
36 }
1 #include "ESP8266.h"
2 #include <SoftwareSerial.h>
3
4 const char* SSID = "myssid";
5 const char* PASSWORD = "mypassword";
6
7
8 SoftwareSerial softSerial(2, 3); // RX, TX
9 ESP8266 wifi(softSerial);
10
11 void setup(void)
12 {
13 pinMode(LED_BUILTIN, OUTPUT);
14
15 Serial.begin(9600);
16 Serial.print("setup begin\r\n");
17
18 wifi.restart();
19 delay(500);
20 if (wifi.setOprToStationSoftAP()) {
21 Serial.print("to station + softap ok\r\n");
22 }
23 else {
24 Serial.print("to station + softap err\r\n");
25 }
26
27 if (wifi.joinAP(SSID, PASSWORD)) {
28 Serial.print("Join AP success\r\n");
29 Serial.print("IP: ");
30 Serial.println(wifi.getLocalIP().c_str());
31 }
32 else {
33 Serial.print("Join AP failure\r\n");
34 }
35
36 if (wifi.enableMUX()) {
37 Serial.print("multiple ok\r\n");
38 }
39 else {
40 Serial.print("multiple err\r\n");
41 }
42
Convertido de web en PDF a https://www.htmlapdf.com con el api html a pdf
43 if (wifi.startTCPServer(80)) {
44 Serial.print("start tcp server ok\r\n");
45 }
46 else {
47 Serial.print("start tcp server err\r\n");
48 }
49
50 if (wifi.setTCPServerTimeout(20)) {
51 Serial.print("set tcp server timout 20 seconds\r\n");
52 }
53 else {
54 Serial.print("set tcp server timout err\r\n");
55 }
56
57 Serial.println("setup end\r\n");
58 }
59
60 #define wifiWrite(A) wifi.send(mux_id, (uint8_t*) A, sizeof(A) - 1);
61 void loop(void)
62 {
63 uint8_t buffer[128] = { 0 };
64 uint8_t mux_id;
65
66 uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 100);
67 if (len > 0) {
68 Serial.print("Received from: ");
69 Serial.print(mux_id);
70 Serial.print("\r\n");
71
72 wifiWrite("HTTP/1.1 200 OK\r\nnContent-Type: /html\r\nConnection:
close\r\n\r\n");
73 wifiWrite("<html>\n<head>\n<title>Luis Llamas</title>\n</head>\n<
body>");
74 wifiWrite("<h2>Salidas digitales</h2>");
75 wifiWrite("<button onClick=location.href='./?data=0'>ON</button>"
);
76 wifiWrite("<button onClick=location.href='./?data=1'>OFF</button>
");
77 wifiWrite("</body></html>");
78
79 Serial.println("Send finish");
80
81 for (uint32_t i = 0; i < len; i++) {
82 char c = (char)buffer[i];
83 if (c == '?')
84 {
85 if ((char)buffer[i + 6] == '1')
86 {
87 digitalWrite(LED_BUILTIN, HIGH);
88 Serial.println("LED ON");
89 }
90 else
Convertido de web en PDF a https://www.htmlapdf.com con el api html a pdf
91 {
92 digitalWrite(LED_BUILTIN, LOW);
93 Serial.println("LED OFF");
94 }
95
96 break;
97 }
98 }
99 }
100 }
Para ello, servimos una página web con dos botones, que permitirán
encender o apagar el LED integrado en Arduino. La extensión de la página que
podemos servir es bastante reducida pero, como ya hemos repetido varias
veces, si tenéis que servir páginas complejas seguramente deberíais pensar en
usar el ESP8266 de forma independiente, o en usar otra máquina.
En función de que el carácter tras ‘?data=’ sea igual a ‘0’ o ‘1’ se enciende o
apaga el LED integrado, y se muestra la acción por el puerto serie.
Anuncio:
PREVIOUS
Convertido de web en PDF a https://www.htmlapdf.com con el api html a pdf
IMPLEMENTAR UN ARRAY DE TAMAÑO DINÁMICO EN ARDUINO
INTERRUPCIONES EN TODOS
LOS PINES DE ARDUINO CON
LAS PCINT
LIBRERÍA DE ARDUINO
TRIANGLESOLVER
15 ¡DEJA UN COMENTARIO!...
9 6 1 12
newest oldest
Osqui
Hola!
Muchas gracias por estos artículos tan estupendos!
Una pregunta: ¿merece la pena pasarse al nuevo módulo ESP32 en vez de seguir
usando el ESP8266?
Gracias!
luisllamas
Osqui
victor mancilla
Luis
JoseM
Hola:
Muchas gracias por el tutorial, llevo sus buenas horas intentando conectar un
arduino uno con el módulo, hasta ahora solo obtengo “????????????????” como salida
en el monitor de serie. He intenté conectarlo con un convertidor USB-TTL y no
conseguí nada distinto, he probado todas las velocidades desde 4800 a 115200 e
intenté con otro módulo y nada ¿ tienes alguna idea de que estoy haciendo mal?,
agradecería cualquier idea.
Dr T
hola, muchas gracias por poner luz en la oscuridad…! igualmente tengo el mismo
problema que JoseM. Probé distintas combinaciones de velocidades entre el sketch
y el monitor serie, pero en ninguna obtengo el OK.
Alguna idea de que mirar?
Polko
Luis
Juancho
Convertido de web en PDF a https://www.htmlapdf.com con el api html a pdf
Hola!
Muy bueno el artículo!
Me sabrías decir hasta qué distancia puedo conectar dos módulos ESP8266 01 entre
sí?
Nacho
Hola Luis, excelente post, muy claro! Te hago una consulta, veo que para el servidor
usas una llamada recv. Entiendo que esto es bloqueante, por lo que el hilo del
programa quedará esperando allí hasta tener alguna comunicación entrante. Al no
contar con hilos de ejecución multiples (multi-threadings) en Arduino, ¿Sabes como
se manejan este tipo de cuestiones? Por ejemplo, si tuvieramos una aplicación que
esté sensando otro tipo de interfaces que le den ordenes al arduino (como
pulsadores), y también quisieramos recibir comandos por medio de wi . No se si
me explico. Muchas gracias, Saludos!
Luis Eli
Luis, he leido con atencion este y muchos articulos tuyos. Ando buscando utilizar un
arduino que use el esp01 como modulo wi para interactuar con la plataforma
thinger.io Si tienes algo te dejo mi correo !De nuevo gracias!
Nacho
Angela
Gracias,
Al descomentar la línea #de ne ESP8266_USE_SOFTWARE_SERIAL y cargar el código
nuevamente me sale el error:
Más información
Aviso legal