Continuación de la entrada anterior: #5 Curso IoT con Arduino y ESP8266 WiFi: Modulo WiFi ESP8266 (2)
5.8) Ejemplos de uso con Arduino
Llegados a este punto nos encontramos en la parte más importante del curso, en la cual comenzaremos a usar nuestro Arduino Pro Mini junto al ESP8266 para realizar distintos tipos de comunicación con internet.
Para que podamos aprender de forma adecuada a hacer uso de cada tipo de comunicación que permite el módulo: envió de datos, recepción de datos, envío y recepción (cliente, servidor, cliente-servidor), veremos una serie de ejemplos, organizados de más sencillos a más complejos. Una vez dominados ya seremos capaces de unir nuestro Arduino y ESP8266 junto a cualquier otro sensor o módulo que nos permitirá crear nuestros propios proyectos.
Antes de pasar a los ejemplos debemos de asegurarnos que el módulo WiFi está configurado a 9600 bps para que funcione con la librería SoftwareSerial, también tenemos que preparar la placa de prototipado añadiendo el Arduino Pro Mini y el cableado correspondiente.
5.8.1) Usar el Arduino como puente
El siguiente ejemplo no nos va a ser de mucha utilidad en nuestro caso pues disponemos de un adaptador USB y podemos conectar el módulo WiFi directamente, sin embargo si tuviéramos cualquier otro Arduino si nos seria de utilidad.
El código se comporta como un proxy, es decir, todo lo que escribamos en el IDE de Arduino lo recibirá el Arduino y lo reenviara automáticamente al ESP8266, del mismo modo todo lo que el módulo nos envié llegara al Arduino y de este pasara al IDE.
Para que funcione el código el único requisito es que estemos usando las velocidades de transmisión correctas, no tienen por qué ser iguales, pero sí que deben corresponderse con la otra parte a la que están conectadas, es decir, el IDE y su puerto Serial deberán tener la misma velocidad, y el otro puerto Serial y el ESP8266 tendrán que tener también la misma velocidad configurada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
HardwareSerial &pc = Serial; #include <SoftwareSerial.h> SoftwareSerial wifi(2, 3); // RX | TX void setup() { pc.begin(9600); wifi.begin(9600); } void loop() { if( wifi.available() ) pc.print( (char)wifi.read() ); if( pc.available() ) wifi.print( (char)pc.read() ); } |
Un detalle interesante de este código es la primera línea, en vez de usar directamente el objeto Serial hemos realizado una copia en una variable con un nombre más adecuado al dispositivo que tenemos conectado en ese puerto, así tendremos “pc” para el adaptador USB y “wifi” para el módulo ESP8266.
Hola Alberto. No veo si has subido algo sobre el NodeMCU, y por eso hago la consulta aquí.
Aunque he experimentado con el ESP8266-ESP07 y el ESP12, me gustaría hacerlo con el NodeMCU pero para programarlo con el IDE de Arduino (por la simplicidad de hacerlo frente a los comandos AT). Mi consulta es si, una vez programado, se podría conectar un Arduino al NodeMCU, vía Serie, I2C, SPI,… para usar el NodeMCU sólo como enlace WIFI y a Arduino para conectarle los relés, drivers, motores, o lo que sea, dejando solo para este fin.
Sería simplemente que NodeMCU hiciera de web server, pero Arduino el que se encargara de la parte de ejecución de acciones. ¿Se pueden conectar via Serie?
Gracias y saludos.
Hola Jesús,
Lo mas cercano a eso que preguntas ha sido usar un Wemos:
https://giltesa.com/2016/10/23/cliente-ntp-con-placa-wemos-d1-para-mostrar-la-hora-en-un-lcd
Ahí ya el ESP8266 lo programas con el IDE de Arduino y no necesitas comandos AT ni un microcontrolador de Arduino.
Perfectamente puedes hacer lo que dices, que el ESP8266 sea el microcontrolador maestro y se encargue de todo: comunicación y programa principal. Pero que use un Arduino para aprovecharse de sus pines y sus librerías, de este modo el Arduino. Tendrás que comunicar ambas placas con alguno protocolo de los que mencionas para que se comuniquen entre si y se pidan y den los datos.
Supongo que lo mas sencillo seria por serial, que el Arduino cada X tiempo envié los datos todos juntos separador por espacio, así después desde el ESP8266 puedes leerlos con parseInt, parseFloat, etc.
También podrías hacer que el Arduino solo los mande datos bajo petición del ESP8266… ahí ya como prefieras, incluso podrías conectar uno de los pines de interrupción del Arduino al ESP8266 para que le despierte justo antes de pedirle los datos…
Saludos.
Gracias Alberto por la rápida respuesta.
La vez que trabajé con el ESP-07 (me gusta por la posibilidad de conectarle antena externa) me fue perfecto, pero es realmente tedioso configurarlo con los comandos AT. En cambio, si lo programa con el IDE de Arduino, éste alojaría la página web, pero no gobernaría ningún elemento externo de potencia, dejándo esa tarea a Arduino.
Pensaba en el módulo NodeMCU, pero acabo de recordar que el ESP-07 también se puede programar con el IDE.
Probaré a ver cómo funciona.
Gracias nuevamente.