Hacer petición HTTP con ESP8266

En este post sobre la tarjeta NodeMCU ESP8266 te mostraré cómo hacer una petición HTTP a un servidor web. Esto servirá para, por ejemplo, enviar datos de un sensor a un servidor web propio.

En este ejemplo te voy a mostrar cómo enviar datos desde una ESP8266 a un servidor Apache con PHP, pues es de las pilas de desarrollo más usadas, pero recuerda que podrías hacer esto con cualquier lenguaje por ejemplo usando Python y Flask o Go, etcétera.

Veamos entonces cómo comunicar la tarjeta con nuestro servidor, pues la misma ya tiene conexión WiFi así que podemos conectarla fácilmente.  Vamos a hacer que nuestra ESP8266 sea un cliente HTTP, pues anteriormente ya vimos cómo hacer que sea un servidor.

Preparando el código del servidor

Como lo dije, vamos a usar PHP y Apache así que debes configurar tu entorno ya sea en Windows o Linux.

Lo que haremos será recibir los valores que nos va a enviar la tarjeta. El primer ejemplo es con GET:

Como puedes ver, estamos recibiendo los valores por GET y guardándolos en un archivo con la función file_put_contents. Además, estamos respondiendo con la fecha y hora actual.

En este caso tú podrías guardar los valores en una base de datos o responder al cliente NodeMCU ESP8266 con otros valores ya sea sacados de una base de datos o de un archivo.

También existe otro ejemplo en donde se usa JSON y se hace una petición POST desde la tarjeta. Para ello el código queda así:

De este modo nuestro servidor queda preparado. Por cierto, es importante que conozcas la IP de tu computadora dentro de tu red local en caso de que no subas tu proyecto a internet. También es necesario que tengas una red WiFi pues a ella se conectará la tarjeta.

En mi caso mi IP es 192.168.1.77 y he montado el proyecto en la carpeta llamada esp8266_api.

Librerías necesarias

En este caso necesitamos la librería WifiManager de tzapu y también la librería ESP8266HTTPClient de Markus Sattler que ya viene preinstalada.

Hacer petición GET con ESP8266

Cliente HTTP con ESP8266 – Petición GET a PHP

Veamos cómo hacer una petición GET. En este caso vamos a usar el Serial para depurar, pero en la práctica puede que quieras deshabilitarlo y eliminar todas las llamadas al mismo.

Iniciamos el Serial y también el WiFi. Luego iniciamos un cliente HTTP e invocamos al método GET. Fíjate en la URL pues a través de ella estamos enviando los valores:

La petición está en la línea 75, y la declaración de los valores está en la línea 68. Además, si la petición es correcta imprimimos lo que el servidor haya respondido en la línea 83.

Esto es importante de mencionar porque si por ejemplo quieres realizar cierta acción en la tarjeta (encender un LED, imprimir en una LCD, etcétera) puedes comparar esta respuesta del payload para realizar determinada acción.

Petición HTTP POST con ESP8266

Ahora veamos cómo hacer una petición POST. En este caso enviaremos un JSON codificado, pero lo vamos a codificar a mano. Yo te recomiendo que si los datos no son sensibles, los envíes por GET.

De igual modo estoy seguro de que ya debe haber una librería para codificar a JSON en C++ específicamente para esta tarjeta, pero para ahorrar cosas vamos a codificar “a mano”.

El código completo queda como se ve a continuación, lo único que cambia es que ya no enviamos los valores en la URL y que invocamos a http.post pasándole los valores JSON, en lugar de http.get.

El envío de datos está en la línea 79; como lo dije, puede que sea un poco complejo de entender pero es para evitar incluir librerías de codificación a JSON.

Al hacer la petición vemos que igualmente se están guardando los datos, solo que ahora no necesitamos codificarlos para una URL.

Recuerda que con JSON podemos codificar más que una simple cadena, podemos enviar un arreglo, un objeto dentro de un objeto, números, etcétera.

Poniendo todo junto

El código completo lo dejaré en GitHub. Recuerda que el del servidor lo debes colocar en htdocs o en /var/www/public_html dependiendo de tu sistema operativo e instalación.

Más adelante traeré otros ejemplos de esta tarjeta, mientras tanto te dejo más sobre programación en ESP8266, Electrónica y PHP.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

3 comentarios en “Hacer petición HTTP con ESP8266”

Dejar un comentario