Haga clic para más productos.
No se encontraron productos.

Arduino y ESP8266 como cliente web

148171

Después 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 información.

Este tutorial está más orientado a un programador o desarrollador web, que a través de internet desea controlar o recibir datos de un hardware, en este caso Arduino, pero antes de continuar con este tutorial deben de revisa el Tutorial ESP8266 Parte I , en donde se explica sobre el Modulo ESP8266, los comandos AT y se implementa un ejemplo trabajando al ESP8266 como servidor.

Usar el ESP8266 como cliente significa que nuestro Arduino a través 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.

Envió de parámetro en un Dialogo HTTP


Cuando un navegador web (El cliente) quiere acceder a una página web (servidor) , envía una petición http (HTTP request) el servidor recibe la petición y le responde con la página web (HTTP response), El encargado de enviar e interpretar esto es el navegador web, el usuario solo escribe la URL y espera a que cargue la página, pero cuando trabajemos con Arduino tenemos que comunicarnos a través de peticiones http.

Existen dos formas fáciles de enviar datos junto con una petición HTTP,  estas son el método GET y POST, La diferencia principal entre estos dos métodos es que en el método GET se envían los datos en la URL, quedando visible para el usuario, mientras que en el método POST los datos quedan ocultos para el usuario. Ambos métodos son muy usados y casi siempre están implementados en las páginas 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 Método 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 página a otra, sino de nuestro Arduino a una pagina web.

Para enviar datos por el método 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 parámetros. Cuando al servidor le llega esta consulta, lee los dos datos (a=125 y b=26), y le responde con una página web que muestra los datos que ha recibido

 

Ejemplo Metodo GET


Lo que hace la página es mostrarnos los datos que ha recibido.

El código de la página web es el siguiente:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>página de destino</title>
</head>
<body>
<h1>Al abrir esta página se han pasado las siguientes variables:</h1>
<?php 
$a=$_GET['a'];
$b=$_GET['b'];
echo "<p>variable $a : $a";
echo "<p>variable $b : $b";
?>
</body>
</html>

Este código esta subido en un servidor, y es el servidor el que ejecuta el código 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  código de la página que está subida en el servidor  se puede programar para que se conecte a una base de datos y subir las variables, descargar información o haga cualquier otra acción, pero esto dependerá de su necesidad y de sus habilidades como desarrollador web.

Pueden usar esta misma página para desarrollar el tutorial o programar y subir su propia página a un servidor.

Ahora nosotros aremos lo mismo pero en lugar de hacerlo desde el navegador lo trabajaremos desde nuestro ESP8266.



1. Conexiones entre ESP8266 y Arduino:


Para conectar nuestro ESP8266 usaremos un protoboard para ayudarnos con el cableado, los nombres de los pines no están impresos en la PCB pero pueden revisarlos en la siguientes imagen: Pinout módulo ESP8266

ESP8266

Arduino

TX

D10

CH_PD

3V3

RST

No conectado

3.3V

3V3

GND

GND

GPIO2

No conectado

GPIO0

No conectado

RX

D11 (Usando resistencias)

 

Conexiones Arduino y ESP8266

 

El ESP8266 funciona con 3.3V, por eso en el pin TX del Arduino se recomienda usar resistencias para generar una caída 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 relación 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 envía a ese pin niveles de 3.3V niveles que el Arduino los considera 1 lógicos.

2. Realizando consultas al servidor usando comandos AT:

Antes de implementar en nuestro Arduino el cliente web, primero revisaremos la secuencia de comandos AT que debemos ejecutar para realizar dicha acción.

Para poder enviar los comandos AT cargamos en nuestro Arduino el siguiente programa:

#include <SoftwareSerial.h>

SoftwareSerial SerialESP8266(10, 11); // RX, TX

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());
  }
}

Este programa solo es un repetidor serial todos los datos que envía el ESP8266 se transmiten a la PC y los que se envían desde la PC se envían al ESP8266

Después de cargar el programa, abrimos el monitor serial y verificamos que nuestro monitor serial esté a la velocidad de 9600 y tenga seleccionado la opción “ambos NL & CR”, seguidamente empezamos a enviar los comandos AT:

Test de comando AT

Enviamos:

AT

Recibimos:

OK

Test AT

 

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 línea de código y volver a cargar:

  SerialESP8266.begin(115200); 

Ahora nuevamente repetimos el comando y debemos de obtener la respuesta:

 

Cambiar la velocidad de transmisión serial

Si la velocidad de transmisión de su ESP8266 es de 115200 tenemos que cambiarla a una velocidad de 9600, esto porque en nuestro arduino trabajamos con SoftwareSerial, y con 115200 estaríamos en el límite de velocidad que soporta el SoftwareSerial y podrían perderse algunos caracteres.

