Recibiendo Json por medio de HTTP y MQTT ESP8266

Hola a todos 馃榾

Siguiendo con temas de Internet de las cosas esta vez veremos como acceder a un API de datos meteorol贸gicos que nos devuelve un Json para posteriormente usarlo en nuestras aplicaciones. Todo esto es controlado mediante MQTT es decir todos los estados los recibiremos en nuestro broker :D.

MQTT

Es un protocolo de publicaci贸n suscripci贸n desarrollado por IBM 聽y trabaja de la siguiente manera.

Tenemos un sensor o dispositivo conectado a un broker MQTT esto viaja por internet o puede ser un broker local, este dispositivo esta publicando datos cada cierto tiempo.

Luego est谩n los dispositivos suscritos a un tema o topico especifico que reciben la informaci贸n que viene desde el broker.

El broker es una especie de cartelera de anuncios donde los dispositivos suscritos聽van a buscar el ultimo dato publicado en un t贸pico o tema especifico y donde los publicadores env铆an la informaci贸n tambi茅n con un t贸pico especifico.

image003
foto por: sofia2.com

Sofia2.com tiene una muy buena introducci贸n sobre este protocolo 馃榾 les dejo el link.

Lo que necesitamos para empezar:

  • Broker MQTT.
  • Api del clima
  • ESP8266 o nodemcu
  • Arduino IDE con ESP8266 instalado

Broker MQTT

Como broker vamos a utilizar CloudMQTT.

deepinscreenshot20161013222230

Vamos a Plans

deepinscreenshot20161013222305

Escogemos el gatito :D, si lo queremos gratis jaja.

deepinscreenshot20161013222324

Le proporcionamos un correo electr贸nico para poder crear nuestra cuenta 馃檪

deepinscreenshot20161013223043

Con la cuenta creada vamos a crear una nueva instancia

deepinscreenshot20161013222410

Le ponemos un nombre, escogemos el centro de datos mas cercano y el plan en este caso cute cat para que sea gratis. click en crear.

deepinscreenshot20161013222545

Felicidades, han creado su primer broker MQTT online.

Vamos a la parte de detalles y nos mostrara los datos que vamos a poner en nuestro c贸digo despu茅s.

deepinscreenshot20161013222555

Listo ya tenemos configurado el broker.

OpenWeatherMap

Es un sitio donde se puede acceder a datos meteorol贸gicos por medio de un API usando m茅todos get de HTTP.

Primero vamos a la webdeepinscreenshot20161013231319

click sign up, para registrarnos.

deepinscreenshot20161013231329

Crear cuenta.

deepinscreenshot20161013231336

llenamos los datos.

Cuando recibamos el correo vamos a tener que llenar mas par谩metros, como en la siguiente imagen.

deepinscreenshot20161013231428

click en API keys, esto es lo que nos dara acceso a la informaci贸n.

deepinscreenshot20161013231958

Ahora nos vamos a API en la parte superiordeepinscreenshot20161013232141

click en current weather data. Nos vamos a centrar en By city ID porque es la manera mas precisa y corta de saber el clima de ese lugar.

deepinscreenshot20161013232157

Ahora necesitamos saber el ID de nuestra ciudad le damos click al enlace que esta alli.

deepinscreenshot20161013232545

descargamos el Json city list, pesa casi 20 Mb, tiene la informaci贸n de 200,000 ciudades alrededor del mundo.

Cuando lo abramos ahora toca buscar el ID de la ciudad a la que queremos acceder.

Cuidado se puede trabar su sistema operativo son mas de 聽200,000 lineas as铆 que paciencia.

deepinscreenshot20161013232736

Ya identificado el ID de la ciudad y el Api key lo apuntamos en algun lugar, despu茅s nos va a servir.

Vamos a hacer una prueba el uso del API es el siguiente como muestra la documentaci贸n.

api.openweathermap.org/data/2.5/weather?id=CITYID&APPID=APIKEY

cambiamos los par谩metros cityID y APIKEY por los suyos y lo pegamos en el navegador. Nos devolver谩 un Json como el siguiente.

deepinscreenshot20161014000603

Esa es la informaci贸n que vamos a manejar en el ESP8266.

Instalando ESP8266 en Arduino IDE

Antes de meternos al c贸digo para los que no tengan instalado ya el 聽add-on de ESP8266 en arduino vamos a hacerlo.

Accedemos al github oficial donde tiene toda la documentaci贸n de como hacerlo 馃榾

deepinscreenshot20161013235136

deepinscreenshot20161013235146

Necesitamos esta linea para pegarla dentro del Arduino IDE. 聽http://arduino.esp8266.com/stable/package_esp8266com_index.json

Abrimos el IDE

deepinscreenshot20161013235208

vamos a archivo, preferencias.

 

Pegamos la URL en placas adicionales.deepinscreenshot20161013235235

ahora vamos a 聽herramientas, placa, administrador de placas.

