Saludos a todos los del foro, en esta ocasión me ocupa el intentar seguir enriqueciendo el aporte original del Tema iniciado por mí. Para tal fin vamos a seguir trabajando con el Modulo Esp8266 y el protocolo de comunicación TCP/IP UDP pero con la variante de programar el Modulo ESP8266 desde el IDE Arduino; anexándole a este ambiente de desarrollo, el “CORE” del ESP8266 con el Gestor de tarjetas que viene anexado en el propio IDE Arduino, para lo cual necesitaremos lo siguiente:
-----Hardware----
Módulo ESP8266
Modulo UBS-RS232 TTL (CP2102 o similar)
78L03 (regulador 3.3 volts)
Electrolítico de 220 uF/16 volts
Resistencia de 330 ohms
Dos Resistencias de 10 kohms
Micro Boton (servirá como “reset”)
Jumper (servirá para configurar el modulo en modo programación)
Cables Varios
-----Software----
IDE desarrollo Arduino (la última versión)
Arduino Core para ESP8266 (seguir instrucciones mas adelante)
UDPDEMO (se encuentra anexado en el primer post de este Tema)
Preparando el Hardware
Armar el montaje de la siguiente figura para poder dejar preparado todo el hardware necesario y poder pasar a revisar lo que concierne al software
Preparando el software
Descargar La última versión del IDE Arduino de su sitio oficial e instalarla con los parámetros por omisión que trae la propia instalación del producto.
Una vez Instalada procedemos a abrir la El IDE de Arduino y ya estando en ella, accesamos al menú de Archivo y luego a preferencias; configuramos el parámetro mostrado en la siguiente figura en el círculo rojo con el siguiente parámetro y damos Aceptar:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ahora nos toca ir a descargar el Core para ESP8266, para tal efecto en el menú del IDE Arduino vamos a Herramientas>Placa>gestor de Placas, como se muestra en la siguiente figura:
Ya estando en esta opción, nos compete descargar el CORE para ESP8266, tecleando en la barra de “búsqueda” esp8266, con lo que nos mostrara lo que nos interesa y procedemos a instalarla (ver la siguiente Figura); como es un servicio WEB, no omito comentar que este paso requiere estar conectado a internet y que el proceso puede tardar tanto como ancho de banda esté disponible.
Una vez instalado el CORE ESP8266, notaremos que ya se han añadido una buena cantidad de placas ESP8266 como lo muestra la siguiente Figura:
Con todo este proceso damos por terminada la preparación de todo lo necesario para poder compilar el primer programa y cargarlo a nuestro módulo ESP8266 lo cual nos ocupara en el siguiente paso que consiste en conectar nuestro circuito a la computadora en un puerto USB y esperamos a que se carguen los drivers y verificamos que puerto Serial dejo anexado el sistema por medio del “Administrador de dispositivos” tal como lo muestra la siguiente Figura:
Una vez que verificamos que todo está debidamente reconocido, regresamos al IDE Arduino cargamos el programa "BLINK para esp8266" y una vez en pantalla:
Procedemos a colocar el Jumper en nuestro circuito y presionamos el botón de reset para que así el módulo ESP8266 entre en modo de Programación y esté listo para recibir el programa BLINK una vez compilado por el IDE Arduino; para tal efecto simplemente Oprimimos “como es habitual en Arduino” el Boton de subir con lo que se compilara el programa, a su vez lo cargara en el módulo ESP8266 y por último se ejecutara el programa:
Si todo ha salido bien; veremos Titilar el pequeño led que viene implementado en el módulo.
Y con esto tenemos Instalado y probado todo lo necesario para poder programar desde el IDE Arduino nuestro Modulo ESP8266 sin depender de un microcontrolador ya que todo corre en el propio microcontrolador embebido, así que lo que resta es estudiar y comprender todas las características que nos ofrece el modulo desde este ambiente.
En mi caso sigo enfrascado en aprovechar el modulo en su modalidad de comunicación TCP/IP UDP ya que debido a las características de su procesador no considero apto delegarle tareas como WEB server o cosas demasiado sofisticadas tal como lo he planteado en el aporte con el que inicie el Tema de este aporte… Y regresando al tema que nos ocupa, me resta dejar el listado del siguiente programa para cargar en el módulo ESP8266 que no hace otra cosa que Fungir como un Servidor del protocolo UDP (puerto 7777) en la dirección IP obtenida por medio del servicio DHCP del router al que se conecte, como siempre he intentado comentar la mayoría de las líneas para su mejor comprensión.
Código:
// Demostracion del Modulo ESP8266 para Escuchar/enviar mensages por un puerto UDP
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
WiFiUDP port;
char packetBuffer[255]; //variable que contendra los mensages recibidos desde la red
unsigned int localPort = 7777; //Puerto UDP para recibir/mandar mensages
String comando; //Variable donde sera almacenado el comando recibido en el mensage
void setup() {
pinMode(LED_BUILTIN, OUTPUT); //en algunos ESP8266 el led integrado en el Modulo es usado para otro proposito (TX/RX) y simplemente no se aprecia la operacion del mismo cuando esta conectado a un router
Serial.begin(115200); //Inicializamos el puerto serie del modulo ESP8266
WiFi.begin("PELICULAS", "B215809010"); //nos conectamos al router con el SSID y password correspondientes
port.begin(localPort); //inicamos la escucha del puerto udp
Serial.println("");
int intentos=0;
while (WiFi.status() != WL_CONNECTED) { //Mientras no se logre la conexion seguiremos intentando
delay(500);
Serial.print(".");
intentos++;
if (intentos > 30){
break;
}
}
Serial.println("");
Serial.print("Escuchando puerto UDP en IP:"); //Mostarmos la IP asignada por el router al ESP8266
Serial.println(WiFi.localIP());
}
void loop() {
int packetSize = port.parsePacket(); //variable local que es utilizada para saber el tamaño del mensage UDP
//Serial.println(packetSize); //esta linea sirve como depuracion
if (packetSize) {// si existe un paquete de datos UDP pendiente iniciamos proceso General
int len = port.read(packetBuffer, 255);
if (len > 0) packetBuffer[len-1] = 0;
//Serial.println(packetBuffer); //esta linea sirve como depuracion
// una ves recibido el buffer mandamos un mensage de agradecimiento al remitente y el comando recibido
port.beginPacket(port.remoteIP(),localPort);
port.write("mensage:");
port.write(packetBuffer);
port.endPacket();
comando=""; // limpiamos el contenido del string.
for (int i=0;i<=packetSize;i++)// concatenamos el contenido del buffer en el string comando para su posterior procesamiento
{
//Serial.println(packetBuffer[i],DEC);// este comando solo sirve para depuracion para ver el contenido del buufer en decimal
comando.concat(packetBuffer[i]);
} // fin del for
Serial.println(comando); //mostramos el "comando" recibido
// procesamos el comando recibido por medio de IF´s o como mejor paresca al programador
if (comando=="comando1\n") {
Serial.println("se Ejecuto correctamente el primer comando");
for (int i=0;i<=10;i++){
digitalWrite(LED_BUILTIN, HIGH); //en algunos ESP8266 el led integrado en el Modulo es usado para otro proposito (TX/RX) y simplemente no se aprecia la operacion del mismo cuando esta conectado a un router
delay(10);
digitalWrite(LED_BUILTIN, LOW);
delay(10);
}
}
if (comando=="comando2\n") {
Serial.println("Se Ejecuto correctamente el segundo comando");
for (int i=0;i<=5;i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(10);
digitalWrite(LED_BUILTIN, LOW);
delay(10);
}
}
// fin del proceso de los comandos recibidos
}//final del if principal
// delay(500);
} //final de loop
Como se podrá apreciar, de manera global, el programa hace las siguientes tareas:
• Inicializar el modulo
• Conectarse a un router con un SSID y su respectiva clave de seguridad
• Especificar que estará en escucha del protocolo UDP en la IP asignada
• En caso de llegar un mensaje UDP almacenarlo en un buffer
• Avisar al remitente que se recibió el mensaje y regresarlo como agradecimiento.
• Procesar el buffer recibido con la finalidad de obtener un posible comando
• Ejecutar el comando en caso de haberlo encontrado
• Volver a la escucha del puerto UDP
Para probar el correcto funcionamiento del programa utilice como herramienta el programa UDPDEMO que deje también anexado en el primer Tema de este aporte y en la siguiente figura se puede apreciar que se cumple con el propósito principal de todo este largo escrito.
En el caso de la Figura anterior el Modulo ESP8266 utilizado recibió la IP 192.168.0.11 como se muestra en el “Monitor Serie” del IDE Arduino, misma que en mi programa UDPDEMO fue utilizada como dirección de destino y al escribir el “comando2” este se ejecutó como es debido.
Así que sin más explicación de mi parte, no me queda más que dejarles un cordial saludo esperando no haber causado demasiadas dudas en cuyo caso intentare despejar en la medida de mis posibilidades.
¡Hasta Pronto!