Si su ESP8266 trabaja a la velocidad de 9600 ya no realizar este paso.

Para cambiar de velocidad usamos el siguiente comando AT:

Enviamos:

AT+UART_DEF=9600,8,1,0,0

Recibimos:

AT+UART_DEF=9600,8,1,0,0

OK

Donde 9600 es la velocidad, los demás datos son otras configuraciones de la comunicación.

Seguidamente de hacer esto no podremos enviar más comandos puesto que se ha cambiado a la nueva velocidad, tendremos que reprogramar nuestro arduino con la velocidad de 9600, para esto nuevamente cambiar la velocidad en la siguiente línea de código:

  SerialESP8266.begin(9600);

Después, 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á.


Configurado el Modo del Wifi:

Trabajaremos en modo estación, es decir nos conectaremos a una red ya existente:

Enviamos:

AT+CWMODE=1

Recibimos:

AT+CWMODE=1

OK

Conectarse a una red Wifi

Nos conectaremos a la red cuyo nombre es: Naylamp , y su respectivo password es: hail_hydra

Enviamos:

AT+CWJAP="Naylamp","hail_hydra"

Recibimos:

AV+CWJAP="Naylamp","hail_hydra"

WIFI CONNDCTED

WIFI GOT IP

 

OK

La respuesta nos confirma que ya estamos conectados a la red wifi

Deshabilitamos las conexiones múltiples:

Debido a que vamos a trabajar como cliente web, deshabilitamos las conexiones múltiples, que generalmente se utilizan cunado trabajamos como servidor:

Enviamos:

AT+CIPMUX=0

Recibimos:

AT+CIPMUX=0

OK

Conectarnos con el servidor:

Enviamos:

AT+CIPSTART="TCP","www.aprende-web.net",80

Recibimos:

CONNECT

Al hacer esto iniciamos la conexión como cliente, y se especifica el tipo de conexión (TCP), el servidor (www.aprende-web.net) y el puerto (80), 

Enviar el tamaño de la petición HTTP
Antes de enviar la petición HTTP, es necesario especiar el tamaño en caracteres de la petición:

Enviamos:

AT+CIPSEND=83

Recibimos:

AT+CIPSEND=83

OK

>

Cuando recibimos “>” significa que ya podemos enviar la petición HTTP.

Enviar petición HTTP

Después de  recibir “>” el ESP espera la petición del tamaño indicado para que posteriormente lo envié, para esto enviamos línea por línea la siguiente petición

Enviamos

GET /php/ejemplos/ej10destino.php?a=23&b=56 HTTP/1.1(Enter o Enviar)

Host: www.aprende-web.net(Enter o Enviar)

(Enter o Enviar)

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

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<title>página de destino</title>

</head>

<body>

<h1>Al abrir esta página se han pasado las siguientes variables:</h1>

<p>variable $a : 23<p>variable $b : 56</body>

</html>

CLOSED

Lo que recibimos es la respuesta del servidor, en donde se observa el encabezado http y el HTML de la página web de respuesta.
Notar que al final recibimos un CLOSED esto indica que se ha cerrado la conexión con el servidor.

ESP8266, respuesta servidor.jpg

 

3. Arduino como cliente web usando ESP8266:

Ahora vamos programar en un sketch que enviará los comandos AT los cuales se enviaron manualmente en el ejemplo anterior:

El código es el siguiente:

#include <SoftwareSerial.h>
SoftwareSerial SerialESP8266(10,11); // RX, TX

String server = "www.aprende-web.net";

//variables para enviar al servidor
int variable1=364;
float variable2=3.14;

String cadena="";

void setup() {

  SerialESP8266.begin(9600);
  Serial.begin(9600);
  SerialESP8266.setTimeout(2000);
  
  //Verificamos si el ESP8266 responde
  SerialESP8266.println("AT");
  if(SerialESP8266.find("OK"))
    Serial.println("Respuesta AT correcto");
  else
    Serial.println("Error en ESP8266");

  //-----Configuración de red-------//Podemos comentar si el ESP ya está configurado

    //ESP8266 en modo estación (nos conectaremos a una red existente)
    SerialESP8266.println("AT+CWMODE=1");
    if(SerialESP8266.find("OK"))
      Serial.println("ESP8266 en modo Estacion");
      
    //Nos conectamos a una red wifi 
    SerialESP8266.println("AT+CWJAP="nombre_red","contraseña"");
    Serial.println("Conectandose a la red ...");
    SerialESP8266.setTimeout(10000); //Aumentar si demora la conexion
    if(SerialESP8266.find("OK"))
      Serial.println("WIFI conectado");
    else
      Serial.println("Error al conectarse en la red");
    SerialESP8266.setTimeout(2000);
    //Desabilitamos las conexiones multiples
    SerialESP8266.println("AT+CIPMUX=0");
    if(SerialESP8266.find("OK"))
      Serial.println("Multiconexiones deshabilitadas");
    
  //------fin de configuracion-------------------

  delay(1000);
  
}


void loop() {
  
  //--- programa----------------------

    variable1=analogRead(A0);
    variable2=3.14;
    //otras operaciones
    // . . . 
  
  
  //---------enviamos las variables al servidor---------------------
  
      //Nos conectamos con el servidor:
      
      SerialESP8266.println("AT+CIPSTART="TCP","" + server + "",80");
      if( SerialESP8266.find("OK"))
      {  
          Serial.println();
          Serial.println();
          Serial.println();
          Serial.println("ESP8266 conectado con el servidor...");             
    
          //Armamos el encabezado de la peticion http
          String peticionHTTP= "GET /php/ejemplos/ej10destino.php?a=";
          peticionHTTP=peticionHTTP+String(variable1)+"&b="+String(variable2)+" HTTP/1.1rn";
          peticionHTTP=peticionHTTP+"Host: www.aprende-web.netrnrn";
    
          //Enviamos el tamaño en caracteres de la peticion http:  
          SerialESP8266.print("AT+CIPSEND=");
          SerialESP8266.println(peticionHTTP.length());

          //esperamos a ">" para enviar la petcion  http
          if(SerialESP8266.find(">")) // ">" indica que podemos enviar la peticion http
          {
            Serial.println("Enviando HTTP . . .");
            SerialESP8266.println(peticionHTTP);
            if( SerialESP8266.find("SEND OK"))
            {  
              Serial.println("Peticion HTTP enviada:");
              Serial.println();
              Serial.println(peticionHTTP);
              Serial.println("Esperando respuesta...");
              
              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 tamaño 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
            {
              Serial.println("No se ha podido enviar HTTP.....");
           }            
          }
      }
      else
      {
        Serial.println("No se ha podido conectarse con el servidor");
      }

        
  //-------------------------------------------------------------------------------

  delay(5000); //pausa de 10seg antes de conectarse nuevamente al servidor (opcional)
}

Como se observa son la misma secuencia de comandos que se enviaron manualmente. Trabajamos con dos comunicaciones serial, una (por software) para comunicarnos con el ESP826 y otra (por hardware) para comunicarse con la PC y monitorear el ejemplo.

A continuación mostramos la salida del monitor serial, datos que deben recibir si todo les va bien:

 ESP8266, monitor serial 1

ESP8266, monitor serial 2

 

 

 

Productos relacionados
Artículos relacionados
76 Comentarios
  • Ca**** ***io

    Ca**** ***io 26/09/2020 Responder

    Felicitaciones. Muy bien explicado. En mi caso como me tocó hacerlo con arduino mega 2560 cambié los pines 10 y 11 por los pines SERIAL1 (14 y 15), así que en vez de declarar los pines 10 y 11, simplemente antecedí SerialESP8266 por Serial1.

    Una sugerencia importante es que los comandos AT donde use el empleo de comillas dobles, al pasarlo en el programa esa comilla doble en cada lado se debe pasar como /". Pongo un ejemplo como puse para configurar el WiFI

    String cmnd="AT+CWJAP=";
    cmnd+="""+wssid+"""+",";
    cmnd+="""+wpass+""" ;
  • Re******

    Re****** 26/12/2019 Responder

    hola, Sabes Me funciona el programa manual de comando AT sin problemas, llegando al SEND OK, pero no me muestra la respuesta del servidor.

    Con respecto al programa de envio de comandos AT de forma automatica, me dice que se conecta a la red WIFI, pero me dice que No se puede conectar al Servidor, puedes ayudarme con esto, por Favor?

    Que podrá Ser? puedes ayudarme?
  • Al**** ****es

    Al**** ****es 05/12/2019 Responder

    Ola buenas estimado , no me funciona con ninguna de las 2 opciones que ,se podria realizar ?

    SerialESP8266.println("AT+CWJAP="ALVARO_TORRES","35154326"");
    SerialESP8266.println("AT+CWJAP="ALVARO_TORRES","35154326"");
  • Gu******* ****is

    Gu******* ****is 15/09/2019 Responder

    me sale constantemente
    Tiempo de espera gotado
    Conexion finalizada
  • ga*****

    ga***** 27/07/2019 Responder

    Muchas gracias me fue muy útil y funciona con una base de datos perfectamente. GRACIAS
  • sa*

    sa* 19/07/2019 Responder

    Este ejemplo me fue bien quisiera preguntar cómo sería el envío por post.
    Gracias de antemano.
  • JO**

    JO** 15/07/2019 Responder

    AT+CWLAP= “nombre del punto”, “contraseña”

    Con ese comando me conecto perfectamente.

    Ahora el problema es que no se como conectarme a una red en la cual debo suministrar un nombre de usuario. Como debo hacer.

    Gracias
  • da***

    da*** 17/01/2019 Responder

    El programa funciona 100 puntos ,lo que ocurre es que en la pagina web no me muestra los valores alguien sabes porque?
  • Da***

    Da*** 17/01/2019 Responder


    Alguien podria ayudarme por favor en aclarar porque me sale este error en la linea
    +IPD,352:HTTP/1.1 404 Not Found
  • LB*

    LB* 07/11/2018 Responder

    Tengo un problema, todo funciona perfectamente, me da la respuesta y todo, pero los datos que envio no llegan a mi BD, uso los mismos datos cuando envio por una navegador y no tengo problemas, pero con Arduino no pasa eso, agradeceria que me digan que podría ser porque no tengo idea.
  • Jo**

    Jo** 26/09/2018 Responder

    Hola muy bueno el tutorial felicidades. Me sale un error con las funciones if(SerialESP8266.find("OK")).
    El error que me sale es:
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    if(SerialESP8266.find("OK")){
    Saludos...
  • Ri*****

    Ri***** 20/09/2018 Responder

    Hola Felicitacione por el tutorial. Mi consulta es lo siguiente.. cuando intento enviar información desde el arduino a un servidor falla pero cuando lo hago desde un navegador no hay problema alguno.. a que se puede deber esto..

    ESP8266 conectado con el servidor...
    Enviando HTTP . . .
    Peticion HTTP enviada:

    GET /SistemaMonitoreo/insertarMedicion.php?ubicacion=TANQUE1&temperatura=0.89&ph=7.0&ec=9.0&turbidez=0.4 HTTP/1.1
    Host: www.parsoftsac.com


    Esperando respuesta...


    +IPD,392:HTTP/1.1 400 Bad Request
    Date: Thu, 20 Sep 2018 0
    Content-Type: text/html; charset=iso-8859-1



    400 Bad Request

    Bad Request


    Your browser sent a request that this server could not understand.



    CLOSED

    Cadena recibida correctamente, conexion finalizada
    • Jh**

      Jh** 10/10/2019 Responder

      Me sucede lo mismo. Cuando trabajo localmente en mi servidor web instalado en mi máquina funciona perfectamente, pero falla cuando lo subo al servidor que tengo en Internet falla.
      Tal vez encontraste la solución?
  • To**

    To** 03/08/2018 Responder

    Hola muy buena información, solo me ha surgido una duda, soy nuevo en el uso del modulo que describe, en físico ya puedo leer los datos de al menos 4 sensores y mostrarlos en una pantalla LCD, ahora lo que necesito es configurar un modulo para que los valores leídos con el arduino se puedan enviar mediante wifi, es posible realizar esto con el código que propones o es necesario crear un nuevo código, o tendrías alguna sugerencia para guiarme.

    Saludos y muy buen blog.
  • Hu** ****da

    Hu** ****da 11/07/2018 Responder

    Hola, muy bueno, pero tu al enviar los datos lo envías en formato o tipo "GET" y yo quiero enviarlo de tipo "POST", en este ultimo caso ¿el protocolo de comunicación que usas en que variaría? o dicho de otra forma, tu para enviar la solicitud al servidor lo haces mediante este codigo

    String peticionHTTP= "GET /php/ejemplos/ej10destino.php?a=";

    Y como puedes ver lo haces de tipo "GET" yo necesito hacerlo de tipo "POST", pero cuales serian los cambios en ese pedazo de código para poderlo adaptar.

    Muchas gracias de antemano
  • xi*

    xi* 16/06/2018 Responder

    Amigo ayuda!!!!!!! el Monitor serial si me muestra la informacion y los datos que envio en la pagina web, pero en la pagina web en el navegador no me muestran las variables al momento de imprimirlas.....
  • Xi*

    Xi* 12/06/2018 Responder

    Me conecte a mi servido Xammp, pero a la segunda ocasion ya no se conecto, que podriia ser???
  • Em*****

    Em***** 01/06/2018 Responder

    Hola, a qué se puede deber el error: espcomm_upload_men failed al tratar de subir el código?
  • Di***

    Di*** 30/05/2018 Responder

    Alguien sabe como guardar la variable en mi base de datos, ya lo intente de muchas formas y nada, solo muestra la variable si al final de mi pagina pongo el ?=num
  • Je**

    Je** 10/05/2018 Responder

    Excelente tutorial: me funciono con el módulo SERIAL WIFI de crowtail, solo hay que usar resistencias para el pin de RX y cambiar la velocidad a 9600, saludos
  • Al** *****

    Al** ***** 09/05/2018 Responder

    Hola buenas tardes una pregunta, a mi me funciona bien tu programacion ocupo un arduino uno, bueno funciona bien solo una vez despues me manda el mensaje que no puede enviar la peticion http, note algo interesante debido a que en tu enlace el servidor web donde esta alojado manda el mensaje close cosa que el server que ocupo no lo hace, queria consultarte como es la configuracion del server que ocupas debido a que el server no me cierra la conexion y creo que eso es lo que hace que cuando envia la peticion peticion nuevamente no funcione, espero puedas ayudarme. que tengas buen dia saludos desde Nicaragua.
  • Fr*******

    Fr******* 26/04/2018 Responder

    Hola, leí todo el articulo tutorial, y queria saber si es posible que traves de dicho dominio envie informacion a arduino y modificar valores de salida de los pines?
    Lo que pasa es que tengo como proyecto realizar el encendido y apagado de focos desde cualquier parte del mundo (usando wifi o datos) por medio de una app, y hasta ahora lo he conseguido pero solo conectado a la misma red wifi, y quiero usar este modulo, no se si es posible realizar lo que comente en un inicio, desde ya muchas gracias por tanto apoyo!
  • Da**** *****ro

    Da**** *****ro 19/02/2018 Responder

    Muchas gracias, me ha funcionado perfectamente. He probado con otras direcciones HTTP y funcionan perfecto. Necesito que me funcione para HTTPS que debo modificar?
  • El*

    El* 23/01/2018 Responder

    Hola!
    Disculpen al colocar el comando AT no recibo ninguna respuesta, que puedo hacer?
  • Le*

    Le* 09/01/2018 Responder

    HOLA. Sale error en el monitor:

    Error en ESP8266
    Conectandose a la red ...
    Error al conectarse en la red
    No se ha podido conectarse con el servidor
    No se ha podido conectarse con el servidor
    No se ha podido conectarse con el servidor
    • He**** *****en

      He**** *****en 15/10/2018 Responder

      hola me sale exactamente el mismo error
  • Re****

    Re**** 19/12/2017 Responder

    Muy buena la info... Este es mi resultado:
    Peticion HTTP enviada:

    GET /eclipse-workspace/SerTesis/php/newfile.php?a=10&b=3.14 HTTP/1.0
    Host: 192.168.1.5
    Connection: close


    Esperando respuesta...


    +IPD,433:HTTP)rŠ’‚‚z-5
    Bate: Zue, 09 Dec 9017 06:33:0; GMTiempo de espera agotado


    no lo entiendo ya probé todas las velocidades en baudios, en lo mismo. Ayuda..
  • Mi**** ***el

    Mi**** ***el 12/12/2017 Responder

    Artículo muy instructivo. Es justo la información que andaba buscando. Explicado de manera muy clara. Muchas gracias por el trabajo y tiempos dedicados.
  • jo**

    jo** 05/12/2017 Responder

    hola duda se envia la primera vez bien pero ya despues de una vez no se vuelve a mandar alguna idea'?
  • el***** ** ** ***

    el***** ** ** *** 20/11/2017 Responder

    disculpa mi duda es sobre otro proyecto pero creo que me podrias ayudar, estoy tratando de enviar un mensaje con ethernet y arduino y ya tengo el servidor pero me aparece el siguiente error.

    Parse error: syntax error, unexpected '@' in C:xampphtdocscorreoenviar.php on line 2

    y el codigo que use en el php es este:

    $para = ‘goka0719@gmail.com’;
    $para .= ‘ely44435@gmail.com’;
    $titulo = ‘Movimiento detectado’;
    $mensaje = ‘El sensor PIR ha detectado un movimiento en el lugar’;
    $cabeceras = ‘ely44435@gmail.com’ . “rn” .
    ‘Reply-To:ely44435@gmail.com’ . “rn” .
    ‘X-Mailer: PHP/’ . phpversion();

    mail($para, $titulo, $mensaje, $cabeceras);
    ?>
  • CA****

    CA**** 22/10/2017 Responder

    Hola.
    Tengo un problema con el tiempo de refresco de la página web del servidor ESP8266.
    He montado un proyecto con un Arduino Mega conectado a un ESP8266 con el que puedo encender/apagar varios Leds con unos botones, y ver la temperatura y humedad de los sensores mediante una página web que lanza el ESP8266. Todo funciona perfectamente cuando estoy comunicando dentro de mi red local, pero cuando lo hago desde "fuera" con mi teléfono móvil, la página web tarda hasta 4 minutos en aparecer. Lo curioso es que, una vez que aparece la página web, el encendido y apagado de los leds es instantáneo, pero la lectura de temperatura y humedad (y toda la página web) tarda varios minutos en refrescarse.

    He utilizado el puerto 80 del router como se indica en los tutoriales y varias configuraciones diferentes del módulo ESP8266, pero no encuentro solución a dicho problema.
    Alguien ha tenido este problema o parecido? Alguna idea? Gracias de antemano por los tutoriales y las explicaciones...
  • CA****

    CA**** 14/10/2017 Responder

    hola disculpa hice un servidor local con xampp y al llegar a la parte de configurar mi esp8266 cuando ejecuto el comando AT+CIPSTART="TCP","127.0.0.2",80 me aparece ERROR CLOSE me podrias ayudar on esto te lo agradeceria

  • jo******

    jo****** 28/09/2017 Responder

    hola tengo una inquietud realice el cambio de la velocidad, por error ingrese un parámetro mal, ya no me reconoce los comando, como puedo realizar un reset de la velocidad de transmisión.

    muchas gracias.
  • MA******

    MA****** 12/09/2017 Responder

    Hola que tal? tengo este problema me aparece este mensaje de enviado "OK" pero no llega nada. ademas del error 400Unknown Version. necesito su ayuda.gracias

    ESTE ES EL CODIGO:

    busy s...
    Recv 83 bytes

    SEND OK

    +IPD,102:HTTP/1.1 400 Unknown Version
    Content-Length: 0
    Connection: close
    Server: Jetty(9.0.3.v20130506)
  • Re**

    Re** 21/08/2017 Responder

    Hola, cómo se le hace para que esta operación trabaje asincronamente,? porque quiero hacer otras operaciones además de la conexión pero se limita a que tiene que terminar la conexión para avanzar con mi siguiente método.
    • Na*****

      Na***** 29/08/2017 Responder

      Hola, Lamentablemente es uno de los problemas cuando se trabaja con microcontroladores, si tus otros métodos o tareas son pequeñas o rápidas, lo puedes incluir en funciones y llamarlas durante la conexión, o usar Interrupciones. Existen varios trabajos para realizar multitarea, revisa ArduinoThread y RTOS para arduino.
  • Lu* ******do

    Lu* ******do 14/08/2017 Responder

    Hola, he estado siguiendo tus blogs pero al llegar a este blog me manda un error en el paso de AT+CIPSEND=83 me dice link is not valid, me imagino que el servidor (www.aprende-web.net) ya no está disponible
    • Na*****

      Na***** 29/08/2017 Responder

      Hola, el comando AT+CIPSEND=83 es para indicar el tamaño de la petición, en el comando anterior te tenía que haberte respondido con CONNECT sino es un error que ha arrastrado del comando anterior.
  • An***

    An*** 22/07/2017 Responder


    Hola, tengo un problema al hacer la petición http, aparece que se envió de manera correcta pero me muestra esto:

    +IPD,391:HTTP/1.1 408 Request Timeout

    Date: Sun, 23 Jul 2017 02:48:11 GMT

    Server: Apache

    Content-Length: 221

    Connection: close

    Content-Type: text/html; charset=iso-8859-1



    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

    <html><head>

    <title>408 Request Timeout</title>

    </head><body>

    <h1>Request Timeout</h1>

    <p>Server timeout waiting for the HTTP request from the client.</p>

    </body></html>



    OK

    CLOSED



    ******************

    y de hecho al conectame al host se cierra la conexión en menos de un minuto
    • Na*****

      Na***** 30/07/2017 Responder

      Hola Annie esa respuesta del servidor es porque la petición a superado el tiempo de espera del servidor, una razón es porque el servidor esta demasiado ocupado, para descartar escribe el link en el navegador si obtienes la misma respuesta es un problema del servidor. La segunda causa y la más común es porque la petición no se ha enviado completamente, esto porque no se ha calculado el tamaño correcto de la cadena de la petición o no se ha enviado los dos saltos de línea al final.
  • Al****

    Al**** 12/06/2017 Responder

    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 notificación al ESP8266, para que cambie la temperatura, cada vez que yo cambien un dato?

    Gracias
    • Na*****

      Na***** 30/06/2017 Responder

      Hola Alvaro, el caso que mencionas es una de las limitaciones al usar http, EL ESP8266 tendría que estar consultando cada cierto tiempo al servidor para ver si hay algún cambio.
  • Jo***

    Jo*** 21/05/2017 Responder

    Aquí tenéis mas ejemplos para el ESP8266
  • mi****

    mi**** 20/05/2017 Responder

    SerialESP8266.println("AT+CWJAP="Naylamp","hail_hydra"");
    no me compila cuando llega a esta linea

    inconsistent user-defined literal suffixes 'Naylamp' and 'hail_hydra' in string literal

    alguna solución?
    • Na*****

      Na***** 31/05/2017 Responder

      Ya fue corregido, la línea escrita correctamente es:
      SerialESP8266.println("AT+CWJAP=\"nombre_de_red\"\,"contraseña\"");
    • mi*

      mi* 21/05/2017 Responder

      prueba la siguiente línea:
      SerialESP8266.println("AT+CWJAP="nombre_de_red","contraseña"");
      • Na*****

        Na***** 31/05/2017 Responder

        Ya fue corregido, la línea escrita correctamente es:
        SerialESP8266.println("AT+CWJAP=\"nombre_de_red\"\,"contraseña\"");
      • Na*****

        Na***** 31/05/2017 Responder

        Ya fue corregido, la línea escrita correctamente es:
        SerialESP8266.println("AT+CWJAP=\"nombre_de_red\"\,"contraseña\"");
  • Al**

    Al** 09/05/2017 Responder

    Hola. He conseguido que el programa del arduino me funcione y la respuesta del monitor serial coincide. El problema es que en la página web no se me actualizan los valores que he enviado. Alguien conoce alguna solución?
    Gracias de antemano.
    • xi*

      xi* 16/06/2018 Responder

      A mi me esa pasando eso, en el monitor serial si me aparecee el valor y las etiquetas HTML pero en mi pagina del navegador no aparece nda.....
  • Se****

    Se**** 03/04/2017 Responder

    Hola, gracias por los dos tutoriales, están muy bien. He logrado ambas partes, crear un server y recibir datos ok y por otro lado también 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 estación me va, pero para el otro no y como estación me pasa lo mismo. De un modo rudimentario pensé que podría encapsular ambas configuraciones por separado y en función 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.
    • Na*****

      Na***** 09/04/2017 Responder


      Hola Sergio, en ambos tutoriales se usa el ESP8266 como estación (AT+CWMODE=1) de esta forma el ESP8266 es el que se conecta a una red wifi, de lo contrario seria AP (AT+CWMODE=2) y tendríamos que configurar un clave y psw para que otros dispositivos se conecten a la red wifi que el ESP8266 ha creado.

      Si te vas a comunicar con un servidor, entonces tienes que usar el tutorial actual, de esta forma puedes tanto enviar como recibir datos del servidor, para enviar datos es tal cual se explica en el tutorial, para recibir datos es de igual forma, tienes que enviar una consulta al servidor y el servidor te debe enviar los datos como respuesta en este caso tu tendrías que procesar la respuesta para obtener los datos.

  • Iñ****

    Iñ**** 27/03/2017 Responder

    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);
    • Na*****

      Na***** 09/04/2017 Responder

      Hola, estás usando la variable idmlg en lugar de la variable id, también estás interpretando mal la función indexOf(), ésta no te devuelve el numero en la cadena sino te devuelve la posición a partir de donde está la cadena que le ingresas como parámetro, para obtener la poción del número tendrías que sumarle 7 (tamaño de "/idmlg="), una vez conocido la posición a partir de donde está el número, puedes usar substring() para extraer el número, pero este aun seguirá siendo un string, tendrás que usar toInt() para convertirlo en un número.
  • ju*********

    ju********* 10/03/2017 Responder

    Compañeros tengo un problema con el ESP8266 .. al llevar un aproximado de 5 horas en linea .. la ip se vuelve inaccesible .. alguna idea de porque pasa esto o como corregirlo ??
    • Na*****

      Na***** 25/03/2017 Responder

      Posiblemente sea por ruido en la fuente o desbordamiento de variables, un reseteo debería solucionar esto, podrías implementar también un reset desde programa cada cierto tiempo. Podría ser también problemas con la conexión, intenta probar en otra red, o acercarte más para recibir una mejor señal.
  • Go***** ***vo

    Go***** ***vo 20/02/2017 Responder

    Hola, haciendo las pruebas para hacer consultas al servidor usando los comandos AT tengo el siguiente problema al intentar conectar al servidor:
    Envío
    AT+CIPSTART="TCP","www.aprende-web.net",80

    y recibo como respuesta:
    DNS Fail
    Gracias de antemano.
    ERROR
    • Na*****

      Na***** 25/03/2017 Responder

      Hola Gonzalo, posiblemente no se haya conectado correctamente al wifi o la red no tenga acceso a internet, para descartar, prueba en otra red o en una generada con el AP de tu celular.
  • Go***** ***vo

    Go***** ***vo 20/02/2017 Responder


    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



    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>

    <title>408 Request Timeout</title>

    </head><body>

    <h1>Request Timeout</h1>

    <p>Server timeout waiting for the HTTP request from the client.</p>

    </body></html>

    CLOSED
    • He****

      He**** 23/02/2017 Responder

      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 carácter por carácter 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.
  • ri*****

    ri***** 19/02/2017 Responder

    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
  • Go***** ***vo

    Go***** ***vo 14/02/2017 Responder

    Estimado:
    Una consulta con respecto a la ultima parte (3. Arduino como cliente web usando ESP8266)
    ¿Sabes si existe alguna complicación en el caso de que el hosting de la pagina web sea gratis?
    Saludos de antemano!
    • Na*****

      Na***** 18/02/2017 Responder

      Hola Gonzalo, No debería haber problemas con usar un servidor gratuito, en caso sea lento y demore la respuesta debes de aumentar el tiempo de espera.
  • jo***

    jo*** 02/01/2017 Responder

    Comparto un adaptador DIP para el ESP12E
    (ideal para pruebas en protoboard)


    https://mega.nz/#!9UkAyBRa!Jyji4riXKnQK3LbNtU03Zv7CqWEkQQkiyFXeOJjicNc
    http://www.mediafire.com/file/7l7t7l48fx6hnd3/esp12E-adap.brd
    • jo***

      jo*** 02/01/2017 Responder

      el pcb está en Eagle
  • Se*******

    Se******* 11/12/2016 Responder

    Saludos, estoy realizando los montajes y quisiera saber si es posible programar simultáneamente un webserver para controlar unos leds y acceder a información de sensores en una web local y a la vez que envíe datos de los sensores y estados de los leds en una pagina del tipo Thingspeak. Me gustaría alguna pista o algún enlace para ver si puedo usar mi arduino uno con esp8266 con las dos Funcionalidades. Gracias y saludos.
    • Li****

      Li**** 16/07/2017 Responder

      hola, Sergiotas pudiste solucionar tu duda me pasa lo mismo con un sensor de temperatura
      • es******

        es****** 17/10/2018 Responder

        hola, pudiste solucionarlo? tengo el mismo problema pero con un sensor de humedad de suelo yl-69 y el dht22
    • Na*****

      Na***** 14/12/2016 Responder

      Hola, podrías programar que en un momento trabaje como servidor por ejemplo para hacer configuración y ver información y después trabajar como como cliente. Pero si lo usas como clientes mejor que el usuario acceda al servidor externo que es en donde ya están tus datos.
  • Lu** *****do

    Lu** *****do 24/10/2016 Responder

    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.
    • xi*

      xi* 16/06/2018 Responder

      como lo hiciste??? a mi no me muestra nmada en mi pagina web...
  • Ma*** ***** ******* ***an

    Ma*** ***** ******* ***an 12/10/2016 Responder

    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 tendría que configurar algo en la parte del servidor si me pudieran ayudar les agradeseria muchísimo. gracias de antemano.
    • MA*****

      MA***** 07/12/2018 Responder

      Hola /! seguí el ejemplo, únicamente modifique la red a la que estoy conectada y mi respuesta en el monitor serial es"Error ESP8266"," NO SE HA PODIDO CONECTAR CON EL SERVIDOR" ...Alguna sugerencia?
      • Le******

        Le****** 11/12/2019 Responder

        Hola. Probá desactivando el antivirus.
      • An****

        An**** 13/10/2019 Responder

        Cambiaste el tamaño de solicitud que enviaste?
    • Na*****

      Na***** 14/10/2016 Responder

      Hola marlo, hasta que paso logra comunicarse con tu servidor, en nuestro ejemplo primero se conecta al servidor (verifica que pase esto) después envía la petición (verifica también que logre enviar la petición) y finalmente espera la respuesta, Si no tienes ninguna respuesta aumenta el tiempo de espera, puede ser que el servidor demore en responder.
Dejar un comentario
Deja su comentario

Menú

Ajustes

Crear una cuenta gratuita para usar listas de deseos.

Registrarse