¿Es posible actualizar el clima en un dispositivo integrado o portátil sin interactuar con ningún sensor de temperatura o humedad? Con acceso al Internet de las cosas (IoT), los dispositivos pueden conectarse a una variedad de servicios web con la ayuda de API y extraer diversos conocimientos e información útil a través de simples solicitudes HTTP. En respuesta, los dispositivos reciben un encabezado HTTP o datos JSON (JavaScript Object Notation) que pueden interpretarse en el código del firmware para extraer información útil.
En este proyecto, diseñaremos una estación meteorológica sin sensores en ESP8266/ESP32 sin interfaz con un solo sensor. Podremos extraer varias actualizaciones meteorológicas útiles, como actualizaciones de temperatura, presión, humedad y velocidad del viento, para cualquier lugar del planeta.
Haremos todo esto accediendo al servicio web gratuito OpenWeatherMap, un servicio basado en suscripción que proporciona actualizaciones meteorológicas, datos meteorológicos históricos, pronósticos meteorológicos para análisis de riesgos viales y análisis agrícolas. Con una suscripción gratuita, puedes obtener actualizaciones del clima de cualquier ciudad del mundo. Después de registrarnos con la API, implementamos una solicitud HTTP a través del código MicroPython en ESP8266/ESP32 para obtener actualizaciones meteorológicas para una ciudad o ubicación específica. El código MicroPython se creó para extraer información específica de los datos JSON recibidos como respuesta de la plataforma OpenWeather. Entonces vamos a comenzar.
Componentes necesarios
- ESP8266/ESP32x1
- 1 cable micro USB.
Conexiones de circuito
Anteriormente, es posible que haya construido una estación meteorológica basada en MicroPython conectando un sensor de temperatura y/o humedad como la estación meteorológica MicroPython basada en DHT-11. Para construir esta estación meteorológica, literalmente no es necesario conectar ningún sensor a la placa ESP. Sólo necesitas tener MicroPython cargado en la placa ESP y tener un IDE como uPyCraft o Thonny listo para comenzar a codificar MicroPython. El resto se hará dentro del script MicroPython. La placa ESP debe tener acceso a Internet a través de una red WiFi.
Registro gratuito con OpenWeatherMap
En primer lugar, debe registrarse en la API OpenWeatherMap. Visite el siguiente enlace para registrarse: la página ofrece diferentes opciones y planes para utilizar el servicio OpenWeatherMap. Haga clic en la primera opción de registro.
Luego será redirigido al formulario "Crear nueva cuenta". Complete sus datos, seleccione las casillas de verificación correspondientes y haga clic en el botón "Crear cuenta".
Finalmente, verá una ventana emergente que le solicitará el nombre y el propósito de su empresa. Puede poner su propio nombre o el nombre de su organización y elegir educación/ciencia como su objetivo.
Se recibirá un correo electrónico de confirmación en la cuenta de correo electrónico registrada. Abra su cuenta de correo electrónico y revise su correo electrónico.
Cuando termine de verificar su cuenta de correo electrónico, será redirigido a la consola de OpenWeatherMap.
Obtenga la clave API
En la consola OpenWeatherMap, navegue hasta la pestaña "Claves API". Aquí ya verá una clave API generada con registro gratuito. Incluso puede crear más claves API para usar en diferentes dispositivos u obtener acceso a servicios basados en suscripción.
Dado que solo necesitamos actualizaciones meteorológicas diarias para una ubicación específica, la clave API para el registro gratuito es suficiente. La clave API es obligatoria para el acceso y la autenticación con la API OpenWeatherMap.
Llamada API a la API OpenWeatherMap
Para realizar una llamada API para obtener actualizaciones meteorológicas para una ubicación específica, debe invocar una solicitud HTTP a través de una URL HTTP. La llamada API tiene el siguiente formato.
llave}
Para obtener actualizaciones meteorológicas para su ubicación, solo necesita la latitud y longitud y la clave API. Puede encontrar la actualización meteorológica actual junto con las coordenadas geográficas de su ciudad buscando en el siguiente enlace:
Tenga en cuenta que el hemisferio sur está representado por latitudes negativas y el hemisferio occidental está representado por longitudes negativas. Por ejemplo, la latitud y longitud de San Francisco, EE. UU., es 37.7749N, 122.4194W. En la llamada API, la latitud será 37,7749, pero la longitud será -122,4194. Puede verificar la precisión de la llamada API reemplazando la latitud, longitud y clave API con la latitud y longitud de su ubicación y su clave API, respectivamente, y visitando el enlace en un navegador web. Se devolverá una respuesta que contiene datos JSON que representan la información meteorológica para una ubicación determinada, como se muestra en la imagen a continuación.
Lectura de datos JSON con MicroPython
Como puede ver, al realizar una llamada API para una ubicación específica, los datos meteorológicos se devuelven en formato JSON. JSON es el formato universal aceptado por las API web. En JSON, los datos se representan como pares de nombre/valor. El nombre y el valor están separados por dos puntos (:). Los pares de nombre/valor están separados por comas. Las matrices están entre corchetes ( ), mientras que los objetos están entre llaves ({}). MicroPython proporciona un módulo JSON integrado para extraer nombres y valores de datos JSON.
Módulo de urequests de MicroPython
La llamada API a OpenWeatherMap no es más que una solicitud HTTP a través de una URL HTTP. MicroPython proporciona un módulo urequests para realizar solicitudes HTTP en línea. Es posible que el módulo no esté integrado con el firmware MicroPython cargado en la placa ESP; en este caso, deberá cargar el módulo en la placa por separado. En uPyCraft IDE, navegue hasta Archivo->Nuevo. En el editor de código, pegue el siguiente código fuente de urequests.py.
Guarde el script como urequests.py y cárguelo en el tablero ESP haciendo clic en el botón "Descargar y ejecutar". Ahora el módulo urequests se ha cargado correctamente en la placa ESP.
Secuencia de comandos MicroPython
Elimine el código actual de Boot.py y copie el siguiente script en Boot.py.
Cargue el Boot.py actualizado a la placa ESP haciendo clic en el botón "Descargar y ejecutar". Recuerde reemplazar SSID y NETWORK_KEY con el SSID y la clave de red de su propia red WiFi. Además, reemplace {latitud}, {longitude} y {APIKey} con la latitud y longitud de su ubicación y su propia clave API recibida al registrarse.
Código
El código comienza importando los módulos MicroPython necesarios. El módulo urequests se importa para realizar solicitudes HTTP y el módulo UJSON se importa para interpretar datos JSON. La biblioteca de red se importa para conectarse a la red WiFi.
Luego, la conexión a una red WiFi se configura utilizando el SSID y la clave de red proporcionados. La placa ESP se configura en modo estación y la conexión a la red WiFi se inicia llamando al método station.connect. La conectividad a la red WiFi se verifica llamando a station.isconnected. Una vez que la tarjeta ESP se conecta exitosamente a una red WiFi, los parámetros de la red se imprimen en la consola IDE llamando al método station.ifconfig.
La URL HTTP para la llamada API a la API OpenWeatherMap se almacena en una variable "open_weather_map_url". La solicitud HTTP GET se inicia llamando al método request.get. La respuesta JSON de la llamada API se imprime en la consola. Finalmente, utilizando el método json .get, los valores específicos a los que se accede por sus nombres se extraen en diferentes variables y se imprimen en la consola IDE.
Resultado
Después de cargar y ejecutar Boot.py en la placa ESP, la actualización del clima para la ubicación elegida, incluida la temperatura, presión, humedad y velocidad del viento, se imprimirá en la consola como se muestra en la imagen a continuación.
\