El Internet de la cosas (IoT) a puesto de moda el conectar cualquier cosa a internet. Y nuestros proyectos con arduino no iban a ser menos.
En el mercado, hay multitud de shield que nos dan la posibilidad de añadir conexión wifi a nuestro arduino, pero estas placas tienen un precio demasiado alto, la mayoría de ellos ha un precio elevado. Estos precios de los sistemas wifi contrastan con el precio habitual que suelen tener los demás accesorios para arduino.
Modulo wifi ESP8266
Pero además de los shield tenemos otros método de poder añadir conectividad wifi a nuestro proyectos de arduino. Este es el modulo Wifi ESP8266 nos ofrece conexión wifi de una manera sencilla y barata.
Ademas de la conexión wifi, este modulo permite una configuración muy fácil mediante el uso de comandos AT, dispone a su vez de un pequeño servidor web, que nos facilitara la conexión a él mediante el uso de un simple navegador.
Conectar el modulo wifi ESP8266 con arduino
La conexión del modulo ESP8266 con arduino es muy simple, solo tendremos que conectar los pines RX y TX del modulo, a los pines RC y TX de muestro arduino, si lo preferimos, como es mi caso, los podemos conectar a cualquier otros pines y utilizar la librería de emulación de comunicaciones serie.
Luego tendremos que conectar el pin marcado como RST a la alimentación de 3.3v de muestro arduino. La alimentación del modulo la tendremos que realizar utilizando un fuente de 3.3 v externa.
La salida de voltaje del arduino solo ofrece una alimentación de 50 mAmp, el modulo wifi ESP8266, en el arranque consume un poco más. Para pruebas podemos conectarlo a la salida de 3.3 v del arduino, pero si tienes la posibilidad de contar con una fuente externa, es mejor que lo conectes a ella. Solo queda conectar el pin GND a la fuente externa o a uno de los pines GND del arduino.
Alimentación a través de Arduino del modulo ESP8266
Circuito con alimentación exterior del modulo wifi.
Alimentación del modulo ESP8266 mediante fuente externa
Configuración del modulo wifi ESP8266
La configuración de este modulo es muy parecida a la configuración de los módulos de bluetooth HC-06 o HC-05. Incluso podemos utilizar parte del código que se ha utilizado para conectarse con estos módulos para conectarse con el wifi ESP8266.
Código para leer los datos desde el puesto serie del módulo ESP8266 y escribirlos al puerto serie de la consola, y viceversa.
#include <SoftwareSerial.h>
// Creamos un puerto serie virtual para la conexión con el modulo Wifi
SoftwareSerial Wifi(3, 2); // Pin RX, Pin TX
void setup()
{
// Creamos la conexion serie para el control desde la consola
Serial.begin(9600);
// Creamos la conexión con el modulo Wifi
Wifi.begin(115200);
}
void loop()
{
// Si hay datos desde el modulo Wifi
if (Wifi.available())
{
// Leemos un caracter
char c = BT1.read() ;
// Y lo escribimos en el puerto de la consola
Serial.print(c);
}
// Si Hay datos disponibles desde la consola
if (Serial.available())
{
// Leemos un caracter
char c = Serial.read();
// Y lo escribimos en el modulo Wifi
Wifi.print(c);
}
}
Es simple código nos va ha permitir comprobar el estado de nuestro modulo ESP8266 y realizar las configuraciones básicas.
Comprobar el funcionamiento del modulo Wifi ESP8266
Al arrancar el modulo, este nos tiene que devolver un mensaje de «Ready»
[Vendedor:www.ai-thinker.com Version:0.9.2.4]
ready
Para verificar que tenemos conexión con el modulo, desde la ventana de consola, escribimos AT, si todo es correcto y tenemos conexión con el modulo. Este nos devolverá un «OK»
[Vendedor:www.ai-thinker.com Version:0.9.2.4]
ready AT OK
Este modulo permite 3 modos de funcionamiento:
- Modo 1: Modo estandar, en este modo de funcionamiento, el módulo se comporta como si fuera un router. Modo servidor.
- Modo 2: Modo dispositivo / AP, en cambio en este modo, es módulo se comporta como si fuera un dispositivo que se va ha conectar con un router. Modo cliente.
- Modo 3: Esta forma de funcionamiento, es la mezcla de los dos anteriores. Funciona lo mismo de cliente como de servidor.
Para ver en que modo esta funcionando nuestro ESP8266, le enviamos el siguiente comando AT.
AT+CWMODE?
+CWMODE:3
OK
En este caso, nos indica que esta funcionando en el modo 3. Si no sabemos muy bien como queremos que funcione nuestro modulo ESP8266, lo podemos dejar en este modo para asegurarnos su correcto funcionamiento.
Para cambiar el modo de funcionamiento, le tendremos que enviar el siguiente comando AT.
AT+CWMODE=3
no change
En este caso, como ya estaba en este modo de funcionamiento, no indica que no se ja producido ninguna cambio. Si el modo de funcionamiento no fuese el ya establecido, no devolvería un «OK».
Conexión con la red wifi con el ESP8266
Mediante otro comando AT, podemos obtener la lista de conexiones wifi al alcance del modulo.
AT+CWLAP
+CWLAP:(1, "MOVISTAR_ASWD", -34, "AA:BB:CC:DD:EE:FF",3)
+CWLAP:(2, "Mi_Conexion", -54, "AA:BB:CC:DD:EE:FF",5)
La información que nos aparece es, posición en la lista, el SSID de la conexión wifi, potencia de la señal, y la MAC del router.
Para conectar el modulo ESP8266, a nuestra red wifi, utilizaremos otro comando AT. En este caso, el comando AT+CWJAP=»SSID_nuestra_conexión», «contraseña»
AT+CWJAP="SSID_nuestra_conexión", "contraseña"
OK
Si la conexión se ha realizado con existo, nos devolverá como siempre un «OK».
Obtener información de nuestra conexión con ESP8266
Al establecer conexión, con nuestro router o el servidor de DHCP que tengamos instalado en nuestra, este le tiene que asignar una dirección IP a nuestro modulo. Para conocer la ip asignado a nuestro modulo wifi utilizaremos el siguiente comando AT.
AT*CIFSR
192.168.1.1
192.168.1.201
OK
Este comando AT nos devolverá, en una primera linea, la dirección ip del router, y en una segunda, la dirección ip que se le ha asignado al modulo.
Activar servidor TCP en el modulo wifi ESP8266
Con esto, ya podríamos conectarnos al ESP8266, pero para poder interactuar con el debemos activar el servidor disponible en modulo. Para activar este servidor volvemos a tirar de comando AT.
AT+CIPSERVER=1, 80
OK
Esto activara el servidor TCP en el puerto 80.
Para desactivar el servidor solo tendremos que repetir el mismo comando cambiado el 1 por un 0.
AT+CIPSERVER=0, 512
OK
Una vez que tengamos el servidor TCP activado en el modulo, podremos interactuar con el estableciendo una conexión en la dirección ip asignada y mediante el puerto activado.
Tabla con los comandos AT disponibles en el modulo wifi ESP8266
Comandos |
Descripción |
Tipo |
Configuración / Ejecución |
Estado |
Prueba |
Parámetros y ejemplos |
AT |
general test |
basic |
– |
– |
– |
– |
AT+RST |
restart the module |
basic |
– |
– |
– |
– |
AT+GMR |
check firmware version |
basic |
– |
– |
– |
– |
AT+CWMODE |
wifi mode |
wifi |
AT+CWMODE=<mode> |
AT+CWMODE? |
AT+CWMODE=? |
1= Sta, 2= AP, 3=both, Sta is the default mode of router, AP is a normal mode for devices |
AT+CWJAP |
join the AP |
wifi |
AT+ CWJAP =<ssid>,< pwd > |
AT+ CWJAP? |
– |
ssid = ssid, pwd = wifi password |
AT+CWLAP |
list the AP |
wifi |
AT+CWLAP |
|
|
|
AT+CWQAP |
quit the AP |
wifi |
AT+CWQAP |
– |
AT+CWQAP=? |
|
AT+ CWSAP |
set the parameters of AP |
wifi |
AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn> |
AT+ CWSAP? |
|
ssid, pwd, chl = channel, ecn = encryption; eg. Connect to your router: AT+CWJAP=»www.electrodragon.com»,»helloworld»; and check if connected: AT+CWJAP? |
AT+CWLIF |
check join devices’ IP |
wifi |
AT+CWLIF |
– |
– |
|
AT+ CIPSTATUS |
get the connection status |
TCP/IP |
AT+ CIPSTATUS |
|
|
<id>,<type>,<addr>,<port>,<tetype>= client or server mode |
AT+CIPSTART |
set up TCP or UDP connection |
TCP/IP |
1)single connection (+CIPMUX=0) AT+CIPSTART= <type>,<addr>,<port>; 2) multiple connection (+CIPMUX=1) AT+CIPSTART= <id><type>,<addr>, <port> |
– |
AT+CIPSTART=? |
id = 0-4, type = TCP/UDP, addr = IP address, port= port; eg. Connect to another TCP server, set multiple connection first: AT+CIPMUX=1; connect: AT+CIPSTART=4,»TCP»,»X1.X2.X3.X4″,9999 |
AT+CIPMODE |
set data transmission mode |
TCP/IP |
AT+CIPMODE=<mode> |
AT+CIPSEND? |
|
0 not data mode, 1 data mode; return «Link is builded» |
AT+CIPSEND |
send data |
TCP/IP |
1)single connection(+CIPMUX=0) AT+CIPSEND=<length>; 2) multiple connection (+CIPMUX=1) AT+CIPSEND= <id>,<length> |
|
AT+CIPSEND=? |
eg. send data: AT+CIPSEND=4,15 and then enter the data. |
AT+CIPCLOSE |
close TCP or UDP connection |
TCP/IP |
AT+CIPCLOSE=<id> or AT+CIPCLOSE |
|
AT+CIPCLOSE=? |
|
AT+CIFSR |
Get IP address |
TCP/IP |
AT+CIFSR |
|
AT+ CIFSR=? |
|
AT+ CIPMUX |
set mutiple connection |
TCP/IP |
AT+ CIPMUX=<mode> |
AT+ CIPMUX? |
|
0 for single connection 1 for multiple connection |
AT+ CIPSERVER |
set as server |
TCP/IP |
AT+ CIPSERVER= <mode>[,<port> ] |
|
|
mode 0 to close server mode, mode 1 to open; port = port; eg. turn on as a TCP server: AT+CIPSERVER=1,8888, check the self server IP address: AT+CIFSR=? |
AT+ CIPSTO |
Set the server timeout |
AT+CIPSTO=<time> |
AT+CIPSTO? |
|
<time>0~28800 in second |
|
+IPD |
received data |
|
|
|
|
For Single Connection mode(CIPMUX=0): + IPD, <len>:
For Multi Connection mode(CIPMUX=1): + IPD, <id>, <len>: <data> |
Más información sobre el modulo wifi ESP8266: https://www.itead.cc/wiki/ESP8266_Serial_WIFI_Module
Con esto ya tendríamos nuestro arduino conectado a nuestra red wifi, accesible desde cualquier lugar.
Si tienes cualquier sugerencia o duda no tengas ningún reparo en dejarnos tu comentario.