deepinscreenshot20161013235259

Escribimos ESP e instalamos la version comunitaria

deepinscreenshot20161013235307

Tambien necesitamos algunas librerias

ArduinoJson聽y pubsubClient

vamos a Sketch, agregar libreria y manejar libreria alli ponemos ArduinoJson y Pubsubclient

Las instalamos y listo.

Listo ya tenemos todo preparado en la nube y en el IDE

Codigo 馃榾

Bueno si han llegado hasta esta parte felicidades. Ha sido un camino largo, pero ya queda poco.

Voy a explicar paso a paso que hace cada funcion del programa.

El codigo esta en mi github junto con otro monton de codigos jajaja.

Lo descargamos.

Abrimos el archivo y empezamos a modificar los parametros con los que tenemos en nuestro broker tiene que quedar igual, asi como el SSID y clave del wifi que vayamos a utilizar. Le ponemos un nombre al topico al que nos vamos a suscribir en MQTT_TopicSub y otro topico al cual vamos a publicar que estamos conectados en MQTT_topicAlive.

Esto es lo unico que debemos modificar.

deepinscreenshot20161014002601

Siguiendo con el codigo.

Setup wifi es una funcion que nos conecta con las constantes que definimos arriba, mientras intenta conectarse imprime en pantalla un punto ‘.’, y cuando se conecta 聽imprime la IP local :D.

deepinscreenshot20161014002707

Callback es una funci贸n que recibe la informaci贸n del broker MQTT en este caso del t贸pico al que estamos suscritos y la informaci贸n en este caso una URL, la env铆a a httpRequest.

deepinscreenshot20161014002721

HttpRequest es una funci贸n que recibe un dato tipo String en este caso una URL hace la conexi贸n por medio de HTTP, si la conexi贸n fue satisfactoria publica en el topico httprequest los datos http ok y pasa la informaci贸n obtenida a parseJson, sino env铆a al t贸pico httpRequest un fail y termina la conexi贸n. Todo esto se env铆a a la nube para que luego solamente se vuelva a recibir la URL en caso de que haya sido mal escrita o cualquier otra cosa.

deepinscreenshot20161014002820

Publisher es una funci贸n la cual recibe el mensaje y el topico al cual publicar. verifica si estamos conectados y sino pues ejecuta la reconexion. deepinscreenshot20161014002836

parseJson es una funcion que recibe un String en formato Json si este no es Json publica al topico JsonStatus el error y si lo fuera publica un ok al mismo topico y luego lo imprime en pantalla.

deepinscreenshot20161014002851

Reconnect como su nombre lo dice se encarga de reconectar nuestro Esp8266 al broker mqtt del cual recibe y envia informacion tambien se suscribe de nuevo al topico de suscripcion. sino cada 5 segundos trata de conectarse.

deepinscreenshot20161014002911

Void setup se encarga de configurar todo para que funcione 馃榾
En este caso la comunicacion serial, la conexion al wifi, conexion mqtt, establecer el callback para cuando reciba informacion.

deepinscreenshot20161014002920

y la parte final y mas importante el void loop que es lo que se ejecuta infinitamente.
Solamente verifica que estemos conectados y sino nos reconecta.

deepinscreenshot20161014002930

Ahora escogemos la placa en herramientas, placa y dependiendo de cual modelo tengamos ese elegimos asi como el puerto y pues subimos nuestro codigo y no nos queda mas que abrir nuestro monitor serial en 115200 baudios para ver que es lo que pasa.

Estamos conectados 馃榾

vamos a mqttclud nos metemos a websockets UI 聽y verificamos que este enviando los datos

deepinscreenshot20161014005955

y pues ya estamos publicando datos por MQTT 馃榾

Ahora el momento de la verdad.
En Send message escribimos el topico en mi caso es URLin y en el mensaje escribimos la URL del API.

deepinscreenshot20161014010336

Presionamos Enviar

deepinscreenshot20161014010736

y como vemos ya tenemos acceso al Json que nos envia de vuelta el API 馃榾

En teor铆a debe de funcionar con cualquier api que funcione de esta misma manera asi que queda en ustedes probarla y cualquier inconveniente no duden en comentarlo 馃榾

Si necesitan mas informaci贸n estan las paginas de las librerias y la caja de comentarios 馃榾

Esto ha sido todo por esta ocasi贸n no olviden compartir el conocimiento.
Nos leemos otro d铆a.

Microf off 馃榾

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesi贸n:

Logo de WordPress.com

Est谩s comentando usando tu cuenta de WordPress.com. Cerrar sesi贸n /  Cambiar )

Google photo

Est谩s comentando usando tu cuenta de Google. Cerrar sesi贸n /  Cambiar )

Imagen de Twitter

Est谩s comentando usando tu cuenta de Twitter. Cerrar sesi贸n /  Cambiar )

Foto de Facebook

Est谩s comentando usando tu cuenta de Facebook. Cerrar sesi贸n /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: