Nota

¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirse?

  • Soporte Experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances Exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y adelantos exclusivos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones Festivas y Sorteos: Participa en sorteos y promociones festivas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

Pantalla WeatherTime

Este sketch se conecta a una red WiFi, obtiene datos meteorológicos de OpenWeatherMap cada minuto, recupera la hora actual de un servidor NTP y muestra el día, la hora y la información meteorológica en una pantalla OLED.

Componentes Requeridos

En este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

Ítems en este Kit

Enlace

Elite Explorer Kit

300+

Elite Explorer Kit

También puedes comprarlos por separado desde los enlaces a continuación.

Introducción del Componente

Enlace de Compra

Arduino Uno R4 WiFi

-

Cables de Puente

COMPRAR

Módulo de Pantalla OLED

COMPRAR

Conexiones

../_images/06_weather_oled_bb.png

Esquemático

../_images/06_weather_oled_schematic.png

OpenWeather

Obten las claves API de OpenWeather

OpenWeather es un servicio en línea, propiedad de OpenWeather Ltd, que proporciona datos meteorológicos globales a través de API, incluyendo datos meteorológicos actuales, pronósticos, ahora y datos meteorológicos históricos para cualquier ubicación geográfica.

  1. Visita OpenWeather para iniciar sesión/crear una cuenta.

    ../_images/06_owm_1.png
  2. Haz clic en la página de API desde la barra de navegación.

    ../_images/06_owm_2.png
  3. Encuentra Current Weather Data y haz clic en Suscribirse.

    ../_images/06_owm_3.png
  4. Bajo Current weather and forecasts collection, suscríbete al servicio apropiado. En nuestro proyecto, la opción Gratis es suficiente.

    ../_images/06_owm_4.png
  5. Copia la clave de la página de API keys.

    ../_images/06_owm_5.png
  6. Copia la clave en arduino_secrets.h.

    #define SECRET_SSID "<SSID>"        // tu SSID de red (nombre)
    #define SECRET_PASS "<PASSWORD>"        // tu contraseña de red
    #define API_KEY "<OpenWeather_API_KEY>"
    #define LOCATION "<YOUR CITY>"
    
  7. Establece la zona horaria de tu ubicación.

    Tomando como ejemplo la capital de Suecia, Estocolmo, busca «stockholm timezone» en Google.

    ../_images/06_weather_oled_01.png

    En los resultados de búsqueda, verás «GMT+1», por lo que debes establecer el parámetro de la función a continuación en 3600 * 1 segundos.

    timeClient.setTimeOffset(3600 * 1);  // Ajusta según tu zona horaria (esto es +1 hora)
    

Instalar la Biblioteca

Para instalar la biblioteca, utiliza el Administrador de Bibliotecas de Arduino y busca «ArduinoMqttClient», «FastLED», «Adafruit GFX» y «Adafruit SSD1306» e instálalas.

ArduinoJson.h: Usada para manejar datos JSON (datos obtenidos de openweathermap).

NTPClient.h: Usada para obtener la hora en tiempo real.

Adafruit_GFX.h, Adafruit_SSD1306.h: Usadas para el módulo OLED.

Ejecutar el Código

Nota

  • Puedes abrir el archivo 06_weather_oled.ino bajo la ruta elite-explorer-kit-main\iot_project\06_weather_oled directamente.

  • O copia este código en el IDE de Arduino.

Nota

En el código, SSID y contraseña se almacenan en arduino_secrets.h. Antes de subir este ejemplo, necesitas modificarlos con tus propias credenciales de WiFi. Adicionalmente, por motivos de seguridad, asegúrate de mantener esta información confidencial al compartir o almacenar el código.

¿Cómo funciona?

  1. Bibliotecas y Definiciones:

    1. WiFiS3.h: Probablemente una biblioteca específica para un módulo WiFi o placa para gestionar las conexiones WiFi.

    2. ArduinoJson.h: Esta biblioteca se utiliza para decodificar (y codificar) datos JSON.

    3. arduino_secrets.h: Un archivo separado donde se almacenan datos sensibles (como credenciales de WiFi). Es una buena práctica mantener las credenciales fuera del código principal.

    4. NTPClient & WiFiUdp: Se utilizan para obtener la hora actual de un servidor NTP (Network Time Protocol).

    5. Bibliotecas de Adafruit: Usadas para gestionar la pantalla OLED.

    6. Varias variables globales: Incluyen credenciales de WiFi, detalles del servidor y más, que se utilizarán en todo el script.

  2. setup():

    1. Inicializa la comunicación serial.

    2. Verifica y muestra la versión del firmware del módulo WiFi.

    3. Intenta conectarse a la red WiFi utilizando el SSID y la contraseña proporcionados.

    4. Muestra el estado del WiFi conectado (SSID, IP, intensidad de señal).

    5. Inicializa la pantalla OLED.

    6. Inicia el cliente NTP para obtener la hora actual y establece un desfase horario (en este caso, 1 hora, que podría corresponder a una zona horaria específica).

  3. read_response():

    1. Lee la respuesta del servidor, buscando específicamente datos JSON (denotedos por { y }).

    2. Si se encuentran datos JSON, se decodifican para extraer detalles meteorológicos como temperatura, humedad, presión, velocidad del viento y dirección del viento.

    3. Llama a la función displayWeatherData para mostrar la información meteorológica en la pantalla OLED.

  4. httpRequest():

    1. Cierra cualquier conexión existente para asegurar que el socket del módulo WiFi esté libre.

    2. Intenta conectarse al servidor de OpenWeatherMap.

    3. Si se conecta, envía una solicitud HTTP GET para obtener los datos meteorológicos de una ubicación específica definida por LOCATION (probablemente definida en arduino_secrets.h o en otro lugar).

    4. Registra la hora en que se hizo la solicitud.

  5. loop():

    1. Llama a la función read_response para procesar cualquier dato entrante del servidor.

    2. Actualiza la hora desde el servidor NTP.

    3. Verifica si es momento de hacer otra solicitud al servidor meteorológico (basado en postingInterval). Si es así, llama a la función httpRequest.

  6. printWifiStatus():

    1. El SSID de la red conectada.

    2. La dirección IP local de la placa.

    3. La intensidad de la señal (RSSI).

  7. displayWeatherData():

    1. Borra la pantalla OLED.

    2. Muestra el día de la semana actual.

    3. Muestra la hora actual en formato HH:MM.

    4. Muestra los datos meteorológicos proporcionados (temperatura, humedad, presión y velocidad del viento).