Назад | Перейти на главную страницу

Синхронизация времени между сервером и устройством

Я делаю проект IoT. Мое устройство IoT (оборудование с Arduino) каждые несколько минут измеряет некоторую информацию о температуре. И отправляем эти данные на сервер. Оборудование имеет дисплей. Это показывает значение температуры и время. Я хочу синхронизировать это время с серверным временем. Я не могу использовать NTP, так как не работаю с UDP. Могу ли я использовать HTTP для синхронизации времени? любые предложения, пожалуйста

Используйте NTP. Он работал на компьютерах 1985 года, он может работать на сегодняшних небольших устройствах.

Весьма вероятно, что демон или библиотека NTP уже существует. Если нет, то написание базового кода SNTP возможно с любым стеком IP. Хорошая причина понять UDP в вашей сети.


Заголовок HTTP Date, если веб-сервер имеет точное время, обеспечивает точность в одну секунду. openntpd использует это, но только как ограничение проверки работоспособности. Предупреждение, что формат даты не очень удобочитаем. Достаточно просто с Python, но если бы у вас был Python, вы могли бы просто использовать ntplib...

Если ваше устройство Arduino просто работает с HTTP-запросами, например отправляет простой HTTP-запрос GET на сервер с собранными данными датчика, вы можете:

  • Верните информацию о времени сервера в теле запроса GET и используйте данные для периодической синхронизации времени устройства arduino.
    • Например позвоните: GET http://yourserver/sensordatacollector/record?temperature=22&humidity=45
    • Используйте возвращаемые значения даты и времени ответа
  • Или реализовать отдельную конечную точку HTTP для сервера, который предоставляет информацию о времени. Эта конечная точка времени периодически вызывается устройством Arduino, которое синхронизирует время устройства.
    • Например позвоните: GET http://yourserver/sensordatacolletor/datetime
    • используйте значения даты и времени ответа для синхронизации Arduino

Также см https://arduinojson.org/v6/example/http-client/ для справки.

Изменить: если возможно, вы также можете воспользоваться преимуществами уже открытых API-интерфейсов, которые предоставляют информацию о дате и времени, например: http://worldtimeapi.org/