Professional Documents
Culture Documents
Buscar
0
S/. 0,00
CATEGORAS
All Blog News Arduino y ESP8266 como cliente web
ARTCULOS POPULARES
Tutorial trasmisor de celda de carga HX711, Balanza Digital ago 23, 2015
Con guracin del mdulo bluetooth HC-05 usando comandos AT ago 08, 2015
ARTCULOS RECIENTES
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 1/22
16/7/2017 Arduino y ESP8266 como cliente web
PROMOCIONES ESPECIALES
Mdulo PIR HC-SR501
Con este mdulo podrs detectar...
ETIQUETAS
sensor robot cnc Servo infrarrojo LED LCD driver Fuente cable
NOVEDADES
Piezo Buzzer activo 12mm
Agrega alertas o efectos de sonido a tus proyectos
S/. 1,00
S/. 7,00
S/. 70,00
S/. 12,00
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 2/22
16/7/2017 Arduino y ESP8266 como cliente web
Sensor de presin BMP280
Sensor de presin baromtrica BMP280 de alta precisin y de bajo consumo...
S/. 15,00
S/. 28,00
S/. 50,00
Shield Relay v2
La manera ms sencilla y rpida de controlar cargas de alta corriente...
S/. 45,00
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 3/22
16/7/2017 Arduino y ESP8266 como cliente web
Despus de trabajar el ESP8266 como servidor (Tutorial ESP8266: Parte I), usaremos el
ESP8266 como cliente, de esta forma podremos conectarnos a un servidor y poder enviar
o pedir informacin.
Usar el ESP8266 como cliente significa que nuestro Arduino a travs del ESP8266 debe
de conectarse a un servidor por ejemplo www.google.com o www.naylamp.com , existen varias
formas de comunicarse entre cliente servidor, nosotros nos comunicaremos por HTTP, que
es la misma forma en la que se comunican los navegadores web (Chrome, mozilla, etc)
con los servidores.
Existen dos formas fciles de enviar datos junto con una peticin HTTP, estas son el
mtodo GET y POST, La diferencia principal entre estos dos mtodos es que en el mtodo
GET se envan los datos en la URL, quedando visible para el usuario, mientras que en el
mtodo POST los datos quedan ocultos para el usuario. Ambos mtodos son muy usados
y casi siempre estn implementados en las pginas webs que navegamos, en el siguiente
enlace se explica de forma resumida la diferencia de estos:
http://www.miguelmanchego.com/2010/diferencias-entre-envio-get-y-post/
Nosotros Trabajaremos con el Mtodo GET y tomaremos como ejemplo el ejercicio que se
explica en la siguiente link: http://aprende-web.net/php/php4_2.php , con la diferencia que no
pasaremos variables de una pgina a otra, sino de nuestro Arduino a una pagina web.
Para enviar datos por el mtodo GET si lo realizamos desde el navegador es simple, solo
hay que escribir en la URL los datos que queremos enviar, seria de esta forma:
http://aprende-web.net/php/ejemplos/ej10destino.php?a=125&b=26
Como se observa al link se le agrega al final ?a=125&b=26 de esta forma indicamos que
queremos enviar esos parmetros. Cuando al servidor le llega esta consulta, lee los dos
datos (a=125 y b=26), y le responde con una pgina web que muestra los datos que ha
recibido
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 4/22
16/7/2017 Arduino y ESP8266 como cliente web
Este cdigo esta subido en un servidor, y es el servidor el que ejecuta el cdigo PHP y
realiza las acciones programadas que en este caso es una simple respuesta HTML en
donde podemos ver los datos que ha recibidos.
En el cdigo de la pgina que est subida en el servidor se puede programar para que se
conecte a una base de datos y subir las variables, descargar informacin o haga cualquier
otra accin, pero esto depender de su necesidad y de sus habilidades como
desarrollador web.
Pueden usar esta misma pgina para desarrollar el tutorial o programar y subir su propia
pgina a un servidor.
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 5/22
16/7/2017 Arduino y ESP8266 como cliente web
ESP8266 Arduino
TX D10
CH_PD 3V3
RST No conectado
3.3V 3V3
GND GND
GPIO2 No conectado
GPIO0 No conectado
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 6/22
16/7/2017 Arduino y ESP8266 como cliente web
El ESP8266 funciona con 3.3V, por eso en el pin TX del Arduino se recomienda usar
resistencias para generar una cada de voltaje, el valor de las resistencias no
necesariamente tienen que ser 1K y 2K, pueden usar las resistencias que tengan a la
mano pero estas deben tener una relacin de 1:2, al usar esas resistencias se forma una
divisor de voltaje y el nivel de 5V del TX del Arduino se convierte en un nivel 3.3V. En el
caso del RX no es necesario, puesto que el ESP8266 enva a ese pin niveles de 3.3V
niveles que el Arduino los considera 1 lgicos.
Para poder enviar los comandos AT cargamos en nuestro Arduino el siguiente programa:
#include <SoftwareSerial.h>
void setup() {
Serial.begin(9600);
SerialESP8266.begin(9600);
//SerialESP8266.begin(115200); //
}
void loop() {
if (SerialESP8266.available()) {
Serial.write(SerialESP8266.read());
}
if (Serial.available()) {
SerialESP8266.write(Serial.read());
}
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 7/22
16/7/2017 Arduino y ESP8266 como cliente web
Este programa solo es un repetidor serial todos los datos que enva el ESP8266 se
transmiten a la PC y los que se envan desde la PC se envan al ESP8266
Despus de cargar el programa, abrimos el monitor serial y verificamos que nuestro
monitor serial est a la velocidad de 9600 y tenga seleccionado la opcin ambos NL &
CR, seguidamente empezamos a enviar los comandos AT:
Test de comando AT
Enviamos:
AT
Recibimos:
OK
Si no recibimos una respuesta, puede ser que nuestro ESP8266 est configurado a una
velocidad diferente a la programada: para esto debemos cambiar la siguiente lnea de
cdigo y volver a cargar:
SerialESP8266.begin(115200);
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 8/22
16/7/2017 Arduino y ESP8266 como cliente web
AT+UART_DEF=9600,8,1,0,0
Recibimos:
AT+UART_DEF=9600,8,1,0,0
OK
SerialESP8266.begin(9600);
Despus, de cargar ahora con la nueva velocidad, debemos de enviar AT y esperar a que
nos responda con un OK, de esta forma confirmamos que la velocidad ha sido cambiada
correctamente.
Todo el proceso que hemos hecho solo se hace una solo vez, posteriormente as se
apague nuestro ESP8266 la velocidad configurada se mantendr.
Enviamos:
AT+CWMODE=1
Recibimos:
AT+CWMODE=1
OK
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 9/22
16/7/2017 Arduino y ESP8266 como cliente web
AT+CWJAP="Naylamp","hail_hydra"
Recibimos:
AV+CWJAP="Naylamp","hail_hydra"
WIFI CONNDCTED
WIFI GOT IP
OK
AT+CIPMUX=0
Recibimos:
AT+CIPMUX=0
OK
AT+CIPSTART="TCP","www.aprende-web.net",80
Recibimos:
CONNECT
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 10/22
16/7/2017 Arduino y ESP8266 como cliente web
AT+CIPSEND=83
Recibimos:
AT+CIPSEND=83
OK
>
Despus de recibir > el ESP espera la peticin del tamao indicado para que
posteriormente lo envi, para esto enviamos lnea por lnea la siguiente peticin
Enviamos
Recibimos:
Recv 83 bytes
SEND OK
+IPD,463:HTTP/1.1 200 OK
Date: Tue, 23 Aug 2016 19:22:56 GMT
Server: Apache
X-Powered-By: PHP/5.3.29
Content-Length: 319
Content-Type: text/html
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 11/22
16/7/2017 Arduino y ESP8266 como cliente web
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 12/22
16/7/2017 Arduino y ESP8266 como cliente web
El cdigo es el siguiente:
#include <SoftwareSerial.h>
SoftwareSerial SerialESP8266(10,11); // RX, TX
String cadena="";
void setup() {
SerialESP8266.begin(9600);
Serial.begin(9600);
SerialESP8266.setTimeout(2000);
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 13/22
16/7/2017 Arduino y ESP8266 como cliente web
//------fin de configuracion-------------------
delay(1000);
void loop() {
//--- programa----------------------
variable1=analogRead(A0);
variable2=3.14;
//otras operaciones
// . . .
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 14/22
16/7/2017 Arduino y ESP8266 como cliente web
peticionHTTP=peticionHTTP+"Host: www.aprende-web.net\r\n\r\n";
boolean fin_respuesta=false;
long tiempo_inicio=millis();
cadena="";
while(fin_respuesta==false)
{
while(SerialESP8266.available()>0)
{
char c=SerialESP8266.read();
Serial.write(c);
cadena.concat(c); //guardamos la respuesta en el string "cadena"
}
//finalizamos si la respuesta es mayor a 500 caracteres
if(cadena.length()>500) //Pueden aumentar si tenen suficiente espacio en la memoria
{
Serial.println("La respuesta a excedido el tamao maximo");
SerialESP8266.println("AT+CIPCLOSE");
if( SerialESP8266.find("OK"))
Serial.println("Conexion finalizada");
fin_respuesta=true;
}
if((millis()-tiempo_inicio)>10000) //Finalizamos si ya han transcurrido 10 seg
{
Serial.println("Tiempo de espera agotado");
SerialESP8266.println("AT+CIPCLOSE");
if( SerialESP8266.find("OK"))
Serial.println("Conexion finalizada");
fin_respuesta=true;
}
if(cadena.indexOf("CLOSED")>0) //si recibimos un CLOSED significa que ha finalizado
la respuesta
{
Serial.println();
Serial.println("Cadena recibida correctamente, conexion finalizada");
fin_respuesta=true;
}
}
}
else
{
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 15/22
16/7/2017 Arduino y ESP8266 como cliente web
//-------------------------------------------------------------------------------
A continuacin mostramos la salida del monitor serial, datos que deben recibir si todo les
va bien:
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 16/22
16/7/2017 Arduino y ESP8266 como cliente web
5 ? ? 0 ? Compartir
29 Comments
hola, estado probando el tutorial de cliente web y me a salido todo bien con el ejemplo que ponen
en dicho tutorial, pero al querer replicar en mi dominio me sale error en la utima parte (no me
devuelve nada), nose si tendra que configurar algo en la parte del servidor si me pudieran ayudar
les agradeseria muchsimo. gracias de antemano.
Reply
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 17/22
16/7/2017 Arduino y ESP8266 como cliente web
Naylamp
oct 14, 2016
Hola marlo, hasta que paso logra comunicarse con tu servidor, en nuestro ejemplo
primero se conecta al servidor (verifica que pase esto) despus enva la peticin
(verifica tambin que logre enviar la peticin) y finalmente espera la respuesta, Si
no tienes ninguna respuesta aumenta el tiempo de espera, puede ser que el
servidor demore en responder.
Reply
Luis Gerardo
oct 24, 2016
Hola buenos dias, gracias por el tutorial muy bueno, despues de una semana de estar probando
por fin pude mandar datos al servidor. Me a sido de gran utilidad.
Reply
Sergiotas
dic 11, 2016
Saludos, estoy realizando los montajes y quisiera saber si es posible programar simultneamente
un webserver para controlar unos leds y acceder a informacin de sensores en una web local y a
la vez que enve datos de los sensores y estados de los leds en una pagina del tipo Thingspeak.
Me gustara alguna pista o algn enlace para ver si puedo usar mi arduino uno con esp8266 con
las dos Funcionalidades. Gracias y saludos.
Reply
Naylamp
dic 14, 2016
Hola, podras programar que en un momento trabaje como servidor por ejemplo
para hacer configuracin y ver informacin y despus trabajar como como cliente.
Pero si lo usas como clientes mejor que el usuario acceda al servidor externo que
es en donde ya estn tus datos.
Reply
jorge
ene 2, 2017
Reply
jorge
ene 2, 2017
Reply
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 18/22
16/7/2017 Arduino y ESP8266 como cliente web
Gonzalo Bravo
feb 14, 2017
Estimado: Una consulta con respecto a la ultima parte (3. Arduino como cliente web usando
ESP8266) Sabes si existe alguna complicacin en el caso de que el hosting de la pagina web sea
gratis? Saludos de antemano!
Reply
Naylamp
feb 18, 2017
Hola Gonzalo, No debera haber problemas con usar un servidor gratuito, en caso
sea lento y demore la respuesta debes de aumentar el tiempo de espera.
Reply
ricardo
feb 19, 2017
Hola manualmente me sale todo muy bien pero en el codigo programado para q todo sea
automatico no me devuelve la peticion pero entra al bucle de send
Reply
Gonzalo Bravo
feb 20, 2017
Entonces sabes por qu se puede producir este error al hacer la prueba usando los comandos AT?
Esta es la respuesta del servidor:+IPD,391:HTTP/1.1 408 Request Timeout Date: Mon, 20 Feb
2017 17:29:00 GMT Server: Apache Content-Length: 221 Connection: close Content-Type:
text/html; charset=iso-8859-1
Request Timeout
Server timeout waiting for the HTTP request from the client.
CLOSED
Reply
Hernan
feb 23, 2017
Eso me estaba pasando a mi, el error que yo encontr y como lo solucione, es que
en el comando AT+CIPSEND="bytes" estaba poniendo el numero errado, no se por
que, pero cont otra vez carcter por carcter y el resultado le sume 1 y con ese
numero me funciono. Todo eso para el envi manual, ahora tengo problemas
cuando intento que el arduino lo haga solo, y se que el error esta en el rn que se le
pone despues del HTTP /1.1 y des host.
Reply
Gonzalo Bravo
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 19/22
16/7/2017 Arduino y ESP8266 como cliente web
Hola, haciendo las pruebas para hacer consultas al servidor usando los comandos AT tengo el
siguiente problema al intentar conectar al servidor: Envo AT+CIPSTART="TCP","www.aprende-
web.net",80y recibo como respuesta: DNS Fail Gracias de antemano. ERROR
Reply
Naylamp
mar 25, 2017
Reply
juandavid8a
mar 10, 2017
Reply
Naylamp
mar 25, 2017
Reply
Iaki
mar 27, 2017
Hola buenas! al recibir los datos de la variable son una String, cuando intento guardarlos en la
variable int me sale siempre el valor 4 le dejo el ejemplo de lo que comento,
int id;
String GETID = client.readStringUntil('r');
Serial.println (GETID);
client.flush();
idmlg = GETID.indexOf("/idmlg=");
Serial.print (id);
delay(10);
Reply
Naylamp
abr 9, 2017
Hola, ests usando la variable idmlg en lugar de la variable id, tambin ests
interpretando mal la funcin indexOf(), sta no te devuelve el numero en la cadena
sino te devuelve la posicin a partir de donde est la cadena que le ingresas como
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 20/22
16/7/2017 Arduino y ESP8266 como cliente web
parmetro, para obtener la pocin del nmero tendras que sumarle 7 (tamao de
"/idmlg="), una vez conocido la posicin a partir de donde est el nmero, puedes
usar substring() para extraer el nmero, pero este aun seguir siendo un string,
tendrs que usar toInt() para convertirlo en un nmero.
Reply
Sergio
abr 3, 2017
Hola, gracias por los dos tutoriales, estn muy bien. He logrado ambas partes, crear un server y
recibir datos ok y por otro lado tambin trabajar como cliente y enviar datos a un servidor. Los he
adaptado un poco a mis necesidades y todo ok. El caso, es que lo que necesito es funcionar de
ambas maneras, a veces necesito recibir datos de un servidor y otras veces soy yo el que tengo
que enviarlos, pues bien, es en este punto donde no soy capaz. Ya que en un punto si lo configuro
como estacin me va, pero para el otro no y como estacin me pasa lo mismo. De un modo
rudimentario pens que podra encapsular ambas configuraciones por separado y en funcin de
una variable de control acceder a una u otra, el caso es que dentro del loop() no me conecta a la
red wifi, responde AT correcto pero cuando trato de conectar a la red wifi falla...Alguna idea????
Gracias de antemano.
Reply
Naylamp
abr 9, 2017
Reply
Alex
may 9, 2017
Hola. He conseguido que el programa del arduino me funcione y la respuesta del monitor serial
coincide. El problema es que en la pgina web no se me actualizan los valores que he enviado.
Alguien conoce alguna solucin? Gracias de antemano.
Reply
miquel
may 20, 2017
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 21/22
16/7/2017 Arduino y ESP8266 como cliente web
Reply
mig
may 21, 2017
Reply
Naylamp
may 31, 2017
Reply
Jorge
may 21, 2017
Reply
Alvaro
jun 12, 2017
hola, Esta muy bine el tutorial.Quisiera, si puedes que me orientaras, tengo una bd mysql con las
temperaturas de unas habitaciones almacenadada, con ESP8266 consigo cambiar esas
temperaturas en la base de datos a traves de un php. Pro la pregunta es, si yo cambio los datos en
la tabla mysql desde el servidor web, como puedo mandar una notificacin al ESP8266, para que
cambie la temperatura, cada vez que yo cambien un dato?Gracias
Reply
Naylamp
jun 30, 2017
Hola Alvaro, el caso que mencionas es una de las limitaciones al usar http, EL
ESP8266 tendra que estar consultando cada cierto tiempo al servidor para ver si
hay algn cambio.
Reply
Leave a Reply
* Name:
* E-mail:
(Not Published)
Website:
(Site url withhttp://)
http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html 22/22