[Aporte] Modulo Wifi ESP8266

#1
Hola,

En este post vamos a dar un pequeño ejemplo del uso del modulo esp8266 que es un modulo wifi con stack TCP/UDP.

esp8266[1].jpg

Descripción:
Este modulo es una solución wifi basado en el circuito integrado ESP8266, este modulo nos permitirá desarrollar cosas con internet a un bajo costo.

Características esenciales:
•Comandos AT•Solo con 4 pines para la comunicación•Actualización de Firmware por Serial•Comunicación UART

Conexión:

esp82662.jpg

Interfaz:

esp82663.jpg

Código:
'''
Created on 11/01/2015

@author: jorge
'''

import socket

ip="192.168.1.68"
port=7777
MESSAGE="Hello World!!"
a = bytes(MESSAGE, 'utf-8')

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((ip,port))

print("Connect...",ip,",",port)

try:
	while True:

	    print("Waiting for data...",ip,",",port)
	    data,addr = sock.recvfrom(1024)
	    print("Data -> ",data, "Adr->",addr)
	    sock.sendto(a,addr)
	    
except KeyboardInterrupt:

	sys.close()
Comandos:



Video:


Saludos!

Hola a todos,

En este post vamos a usar la librería que hemos desarrollado para el modulo ESP8266.

Video:


Código:
///////////////////////////////////////////////////////////
/*
*//**
*@file	Main.c
*@Company	ucursos.blogspot.com
*@brief Uso del modulo esp8266 con libreria UDP
*@Version	1.0
*@date	14/01/2015
*@author George
*/
///////////////////////////////////////////////////////////

/*________________Includes_____________________*/


#include	<lpc11xx.h>
#include	"esp8266.h"
#include	"SetClock48Mhz.h"
#include	"SetSoftUart.h"

/*________________Defines______________________*/


/*________________Variables____________________*/

uint8_t DataCount = 0;
char Data[20];

ESP8266Config MyEsp8266;

/*********************************************************************//**
 * @brief		Funcion Principal
 * @param[in]	None
 * @return 		None
 **********************************************************************/

int main(void){

	//Configuramos Perifericos
	SetClockTo48Mhz();
	SetSoftUART(9600);
	SetUartTo(115200);

	
	//Configuramos Modulos
	
	Dir_Pin_Reset_ESP8266;
	
	MyEsp8266.Ssid="modem";
	MyEsp8266.Password="password";
	MyEsp8266.MultiConnection=0;
	MyEsp8266.TypeConnection="UDP";
	MyEsp8266.IPConnection="192.168.1.96";
	MyEsp8266.PortConnection="7777";
	MyEsp8266.WifiMode=3;
	MyEsp8266.DataMode=0;
	MyEsp8266.Response="!8266";
	
	soft_write_string_rom("ESP8266 Inicializando...\r");

	//*Habilitamos la interrupcion por recepcion de datos UART
	//Para trabajar con el modulo ESP8266

	NVIC_EnableIRQ(UART_IRQn);
	
	//Inicializamos el Modulo ESP8266
	
	if(ESP8266_Init(MyEsp8266)){

		soft_write_string_rom("Error to Connect, Reconnecting...\r\n");
		
		while(ESP8266_Init(MyEsp8266));

	}
	
	soft_write_string_rom("ESP8266 Conectado!");
	
	while(1){

		if(!ESP8266IsConnected()){
			
			for(DataCount=0;DataCount<sizeof(Data);DataCount++){

				Data[DataCount]='A';

			}
			
			if(ESP8266_SendData(Data,sizeof(Data),MyEsp8266.Response,5)){

				soft_write_string_rom("Error to Send Data\r\n");
				
			}
			
		}else{
			soft_write_string_rom("Error to Connect, Reconnecting...\r\n");
			while(ESP8266Reconnecting(MyEsp8266)>0);

		}

		delay_ms(200);
		delay_ms(200);
	}

}
Python Code:

Código:
'''
Created on 08/05/2014

@author: jorge
'''
import socket


ip="192.168.1.96"
port=7777
MESSAGE="!8266"
a = bytes(MESSAGE, 'utf-8')

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((ip,port))

print("Connect...",ip,",",port)
while True:
    print("Waiting for data...",ip,",",port)
    data,addr = sock.recvfrom(1024)
    print("Data -> ",data, "Adr->",addr)
    sock.sendto(a,addr)
Download:

http://www.mediafire.com/download/qdbypcpnee7mzt2/ESP8266.zip
 

Adjuntos

Última edición por un moderador:
#2
Muy bueno el modulo, ayer me puse a estudiar como hacer un servidor web con microcontrolador y no parece tan dificil, aunque todavia no me explico como se envian los archivos de imagen para que los lea el explorador de web :unsure: eso si parece que esta un poco complejo.
 
Última edición:
#3
Muy bueno el modulo, ayer me puse a estudiar como hacer un servidor web con microcontrolador y no parece tan dificil, aunque todavia no me explico como se envian los archivos de imagen para que los lea el explorador de web :unsure: eso si parece que esta un poco complejo.

A mi parecer no sirve o no esta pensado para Web server (se necesita mucho trabajo y gráficas pues ¿en donde las guardas?); mas bien esta concebido para comunicación TCP/UDP, yo hasta ahora estoy con UDP, y funciona bien.

Saludos
 
Última edición:
#4
No en entendi muy bien si dices que sirve o no sirve para web server, y es la primera vez que comienzo a estudiar eso asi que no entiendo los protocolos...


pero mira este video de un servidor web hiper sencillo con arduino...


lo que no se si es que pudiera enviar las imagenes, y claro que estaria pensando en una pagina web con un iconito o algo que no se vea tan blanco y negro osea nada imagenes de alta resolucion.

e necesita mucho trabajo y gráficas pues ¿en donde las guardas?
el guardarlas es lo de menos se podrian poner en una memoria SD controlada con el micro. supongo que el unico inconveniente seria la velocidad.
 
Última edición:
#5
Me refiero a que por la capacidad natural de almacenamiento de un microcontrolador, no veo como guardar una pagina web decente con gráficas y todo lo que implica, por eso es que considero que la aplicación mas explotable con cualquier microcontrolador y el modulo ESP8266, es a través de la comunicación TCP o UDP; con la cual ya puedes establecer la transmisión exclusiva de datos específicos entre tu tarjeta aplicativa y un HOST, o lo que se quiera que soporte el protocolo tcp/ip.

Si apreciamos los ejemplos que nos comparte quien inicia el tema, debemos entender el potencial del protocolo UDP, quizás de manera muy coloquial o simplista podría decir que gracias a este modulo, podemos migrar casi cualquier aplicación rs-232 que tengamos pero a través de tcp/ip.

Tal vez, seria importante antes de utilizar el modulo ESP8266 y que a manera de introducción al mundo TCP/IP (UDP) nos programáramos dos módulos de software en nuestra pc; uno de transmisión y otro de recepción para "descubrir" el potencial de este protocolo, ya aquí nos postearon unos ejemplos en Phyton yo estoy con Microsoft y hay muchos otros lenguajes para probar, como MatLab, Mathematica, etc.

En conclusión, yo considero que el simple echo de poder manipular variables de estado de un microcontrolador a través de tcp/ip con el modulo ESP8266 es una oportunidad muy asequible, sin la pretensión de hacer un web server; para eso ya me iría a un ARM.

Saludos
 
#6
En conclusión, yo considero que el simple echo de poder manipular variables de estado de un microcontrolador a través de tcp/ip con el modulo ESP8266 es una oportunidad muy asequible, sin la pretensión de hacer un web server; para eso ya me iría a un ARM.

:unsure: yo pienso que desde ese punto de vista a lo mejor ya conviene pagar un servicio de servidor y sale mas barato... XD

a mi para lo que me gustaria ese modulo es para hacer paginas de configuracion de hardware tipo router...



