Al crear un proyecto de IoT que depende de la hora del día, desea que muestre la hora correcta sin necesidad de ajustes manuales. Parecería que esto sería fácil de lograr con el ESP32 ya que tiene conexión inalámbrica incorporada y puede conectarse a Internet.

Sin embargo, si bien hay muchos ejemplos en línea que muestran cómo configurar el ESP32 para conectarse a Internet y sincronizar la hora con una hora servidor, la mayoría de ellos requieren que ajuste manualmente el horario de verano dos veces al año, lo que parece bastante ridículo para cualquier dispositivo electrónico del siglo XXI. dispositivo.

Aquí le presentaremos una solución que permitirá que el ESP32 muestre la hora correcta, para cualquier lugar del mundo, durante todo el año. Pero primero, echemos un vistazo al ejemplo SimpleTime en el IDE de Arduino y veamos qué hace y cómo podemos mejorarlo.

El ejemplo de tiempo simple

Si usa el IDE de Arduino con el ESP32, encontrará que tiene un ejemplo llamado tiemposimple que se parece a esto:

instagram viewer

Puede acceder a este ejemplo configurando el IDE de Arduino para usar una placa ESP32, desde el Instrumentos menú, como seleccionando el Módulo de desarrollo ESP32. Una vez que lo hayas hecho, puedes acceder al ejemplo de SimpleTime desde la Instrumentos menú debajo Ejemplos,ESP32,Hora, y tiempo sencillo.

Uno podría esperar que este ejemplo oficial demuestre la mejor manera de hacer las cosas, pero hay un gran problema en este ejemplo. Para configurar la zona horaria y el horario de verano, debe cambiar las dos líneas siguientes:

const larga gmtOffset_sec = 3600;
const int luz del díaOffset_sec = 3600;

Configuración de la zona horaria mediante gmtOffset_sec es inconveniente porque tiene que encontrar la compensación GMT para su ubicación particular. Puede hacerlo consultando el Sitio web de la hora del meridiano de Greenwich. Afortunadamente, solo necesitas hacer esto una vez. El luz del díaOffset_sec Sin embargo, presenta un problema mayor, ya que es necesario ajustarlo dos veces al año. Esto puede requerir que elimine su proyecto y lo conecte al IDE de Arduino dos veces al año, lo que lo hace completamente inapropiado para un proyecto de IoT que desea configurar y olvidar.

Buscando un mejor enfoque

Entonces, ¿cuál sería una mejor manera de configurar la zona horaria y el horario de verano? Para responder a esta pregunta, no busque más allá de cómo su PC con Windows maneja la situación:

Observe cómo, en lugar de tener que darle diferencias horarias con respecto a GMT, le decimos a Windows cuál es nuestra zona horaria y ubicación, en nuestro caso. Hora de la montaña (EE. UU. y Canadá)—y luego marque la casilla de verificación Ajuste automáticamente el reloj para el horario de verano. A partir de ese momento, Windows lo maneja automáticamente durante todo el año. Este es el tipo de comodidad que queremos de nuestro ESP32.

Relacionado: Cómo personalizar el reloj de la bandeja del sistema en Windows

Creación de una base de datos de ubicación para el ESP32

Hacer lo mismo en el ESP32 requiere algo de trabajo preliminar. empezamos con un entrada en el blog que describía cómo configurar la zona horaria usando la variable de entorno TZ. Para nuestra ubicación, resultó ser MST7MDT, M3.2.0, M11.1.0, de acuerdo a esto tabla de zonas horarias. Si bien esto resolvió el problema de tener que ajustar manualmente el horario de verano, queríamos el proceso sea más sencillo, sin necesidad de buscar una cadena de números y letras para cada ubicación.

Convertimos los datos del sitio web en una base de datos que puede usar directamente desde sus bocetos de Arduino. Seguir este enlace para descargar directamente un archivo zip con el boceto de Arduino.

La base de datos en sí se almacena en el archivo. time_zone.h. Usando la base de datos, el código para SimpleTime se ve así:

Hemos resaltado las modificaciones al ejemplo de SimpleTime en amarillo. Esta línea permitirá que el boceto use la base de datos:

#include "time_zones.h"

Esta línea configura tu ubicación:

const char* ubicación = "América/Denver";

Hay 461 ubicaciones posibles. Puede encontrar las ubicaciones disponibles echando un vistazo a la time_zone.h o consultando la lista de zonas horarias en este sitio web.

Finalmente, la siguiente línea le dice al ESP32 que sincronice la hora con un servidor de Internet usando el Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (ubicación), ntpServer);

El servidor de tiempo de Internet en particular se puede configurar usando la siguiente línea, aunque el valor predeterminado debería funcionar bien para usted:

const char* ntpServer = "pool.ntp.org";

También querrá asegurarse de agregar la información de su punto de acceso inalámbrico en las siguientes dos líneas:

const char* ssid = "SU_SSID";
const char* contraseña = "TU_CONTRASEÑA";

Reemplazar TU_SSID con el nombre de su red inalámbrica y TU PASE con la contraseña utilizada para conectarse a él.

Relacionado: Formas de configurar de forma segura un enrutador inalámbrico como punto de acceso público

Terminando

Una vez que haya completado los pasos de configuración, cargue el boceto en el ESP32 y utilizará la hora correcta durante todo el año sin ninguna intervención.

Si bien este código le brinda un buen punto de partida, existen formas más fáciles de usar para lograr lo mismo. Por ejemplo, es posible que desee permitir que el usuario configure todo desde una página web en lugar de hacerlo en tiempo de compilación. Hacerlo es un poco más de trabajo, ya que necesitaría hacer las siguientes cosas en su boceto de Arduino:

  1. Configure el ESP32 como un punto de acceso inalámbrico para la configuración inicial
  2. Inicie un servidor web para presentar al usuario una página de configuración
  3. Cree un formulario HTML para permitir que el usuario ingrese la información de la red inalámbrica y seleccione su ubicación
  4. Cree el código para procesar las elecciones del usuario y guárdelo en la memoria no volátil
  5. En el encendido de la placa:
    • Leer la configuración de la memoria no volátil
    • Conéctese a la red inalámbrica y sincronice la hora

Un proyecto que demuestra estos pasos es el Reloj ESP32 Dalí. Fue este proyecto el que nos llevó a encontrar una mejor manera de sincronizar el tiempo en el ESP32.

Crédito de la imagen: Marcio Teixeira/Flickr

Revisar la código fuente para el reloj ESP32 Dali para ver cómo mostrar una página de configuración web con todas las funciones. La página de configuración muestra un menú desplegable que permite al usuario seleccionar su ubicación y zona horaria y también permite que el usuario configure la hora manualmente usando un widget de tiempo y calendario, para un no conectado ¡alternativa!

Sincronización de tiempo de red basada en la ubicación en el ESP32

Ahora tiene toda la información que necesita para poder configurar automáticamente el reloj de su ESP32 a la hora correcta y también ajustarlo para el horario de verano. Esto es perfecto para proyectos de IoT que no desea tener que ajustar manualmente.

7 Proyectos Interesantes que Usan el ESP32 para Generar Video Compuesto

Si está buscando proyectos interesantes con ESP32, está en el lugar correcto.

Leer siguiente

CuotaPíoCorreo electrónico
Temas relacionados
  • bricolaje
  • ESP32
  • Internet de las Cosas
Sobre el Autor
marcio teixeira (4 artículos publicados)

Soy un creador con un interés especial en el software de código abierto, la electrónica, la impresión 3D, los gráficos por computadora y la retroinformática.

Más de Marcio Teixeira

Suscríbete a nuestro boletín

¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse