Paso 2: Hora de verano
Así que este paso es bastante técnico y puede ser saltado si usted no está interesado:
Bueno, por lo que es una librería de Arduino escrita para manejar horario cambia:
https://github.com/JChristensen/TimeZone
Sin embargo, no compilar cuando se utiliza la biblioteca ESP8266. (Algo que ver con la EEPROM). Así que escribí mi propio código.
Esta es la normativa vigente de los Estados Unidos para horario de verano:
https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States
"Actualmente, hora de verano comienza el segundo domingo de marzo y termina el primer domingo en noviembre, con los cambios de tiempo que a las 2:00 hora de local. Con un juego de palabra mnemónico refiriéndose a estaciones, relojes "resorte adelante y caer", es decir, en primavera (técnicamente fines de invierno) los relojes se mueven hacia adelante de 2:00 a 3:00, y en otoño se mueven detrás de 2:00 a 1:00. "
Bueno, si has hecho alguna programación, esto se complica bastante. Esto es lo que hice.
La biblioteca de tiempo de Arduino, como muchos ordenadores utiliza algo llamado tiempo de Unix:
https://en.wikipedia.org/wiki/Unix_time
Tiempo UNIX (también conocido como POSIX tiempo o época) es un sistema para describir instantes en el tiempo, definido como el número de segundos transcurridos desde las 00:00:00 hora Universal coordinada (UTC), jueves, 01 de enero de 1970
Ahora, NTP y GPS utiliza UTC. UTC no es una zona horaria, pero se basa en el tiempo en Inglaterra así que tienes que convertir a hora local y ajustar tiempo de ahorro de luz del día.
Así que creé dos variables que se llama Spring y FallChange en formato de tiempo Unix.
Luego, utilizando NTP, he encontrado el año en curso.
A partir del año, entonces calculé los dos tiempos de unix para las dos variables. Esto es complicado ya que el segundo domingo de marzo y el primer domingo de noviembre no son el mismo día de año en año. Pero una cosa que puede decir la biblioteca de tiempo se da un tiempo de Unix, puede determinar el día de la semana. Así que usando el mes, el día y el día de la semana, he podido averiguar los días de cambio para el año.
Cuando el programa recibe un nuevo tiempo de UTC, si es mayor o igual que (> =) Spring y menor que (<) FallChange que es hora de verano (DST). De lo contrario no es DST. Ahora para obtener la hora local actual, ajustar para (en mi caso) montaña y luz del día tiempo de ahorro.