imagina, no se, una cafetera con su propia pagina de configuracion, o no se cualquier cosa que imagines que seguramente ya existe, pero para eso me gustaria ese modulo.

estoy totalmente deacuerdo contigo que ni remotamente se podria hacer una pagina como la de CAM4 ni de chiste y claro se le puede sacar otras utilidades.
 
Última edición:
#7
http://www.yoreparo.com/foros/files/configuracion_router_02.jpg

imagina, no se, una cafetera con su propia pagina de configuracion, o no se cualquier cosa que imagines que seguramente ya existe, pero para eso me gustaria ese modulo.

Si, Justamente le llaman el "Internet de las cosas" y en su raiz esta basado en UDP.

Lo que tu invitas a imaginar, pues es por supuesto muy viable y seria el menos en quitarte la entereza, así que pues suerte y a ver como avanza este tema ya veremos como lo enriquecemos mas. Por mi parte estoy migrando una tarjetita que ocupo para Hidroponia que la manipulaba por bluetooth y que terminaba cableandola pos rs232 por falta de cobertura del bluetooth, en las primeras pruebas de este modulo que comentamos, si que cubre bien la distancia que necesito...ahora falta un rato todavía...pero tiene buena pinta.

Saludos
 
#8
Muy bueno el modulo, ayer me puse a estudiar como hacer un servidor web con microcontrolador y no parece tan dificil, aunque todavia no me explico como se envian los archivos de imagen para que los lea el explorador de web :unsure: eso si parece que esta un poco complejo.
De poder se puede realizar un web server en un microcontrolador, yo me imagino tener una memoria ROM externa de unos 5 MB donde almacenes tu pagina, y configurar el modulo esp8266 para que trabaje como web server, realizas todos lo comandos automatizamente, y hasta que te pida la pagina, empiezas a leer la ROM enterna y enviarlo al dispositivo que ha hecho la peticion.

El siguiente tutorial que voy a realizar es precisamente eso, usar una memoria ROM donde guarde una pagina completa (Pagina Simple, HTML,CSS , Posiblemente Javascript), la pagina la puedes hacer en http://codepen.io/pen/ cuando tengas lista la pagina, la vaciamos a la memoria ROM ( ahora que lo pienso usar un microSD Card).

Pero todo esto usar un microcontrolador LPC1768 con procesador ARM CORTEX M3.
Saludos!
 
#9
Bueno un par de comentarios...

ese MCU LPC1768 me parecio bestial... sera mi siguiente paso XD... en realidad como primera impresion el modulo wifi me parecio como de la talla de los PICs. pero estuve viendo que alcanza los 115Kbaudios, asi que si se me hace como para algo un poco mas robustito.

por otro lado yo no le he comprado el modulo ni el MCU, asi que si pones algun ejemplo estaria excelente; con respecto a lo de la pagina si quieres hago alguna pero en realidad no tenia ningun proyecto especifico, solo que me llamo la atencion el modulo y me puse a investigar un poco, que por cierto muy buenos tus aportes, los voy siguiendo XD.
 
Última edición:
#10
Como paso la información que recibo del modulo a una base de datos? saben y viceversa pasar de la base de datos al modulo (base de datos SQL Server 2008 R2)


Agradeceré su amable apoyo.
 
#11
Como paso la información que recibo del modulo a una base de datos? saben y viceversa pasar de la base de datos al modulo (base de datos SQL Server 2008 R2)


Agradeceré su amable apoyo.
El modulo ESP8266 como tal, no tiene los elementos para poder incidir directamente con una base de datos y para lograr algo como lo que sugieres dependerá de quien comande, maneje o interactue con el modulo.

Suponiendo que se cuenta con el acceso al servidor de SQL para montar aplicaciones extras, entonces se puede desarrollar una aplicación que funja para poder estar "escuchando" comandos provenientes desde el modulo ESP8266 vía el protocolo UDP y que los traduzca en comandos SQL para poder afectar las bases que se quieran en dicho servidor SQL.

