Introduccion
Apenas hace unos días, vagando por la internet, encontré el modulo ESP8266 el cual tiene como principal característica el brindar toda una interface ethernet WIFI (TCP/IP ) que puede ser configurada desde su puerto TTL serie (rs-232) por medio de comandos de atención (AT) de una manera increíblemente sencilla. Pero ademas me sorprendió el precio, que ronda los 120 pesos mexicanos (mas o menos 8 dolares americanos) se consigue muy fácilmente y en abundancia; con todo esto compre varias y aquí estoy para aportar una sencilla aplicación del dichoso modulo.
Objetivo
El siguiente aporte tiene como finalidad demostrar la factibilidad de utilizar el modulo WIFI ESP8266 desde una red TCP/IP por medio del protocolo UDP. El modulo ESP8266 sera comandado por un microcontrolador 16f628 de 8 bits, que a su ves hará la función de actuar sobre 6 leds (Relevadores) y enviar el estado de 8 entradas digitales de regreso al origen por el mismo protocolo UDP.
Hardware
En la siguiente figura se anexa el diagrama general; para montar el circuito, yo utilice una plaqueta perforada universal, cabe destacar que el único cuidado relevante es que el modulo ESP8266 funciona con 3.3 volts lo cual se soluciona con un simple regulador clásico LM7833 y aunque por muchos sitios recomiendan que en el caso de que nuestro microcontrolador se alimente con un voltaje de 5 volts se deberán adecuar las señales TX y RX del puerto serie por medio de circuitos especiales para no dañar el modulo ESP8266. Con el simple hecho de interfacear estas señales con una resistencia de 100 ohms entre microcontrolador y modulo es suficiente (tal como lo muestro en el diagrama). Esto lo digo con certidumbre en base a que vengo realizando ya muchas pruebas con diferentes microcontroladores con esta forma y a lo obtenido del datasheet del propio modulo que dice al calce:
All digital IO pins are protected from over-voltage with a snap-back circuit connected between the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V. This provides protection from over-voltages and ESD. The output devices are also protected from reversed voltages with diodes
Por otro lado en la foto de mi montaje se aprecian unos relevadores que no vienen ilustrados en el diagrama anterior, sin embargo cabe mencionar que estos relevadores están manejados por un ULN2003 y considero no requiere mas explicación ya que no es el contexto del objetivo del presente aporte, por ultimo podran apreciar dos reguladores de 5 volts y 3 volts; derivado de que yo alimento mi tarjeta con 12 volts (para poder accionar mis relevadores) Razón por lo que fue necesario anexar también mi regulador de 5 volts para alimentar el 16f628.
Aquí dejo foto de la tarjeta terminada.
Como nota final, debo asegurar que el diagrama como tal se muestra, funciona al 100%.
Software en el microcontrolador
Vamos a continuar explicando de manera general que el modulo ESP8266 una ves energizado tiene a disponibilidad por medio de su interface serie, todo un conjunto de comandos de configuración e información que se accesan por medio de comandos AT y que nos regresa un OK si se completo con éxito el comando o si se presento un ERROR en la ejecución de estos comandos AT.
El puerto serie del modulo ESP8266 por default viene configurado a 9600 baudios; al menos todos los que he comprado en México. Sin embargo debo advertir que se dice por el internet que algunos vienen pre-configurados a 115200 baudios, con lo cual deben confirmar este dato y tomar las acciones correspondientes ya sea para modificar el programa que a continuación compartiré o en su defecto configurar su modulo a 9600 baudios tal como yo tengo los míos; para este efecto existe el comando AT+CIOBAUD:9600 para re-configurar el modulo.
Yo recomiendo muy encarecidamente antes de afrontar este proyecto, que se practique con el modulo ESP8266 por medio de un convertidor USB-SERIE TTL y algún programa de “Terminal serial” para poderse familiar con los comandos AT. Hay muchos sitios por internet en el que se toca este tema en particular.
Otro punto que debo establecer aquí, es el hecho que aunque por la mayoría de los sitios de internet se menciona el aprovechamiento del modulo ESP8266 como WEB server; no es mi caso, ya que mi enfoque es en aprovechar las virtudes de poder transportar por medio del protocolo UDP la información entre un equipo cualquiera de una red y un microcontrolador conectado a esta misma red y poder tomar acciones en base a este intercambio de información.
Con respecto al protocolo UDP aprovechare la liga con la información de la WIKIPEDIA, por lo que no tiene caso dar una explicación mas alla que es un transportador de información muy elemental pero muy aprovechable para lo que ocupa cualquier aficionado a la electrónica, domotica, robotica, etc. Y que el modulo ESP8266 nos acerca mucho a aventurarnos al “Internet de las cosas” que tanto viene aflorando últimamente.
Ya para entrar en materia con respecto al programa utilizado en el microcontrolador 16f628; dejo sin mas el listado de este, el cual fue escrito en lenguaje “BASIC” del IDE Proton de mecanique, compilado en la version 3.5.2.7.
Listado de programa aquí
Considero que el programa como tal, viene debidamente comentado por lo que considero no requiere una explicación mas allá de decir que la comunicación entre el microcontrolador 16f628 y el modulo ESP8266 es por medio del puerto serial a 9600 baudios, el Puerto B del 16f628 se utiliza como salidas (para manejar los leds), el Puerto A del mismo se utiliza como entradas (donde esta conectado el microswitch de 8 ) y que por medio de comandos AT se configura el modulo ESP8266 de tal suerte que al anexarse a la red inalambrica WiFi y obtener su IP, se deja abierta la comunicación UDP por el puerto 7777 y finalmente se deja abierto el transporte del puerto UDP hacia el pin RX del ESP8266 y desde el pin TX del ESP8266 hacia el puerto UDP.
¡Hemos creado un Tunel UDP<>RS232 entre la red Wi-Fi y nuestro microcontrolador 16f628!
Por ultimo simplemente se pone el microntrolador a la “escucha” de comandos para prender o apagar LEDS (relevadores en mi tarjeta) y enviar el estado de los pines del puerto A al destinatario en la red.
Software en la Computadora
Ahora me ocupa explicar como accesar o comandar desde un equipo conectado a la misma red a la que anexamos nuestra tarjeta por medio del protocolo UDP desde TCP/IP, para este fin existe una infinidad de software utilitario para poder enviar y recibir paquetes UDP tanto en Windows, Linux, Android, Machintosh, Ipad y otros sistemas operativos que seria larga la lista de ellos, solo basta dar una buscada por la red y encontraremos varias alternativas.
Recomiendo que se practique enviar y recibir mensajes entre dos computadoras o entre computadora y un teléfono, tableta, etc, para poder familiarizarse con el tema UDP. En el caso de Windows recomiendo el “Hercules Setup Utility” ya que es un software bastante completo y gratis, para android hay uno que se llama “UDP Tester” con el que ya se puede manipular la tarjeta que ocupa este aporte.
Sin embargo yo escribí un programa lo en Visual Basic .net con la finalidad de también aportar la facilidad a quien se aventure a montar la tarjeta, probar y en verdad cerrar el circulo del conocimiento que deseo verter aquí; dejo a continuación el listado de este programa que se puede compilar en Visual basic 2010.
Obviamente se pueden usar otros lenguajes como Phyton, Java, Processing, C, C++, etc, etc.
Por ultimo dejo el Video de la tarjeta funcionando con el programa que escribi en Visual Basic .net que espero sea lo suficientemente explicativo por si mismo, ya que de presentador soy pesimo, asi que disculpen la austeridad del mismo.
https://plus.google.com/u/0/105335396337664792597/posts/YvcwJseYZPd?pid=6110075813635573442&oid=105335396337664792597
Gracias, espero sea de su agrado y Saludos.
Apenas hace unos días, vagando por la internet, encontré el modulo ESP8266 el cual tiene como principal característica el brindar toda una interface ethernet WIFI (TCP/IP ) que puede ser configurada desde su puerto TTL serie (rs-232) por medio de comandos de atención (AT) de una manera increíblemente sencilla. Pero ademas me sorprendió el precio, que ronda los 120 pesos mexicanos (mas o menos 8 dolares americanos) se consigue muy fácilmente y en abundancia; con todo esto compre varias y aquí estoy para aportar una sencilla aplicación del dichoso modulo.
Objetivo
El siguiente aporte tiene como finalidad demostrar la factibilidad de utilizar el modulo WIFI ESP8266 desde una red TCP/IP por medio del protocolo UDP. El modulo ESP8266 sera comandado por un microcontrolador 16f628 de 8 bits, que a su ves hará la función de actuar sobre 6 leds (Relevadores) y enviar el estado de 8 entradas digitales de regreso al origen por el mismo protocolo UDP.
Hardware
En la siguiente figura se anexa el diagrama general; para montar el circuito, yo utilice una plaqueta perforada universal, cabe destacar que el único cuidado relevante es que el modulo ESP8266 funciona con 3.3 volts lo cual se soluciona con un simple regulador clásico LM7833 y aunque por muchos sitios recomiendan que en el caso de que nuestro microcontrolador se alimente con un voltaje de 5 volts se deberán adecuar las señales TX y RX del puerto serie por medio de circuitos especiales para no dañar el modulo ESP8266. Con el simple hecho de interfacear estas señales con una resistencia de 100 ohms entre microcontrolador y modulo es suficiente (tal como lo muestro en el diagrama). Esto lo digo con certidumbre en base a que vengo realizando ya muchas pruebas con diferentes microcontroladores con esta forma y a lo obtenido del datasheet del propio modulo que dice al calce:
All digital IO pins are protected from over-voltage with a snap-back circuit connected between the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V. This provides protection from over-voltages and ESD. The output devices are also protected from reversed voltages with diodes
Por otro lado en la foto de mi montaje se aprecian unos relevadores que no vienen ilustrados en el diagrama anterior, sin embargo cabe mencionar que estos relevadores están manejados por un ULN2003 y considero no requiere mas explicación ya que no es el contexto del objetivo del presente aporte, por ultimo podran apreciar dos reguladores de 5 volts y 3 volts; derivado de que yo alimento mi tarjeta con 12 volts (para poder accionar mis relevadores) Razón por lo que fue necesario anexar también mi regulador de 5 volts para alimentar el 16f628.
Aquí dejo foto de la tarjeta terminada.
Como nota final, debo asegurar que el diagrama como tal se muestra, funciona al 100%.
Software en el microcontrolador
Vamos a continuar explicando de manera general que el modulo ESP8266 una ves energizado tiene a disponibilidad por medio de su interface serie, todo un conjunto de comandos de configuración e información que se accesan por medio de comandos AT y que nos regresa un OK si se completo con éxito el comando o si se presento un ERROR en la ejecución de estos comandos AT.
El puerto serie del modulo ESP8266 por default viene configurado a 9600 baudios; al menos todos los que he comprado en México. Sin embargo debo advertir que se dice por el internet que algunos vienen pre-configurados a 115200 baudios, con lo cual deben confirmar este dato y tomar las acciones correspondientes ya sea para modificar el programa que a continuación compartiré o en su defecto configurar su modulo a 9600 baudios tal como yo tengo los míos; para este efecto existe el comando AT+CIOBAUD:9600 para re-configurar el modulo.
Yo recomiendo muy encarecidamente antes de afrontar este proyecto, que se practique con el modulo ESP8266 por medio de un convertidor USB-SERIE TTL y algún programa de “Terminal serial” para poderse familiar con los comandos AT. Hay muchos sitios por internet en el que se toca este tema en particular.
Otro punto que debo establecer aquí, es el hecho que aunque por la mayoría de los sitios de internet se menciona el aprovechamiento del modulo ESP8266 como WEB server; no es mi caso, ya que mi enfoque es en aprovechar las virtudes de poder transportar por medio del protocolo UDP la información entre un equipo cualquiera de una red y un microcontrolador conectado a esta misma red y poder tomar acciones en base a este intercambio de información.
Con respecto al protocolo UDP aprovechare la liga con la información de la WIKIPEDIA, por lo que no tiene caso dar una explicación mas alla que es un transportador de información muy elemental pero muy aprovechable para lo que ocupa cualquier aficionado a la electrónica, domotica, robotica, etc. Y que el modulo ESP8266 nos acerca mucho a aventurarnos al “Internet de las cosas” que tanto viene aflorando últimamente.
Ya para entrar en materia con respecto al programa utilizado en el microcontrolador 16f628; dejo sin mas el listado de este, el cual fue escrito en lenguaje “BASIC” del IDE Proton de mecanique, compilado en la version 3.5.2.7.
Listado de programa aquí
PHP:
'****************************************************************
'* Name : UDP_DEMO.BAS *
'* Author : Miguel Angel Borbolla Bonomi *
'* Notice : Demostarcion del modulo ESP8266 *
'* : Utilizando protocolo UDP bajo TCP/ip *
'* Date : 28/01/2015 *
'* Version : 1.0 *
'* Notes : La forma mas "Burda" de utilzar el modulo ESP8266 *
'* : en una LAN WI-FI *
'****************************************************************
Device = 16F628 ' Avisamos al compilador que microcontrolador utilizaremos
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, CP_OFF, MCLRE_OFF, DATA_CP_OFF ' configuramos fusibles microcontrolador
Xtal = 4' seteamos el reloj interno a 4 MHZ
Declare Hserial_Baud = 9600 ' Seleccionamos velocidad en baudios (aqui podria ser otra configuracion ya que hay modulos a 115200 bps)
Declare Hserial_RCSTA = %10010000 ' Habilitamos la recepcion Continua en el puerto serie
Declare Hserial_TXSTA = $24 ' Habilitamos el modo de transmicion Asincrona del puerto serie
Declare Hserial_Clear = On ' Limpiamos el buffer antes de recibir datos
All_Digital = On 'Configuramos que todas las salidas sean Digitales
TRISA = %11111111 ' Configuramos el puerto A como entradas
TRISB = %00000010 ' Configuramos el puerto B Como salidas con excepcion del Bit 1 pues sera utilizado como TX del puerto serie
Symbol LED1 PORTB.0 'Creamos alias del puertoB con su respectivo nombre por comodidad al programar
Symbol LED2 PORTB.3
Symbol LED3 PORTB.4
Symbol LED4 PORTB.5
Symbol LED5 PORTB.6
Symbol LED6 PORTB.7
Dim DATOEN As Byte 'Declaramos la Variable DATOEN que sera donde se almacenaran los datos provenientes del puerto serie.
PORTB=0 ' Llevamos a ceros el puerto B "Apagamos todos los leds"
DelayMS 2000 'Hacemos una pausa para que el modulo ESP8266 ser inicialize
'============= Hacemos Una secuencia de encendido/apagado de leds para visualizar que la tarjeta esta "viva" ==================
High LED1
DelayMS 100
Low LED1
High LED2
DelayMS 100
Low LED2
High LED3
DelayMS 100
Low LED3
High LED4
DelayMS 100
Low LED4
High LED5
DelayMS 100
Low LED5
High LED6
DelayMS 100
Low LED6
High LED6
DelayMS 100
Low LED6
High LED5
DelayMS 100
Low LED5
High LED4
DelayMS 100
Low LED4
High LED3
DelayMS 100
Low LED3
High LED2
DelayMS 100
Low LED2
High LED1
DelayMS 100
Low LED1
'====================== Fin de secuencia =============================================
'======================== Inicializamos el modulo ESP8266 por medio de comandos AT Via el puerto serie ===================
HSerOut ["AT", 10,13]'Enviamos comando de Atencion "AT" para verificar comunicacion con modulo ESP8266
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CWMODE=3", 10,13]'Enviamos comando para colocar el modulo ESP8266 en modo "BOTH"
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CWJAP=",34,"ARRIS-C852",34,",",34,"5AB924B90DF3AF8F",34, 10,13]'Solicitamos Conectarse a red WIFI SSID="ARRIS-C852" y Clave wep "5AB924B90DF3AF8F"
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CIPMUX=0", 10,13]'Enviamos comando para configurar el modulo ESP8266 en modo de conexion simple.
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CIPSTART=",34,"UDP",34,",",34,"192.168.0.2",34,",","7777",",","7777",10,13]'Establecemos conexion UDP con la ip 192.168.0.2 y puertos 7777
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CIPMODE=1", 10,13]'Establecemos el modo de Datos transparente (lo que reciba y envie el puerto serie pasara via UDP con equipo remoto)
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CIPSEND", 10,13]' Comenzamos inicio de transmicion y recepcion de datos
'HSerIn [Wait (">"), DATOEN]' Esperamos el caracter ">" el cual indica que el modulo esta listo para comunicaciones.
'------------A partir de aqui el modulo ya esta inicializado y listo para enviar y recibr datos como cualquier puerto serie.
'============= Hacemos Una segunda para "avisarnos" que nuestra tarjeta esta lista y en linea ==================
High LED1
DelayMS 100
Low LED1
High LED2
DelayMS 100
Low LED2
High LED3
DelayMS 100
Low LED3
High LED4
DelayMS 100
Low LED4
High LED5
DelayMS 100
Low LED5
High LED6
DelayMS 100
Low LED6
High LED6
DelayMS 100
Low LED6
High LED5
DelayMS 100
Low LED5
High LED4
DelayMS 100
Low LED4
High LED3
DelayMS 100
Low LED3
High LED2
DelayMS 100
Low LED2
High LED1
DelayMS 100
Low LED1
'====================== Fin de secuencia de Aviso =============================================
inicio: ' Aqui Comienza el Bucle que comanda los datos recibidos y envio del estado en el puerto A
HSerIn 500, nada,[Dec DATOEN] 'esperamos datos desde el puerto serie y los almacenamos en variable DATOEN, si en 500 ms no hay nada brinca a etiqueta nada
If DATOEN=0 Then PORTB=0
If DATOEN=10 Then Low LED1
If DATOEN=20 Then Low LED2
If DATOEN=30 Then Low LED3
If DATOEN=40 Then Low LED4
If DATOEN=50 Then Low LED5
If DATOEN=60 Then Low LED6
If DATOEN=11 Then High LED1
If DATOEN=21 Then High LED2
If DATOEN=31 Then High LED3
If DATOEN=41 Then High LED4
If DATOEN=51 Then High LED5
If DATOEN=61 Then High LED6
If DATOEN=99 Then PORTB=255
HSerOut ["Comando=",Dec DATOEN, 10,13] 'se envia la confirmacion del comando recibido
GoTo inicio
nada:
HSerOut ["PortA=",Dec PORTA, 10,13] 'Se envia el estado del puerto A en decimal
GoTo inicio
Considero que el programa como tal, viene debidamente comentado por lo que considero no requiere una explicación mas allá de decir que la comunicación entre el microcontrolador 16f628 y el modulo ESP8266 es por medio del puerto serial a 9600 baudios, el Puerto B del 16f628 se utiliza como salidas (para manejar los leds), el Puerto A del mismo se utiliza como entradas (donde esta conectado el microswitch de 8 ) y que por medio de comandos AT se configura el modulo ESP8266 de tal suerte que al anexarse a la red inalambrica WiFi y obtener su IP, se deja abierta la comunicación UDP por el puerto 7777 y finalmente se deja abierto el transporte del puerto UDP hacia el pin RX del ESP8266 y desde el pin TX del ESP8266 hacia el puerto UDP.
¡Hemos creado un Tunel UDP<>RS232 entre la red Wi-Fi y nuestro microcontrolador 16f628!
Por ultimo simplemente se pone el microntrolador a la “escucha” de comandos para prender o apagar LEDS (relevadores en mi tarjeta) y enviar el estado de los pines del puerto A al destinatario en la red.
Software en la Computadora
Ahora me ocupa explicar como accesar o comandar desde un equipo conectado a la misma red a la que anexamos nuestra tarjeta por medio del protocolo UDP desde TCP/IP, para este fin existe una infinidad de software utilitario para poder enviar y recibir paquetes UDP tanto en Windows, Linux, Android, Machintosh, Ipad y otros sistemas operativos que seria larga la lista de ellos, solo basta dar una buscada por la red y encontraremos varias alternativas.
Recomiendo que se practique enviar y recibir mensajes entre dos computadoras o entre computadora y un teléfono, tableta, etc, para poder familiarizarse con el tema UDP. En el caso de Windows recomiendo el “Hercules Setup Utility” ya que es un software bastante completo y gratis, para android hay uno que se llama “UDP Tester” con el que ya se puede manipular la tarjeta que ocupa este aporte.
Sin embargo yo escribí un programa lo en Visual Basic .net con la finalidad de también aportar la facilidad a quien se aventure a montar la tarjeta, probar y en verdad cerrar el circulo del conocimiento que deseo verter aquí; dejo a continuación el listado de este programa que se puede compilar en Visual basic 2010.
PHP:
Imports System.Net
Imports System.Text.Encoding
Public Class UDPDEMO
Dim puerto As Integer = 7777 'Puerto UDP que sera utilizado; modificar aqui si se prefiere otro diferente al 7777
Dim publisher As New Sockets.UdpClient(0)
Dim subscriber As New Sockets.UdpClient(puerto)
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
publisher.Connect(DireccionIP.Text, puerto)
Dim sendbytes() As Byte = ASCII.GetBytes(Envio.Text + Chr(10) + Chr(13))
publisher.Send(sendbytes, sendbytes.Length)
End Sub
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
DireccionIP.Text = "192.168.0.5" 'Direccion IP del Host de destino
subscriber.Client.ReceiveTimeout = 100
subscriber.Client.Blocking = False
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Try
Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim rcvbytes() As Byte = subscriber.Receive(ep)
Recibo.Text = ASCII.GetString(rcvbytes)
Catch ex As Exception
End Try
End Sub
Private Sub TBTo_TextChanged(sender As System.Object, e As System.EventArgs) Handles DireccionIP.TextChanged
End Sub
Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click
End Sub
End Class
Obviamente se pueden usar otros lenguajes como Phyton, Java, Processing, C, C++, etc, etc.
Por ultimo dejo el Video de la tarjeta funcionando con el programa que escribi en Visual Basic .net que espero sea lo suficientemente explicativo por si mismo, ya que de presentador soy pesimo, asi que disculpen la austeridad del mismo.
https://plus.google.com/u/0/105335396337664792597/posts/YvcwJseYZPd?pid=6110075813635573442&oid=105335396337664792597
Gracias, espero sea de su agrado y Saludos.
Adjuntos
Última edición por un moderador: