electrónica

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:

See the gist on github.

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í:

See the gist on github.

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:

See the gist on github.

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.

See the gist on github.

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Solución: Unable to extract uploader id con youtube-dl

En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…

10 horas hace

Enviar foto a Telegram usando cURL y Bot

Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…

10 horas hace

cURL y Telegram: enviar mensaje a Bot

En un post previo te enseñé a enviar un mensaje en nombre de un Bot…

13 horas hace

Impresora térmica con Telegram usando Bot

En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…

17 horas hace

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

5 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

5 días hace

Esta web usa cookies.