Así lo hago yo, aunque utilizo MYSQL, en esencia es lo mismo. Asi que hay que tener conocimientos suficientes en SQL, Programación del protocolo tcp/ip y obviamente programar el modulo ESP8266 con algún microcontrolador tal como se ejemplifica por este Tema.

Para el asunto de la programación o aprovechamiento del protocolo tcp/ip, se puede usar, C+, VBasic.net, Python, Pearl etc, etc.

Saludos
 
#12
Para el asunto de la programación o aprovechamiento del protocolo tcp/ip, se puede usar, C+, VBasic.net, Python, Pearl etc, etc.

Entonces a grandes rasgos la forma de hacerlo es tener MYSQL - VBasic.net - ESP8266, donde VBasic.net hace la función de un OPCServer, o me equivoco?.


El detalle es como hacer la interacción entre VBasic.net (o el programa que se utilice ) con el ESP8266 y con MYSQL.
 
Última edición:
#13
No te equivocas, así es la cosa, aunque como siempre cada quien tiene su forma de hacer las cosas, aquí te dejo una pequeño aporte mio al asunto del protocolo UDP y VBasic.net. Aqui no toco el asunto de SQL para no confundir la cosas o conceptos, sin embargo creo que ilustra de manera global tu pregunta; al menos la parte "dificil" que comprende desde la electronica hasta tcp/ip. Ya que sobre como abrir bases de datos desde Visual Basic encontraras mil ejemplos.

Saludos
 
#15
No te equivocas, así es la cosa, aunque como siempre cada quien tiene su forma de hacer las cosas, aquí te dejo una pequeño aporte mio al asunto del protocolo UDP y VBasic.netAqui no toco el asunto de SQL para no confundir la cosas o conceptos, sin embargo creo que ilustra de manera global tu pregunta; al menos la parte "dificil" que comprende desde la electronica hasta tcp/ip. Ya que sobre como abrir bases de datos desde Visual Basic encontraras mil ejemplos.

Saludos
El lenguaje "BASIC" se puede utilizar con arduino? se puede desarollar algo similar a tu ejemplo con este, que funja la función de su PIC? o no lo soporta?

Adicional a esto, el tema de la IP
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
Esta conectandose a una IP (MI PC )o se le esta asignando una IP al modulo???

Donde puedo aprender más de los puertos ya que es algo que no termino de entender?
 
Última edición:
#16
Desde el lado del microcontrolador y lenguaje de programación, si se puede usar el que gustes solo es cuestión de hacerlo, pero me parece que no has comprendido el tema de como aprovechar el modulo ESP8266 para comunicacion tcp/ip, que considero es lo primero que debes superar y en el presente aporte, como en el mio, viene todo muy claro y tratamos de establecer como hacer uso de los comandos de atención (AT) a los que responde el modulo ESP8266.



Saludos
 
Última edición:

Dr. Zoidberg

Well-known-Papá Pitufo
#17
Donde puedo aprender más de los puertos ya que es algo que no termino de entender?
Eso no tiene gran ciencia. En un sistema operativo con soporte de multitasking, la direccion IP identifica al host y el PUERTO identifica al proceso.
Para verlo mas facil, la direccion IP es como el numero de telefono de una empresa y el PUERTO es el numero de interno de algun empleado.
 
#18
Eso no tiene gran ciencia. En un sistema operativo con soporte de multitasking, la direccion IP identifica al host y el PUERTO identifica al proceso.
Para verlo mas facil, la direccion IP es como el numero de telefono de una empresa y el PUERTO es el numero de interno de algun empleado.
Está entendido ya. Ahora mi pregunta. ¿Trasladándolo con tu ejemplo al empleado, le pueden hacer varias llamadas a la vez? ¿Está limitado a "x" cantidad o no tiene limite?

Mil gracias por sus aportes, me son de inmensa utilidad.
 
Última edición por un moderador:

Temas similares