Cómo hacer un reloj de Internet usando ESP8266

El Internet de las cosas (IoT) ofrece varias aplicaciones interesantes, incluido un reloj de Internet. Este dispositivo de cronometraje utiliza una conexión a Internet para sincronizar la hora con un servidor de hora. Esto garantiza un cronometraje muy preciso, alineado con el tiempo universal coordinado (UTC) de los servidores en línea.

La mayoría de los relojes de Internet utilizan NTP, un protocolo diseñado para sincronizar relojes en una red. Los relojes de Internet mantienen una alta precisión al sincronizarse con relojes atómicos o la hora del GPS. Estos relojes también se ajustan automáticamente a la zona horaria correcta según su ubicación de red.

En este proyecto, diseñaremos un reloj de Internet usando ESP8266. El reloj obtiene la información sobre la hora y el clima de WeatherAPI.com y la muestra en una pantalla OLED SSD1306. Se puede utilizar cualquier pantalla, como una de mayor tamaño, para mostrar el reloj.

Componentes

1ESP8266 /ESP32x1
2. SSD1306 OLEDx1
3. Cables de conexión o Dupont
4. cable microUSB para conectar ESP a la computadora
5. Fuente de alimentación para ESP8266/ESP32

Conexiones de circuito
Para este proyecto, necesitará conectar el ESP8266 o ESP32 con un SSD1306 OLED. Estamos construyendo nuestro proyecto usando ESP8266. La pantalla OLED SSD1306 es un módulo OLED de 7 pines con interfaces SPI e I2C. En la imagen de abajo se muestra un OLED de 0,96 ″.

Para interconectar el SSD1306 OLED con el ESP8266, realice las conexiones del circuito como se describe en la siguiente tabla.

Recuerde reemplazar el SSID y la clave de red en el boceto con los de su conexión WiFi personal. Además, reemplace la clave API con la suya de WeatherAPI.com (que puede obtener registrándose allí).

Cómo funciona este proyecto
Se requiere un microcontrolador con capacidades Ethernet o WiFi (integrado o mediante un escudo externo o placa de conexión) para construir este reloj de Internet.

Usamos ESP8266 para construir nuestro reloj, que tiene funcionalidad WiFi, por lo que se conecta fácilmente a cualquier red. Cuando el ESP8266 está encendido, se conecta a WiFi utilizando el SSID y la contraseña de red proporcionados. Luego realiza una solicitud HTTP a WeatherAPI.com para obtener los datos JSON de la API en tiempo real.

Los datos JSON recibidos se deserializan y se recuperan datos específicos de fecha, hora, ubicación y clima. Estos datos se formatean y se muestran en la pantalla OLED en una plantilla definida por el usuario.

Código
El boceto comienza importando las bibliotecas ESP8266WiFi.h, ESP8266HTTPClient.h, ArduinoJson.h, SPI.h, Wire.h, Adafruit_GFX.h y Adafruit_SSD1306.h.

A continuación se muestra un resumen de cada proceso:

  • ESP8266WiFi.h se utiliza para conectar ESP8266 a la red WiFi.
  • ESP8266HTTPClient.h realiza solicitudes HTTP desde ESP8266 al servidor web, que es WeatherAPI.com.
  • ArduinoJson.h analiza y deserializa los datos JSON recibidos de la API WeatherAPI Realtime.
  • SPI.h y Wire.h se utilizan para interconectar el SSD1306 OLED con el ESP8266.
  • Las bibliotecas Adafruit_GFX.h y Adafruit_SSD1306.h administran la pantalla OLED SSD1306.

A continuación, se declaran variables para las asignaciones de pines que conectan el ESP8266 con el SSD1306 OLED. Se crea una instancia de un objeto de "visualización" de la clase Adafruit_SSD1306. Se declaran variables para almacenar el SSID, la contraseña de la red WiFi y la clave API de WeatherAPI.com. Luego se declaran algunas variables globales para almacenar la temperatura, la humedad, la velocidad del viento, la precipitación, la fecha, la hora, la fecha formateada, la hora formateada y el día de la semana.

Luego, la función definida por el usuario dayOfWeek se define para derivar el día de la semana a partir de la fecha del calendario gregoriano utilizando el algoritmo de congruencia de Zeller. La función definida por el usuario fetchData también está definida para que se realice la solicitud HTTP a la API WeatherAPI Realtime y los datos se reciban como un documento JSON.

La función definida por el usuario parseData deserializa los datos JSON, extrayendo la fecha, hora, ubicación, temperatura, humedad, velocidad del viento, precipitación y condiciones climáticas en las variables respectivas. La fecha, hora, ubicación y información meteorológica se convierten a los formatos adecuados para su visualización.

La función definida por el usuario displayClock coloca la fecha, hora, ubicación e información meteorológica en el SSD1306 OLED en un diseño predefinido. Es importante tener en cuenta que el programa en fetchData está codificado para que ESP8266 recupere datos de la API en tiempo real mediante una búsqueda de IP. El reloj detecta automáticamente la ubicación actual y recupera la fecha, hora, ubicación e información meteorológica en tiempo real según la ubicación.

En la función de configuración, la placa ESP8266 se conecta a la red WiFi y se inicializa la pantalla OLED SSD1306. En la función de bucle, se llama a fetchData para recuperar la fecha, hora, ubicación y información meteorológica según la búsqueda de IP. Luego, esto se muestra en la pantalla OLED llamando a la función displayClock.

Se proporciona un retraso de cinco segundos antes de que se actualice el reloj. Es posible que el reloj tarde más en actualizar la fecha, la hora y otra información según la conectividad de la red y el tiempo de respuesta del servidor WeatherAPI.

Resultados

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.