Protocolo de tiempo en línea en el ESP32

Network Time Protocol (NTP) es una de las mejores formas de mantener sincronizadas las computadoras de la red al mismo tiempo. Es simple, liviano y no solo permite que las computadoras realicen un seguimiento del tiempo juntos, sino que también permite que algunos fabricantes de computadoras ahorren algo de dinero en hardware. La Raspberry Pi es quizás el ejemplo más conocido de una computadora barata sin el gasto adicional de un reloj en tiempo real (RTC). Mientras que el Pi configura NTP básicamente de forma automática, otros microcontroladores como el ESP32 no lo hacen, pero es posible configurarlos para usar este estándar de tiempo con algo de trabajo.

Para este proyecto se requiere la implementación de MicroPython para el ESP32. MicroPython es una forma de ejecutar el código de Python en microcontroladores u otros sistemas integrados sin todos los costos adicionales que normalmente requeriría Python. Afortunadamente, las bibliotecas NTP están integradas correctamente, por lo que una vez que MicroPython se ejecuta en el ESP32, es casi tan fácil como llamar a la biblioteca. Por supuesto, deberá asegurarse de que haya una conexión a Internet y luego capturar la hora, sincronizarla con la máquina y luego configurar la zona horaria.

Como ejercicio adicional, el creador del proyecto [Bhavesh] sugiere tratar de configurar el horario de verano, aunque esto puede ser un problema sorprendentemente difícil de resolver. Mientras tanto, hay algunas otras formas de instalar un reloj en un microcontrolador como este. Un módulo RTC es una opción obvia, pero también puede obtener una sincronización increíblemente precisa utilizando un módulo GPS.

  • bruce perens dice:

    Tengo una implementación de ESP-32 SSNTP como parte de Generic Main para esp-idf, en https://github.com/BrucePerens/rigcontrol/tree/main/components/generic_main. Esto establece la hora y puede configurar la zona horaria en un parámetro no volátil, luego la biblioteca y la base de datos de tiempo de Olson manejan la zona horaria y el horario de verano, como en las computadoras grandes. Ver también ../commands para los comandos "date" y "param". Esto es compatible con C y C ++, y probablemente podría persuadirse para que sea compatible con Rust, Python, etc. con algo de esfuerzo. También implementa STUN, PCP, DNS dinámico, REST, DNS dinámico, un bucle de eventos basado en opciones y un corredor de trabajo (realmente corrupto). Tiene doble licencia AGPL3 y comercial. Todavía bastante joven, pero creo que puede resultarle difícil de leer.

    Es la base del control remoto de radio de $ 14 que hago. Ver el directorio principal en https://github.com/BrucePerens/rigcontrol

    Además, consulte https://HamOpen.org/, que creamos para respaldar el desarrollo de software y hardware de código abierto para radioaficionados.

  • gelacinético dice:

    No se requiere MicroPython para sincronizar la hora con NTP. Esta función está integrada en el ESP-IDF:
    https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/system_time.html#sntp-time-synchronization

    También hay un ejemplo para ello:
    https://github.com/espressif/esp-idf/tree/master/examples/protocols/sntp

  • Miguel dice:

    Viejas noticias. Hay bastantes libros NTP para el ESP32.

    • Bruce Perens K6BP dice:

      De hecho, esp-idf viene con la biblioteca de tiempo de Olson, que resuelve completamente el problema del horario de verano, y la implementación de SSNTP.

      Escribí más sobre mi trabajo con este software, pero los moderadores eliminaron la publicación?!?!?

      • Bruce Perens K6BP dice:

        ¡Muy bien, ya está ahí!

  • slincolne dice:

    Si su proyecto IoT necesita comprender la fecha y la hora, esta información ya proviene de cualquier servidor web (se incluye en los encabezados de cada solicitud GET). La belleza de esto es que, donde tiene dispositivos periféricos que cargan datos en un servidor central, sus dispositivos tienen una fuente de tiempo central y constante.

    • mikis dice:

      He trabajado en suficientes tiendas para saber que siempre hay algunos servidores que no tienen el momento adecuado. Si la información es pegadiza, vale la pena algunas líneas adicionales de tiempo de código para obtener la marca de tiempo correcta.

  • solo de paso dice:

    ¿No es ese el logo de Snek?

    • Feinfinger (modo domesticado Mx) dice:

      https://sneklang.org

  • proyecto de ley dios dice:

    Habiendo trabajado en problemas de NTP en dispositivos IoT, solo quiero decir: lo odio. Chrony podría ser mejor, pero no he usado chrony lo suficiente como para decir si soluciona mi queja principal con NTP: es un dolor depurar problemas. En mi caso, la causa raíz fue una configuración de red deficiente en el sitio de un cliente, pero en una implementación global de dispositivos, ese problema ocurrirá con frecuencia.

    • Bruce Perens K6BP dice:

      SNTP es, como dicen, mucho más simple que NTP pero mucho menos preciso. Es para dispositivos IoT que solo necesitan el tiempo establecido y no necesitarán tiempo de alta resolución. Lamentablemente, deprimir estas cosas se hace mejor con Wireshark. Todas las cosas adicionales que podemos haber incluido para la visibilidad en la implementación de una computadora más grande están ausentes de las aplicaciones de IoT simplemente porque el tamaño es una ventaja.

  • gz dice:

    El esp en sí no ahorra un gran tiempo. Puede ir a la deriva durante unos minutos al mes.

    • Bruce Perens K6BP dice:

      O más, según la base de tiempo que elijas (hay varias) y si usas el modo de consumo ultrabajo.

      • Ewald dice:

        Me sorprendería si fuera de otra manera, pero afortunadamente tiene wifi y hay una biblioteca NTP en funcionamiento.

América Aguilar
América Aguilar

Deja una respuesta

Tu dirección de correo electrónico no será publicada.