Используйте MQTT для обновления внутренних часов

Я пишу код для загрузки в ESP8266. Я хочу использовать отметку времени для регистрации событий. Я нашел эскиз NTP, с которым могу работать (поскольку у него есть подключение к Wi-Fi), но я хочу, чтобы мой код был максимально простым.

Поэтому я подумываю использовать свой MQTT-сервер для время от времени отправки обновлений (для этого есть определенная тема), а между обновлениями использовать millis().

>

Поскольку я здесь новичок, я хочу узнать у опытного программиста, имеет ли это смысл? Мне бы хотелось услышать плюсы и минусы (прежде чем я начну программировать).

Любая помощь будет оценена

Парень

, 👍1

Обсуждение

Насколько для вас важно, чтобы время было точным? NTP будет работать надежнее, чем получение времени через MQTT. NTP предназначен для компенсации времени, необходимого для получения ответа от сервера NTP, и для решения проблемы дрейфа часов. С MQTT вы не будете уверены, сколько времени прошло с тех пор, как сервер MQTT опубликовал время, что может быть приемлемо для вашего приложения, если вам нужна просто приблизительно точная временная метка., @romkey

@JohnRomkey - спасибо за ответ. Как я уже сказал, это для временной метки, то есть несколько минут в день (скажем, 2), будет приемлемо. Я уверен, что вы на 100% правы, но я хочу, чтобы мой код был максимально легким, @Guy . D


1 ответ


Лучший ответ:

1

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

В своем коде вы будете использовать библиотеку времени для получения времени, а источник текущего времени не зависит от остального кода.

В TimeLib есть функция setTime для установки текущего времени, а затем она сохраняет время с помощью millis(). Вы можете обновить время, снова вызвав setTime. Значением временной метки для setTime является «Эпоха Unix» — количество секунд от «1970-01-01 00:00:00».

Если вы решите добавить NTP в свой проект, вы можете использовать NtpClientLib. Он устанавливает время в TimeLib с помощью одной простой строки кода в setup(). Пример NTP.begin("pool.ntp.org", 1, false);.

,

Проголосовавший против, что не так?, @Juraj

Возможно, он поставил минус, потому что вопрос был направлен на плюсы и минусы получения времени через MQTT по сравнению с другими методами синхронизации времени, а не на то, как управлять этим временем в программе., @chrisl

Я думал о том же - почему голос против? Я ведь просил совета или помощи. Я голосую ЗА. Спасибо (буду рад получить больше объяснений/кода, если они у вас есть), @Guy . D

@Juraj - спасибо, я тоже попробую использовать NTP. ПАРЕНЬ, @Guy . D

@Juraj - есть еще одна функция для установки временного интервала - нужно ли мне ее использовать? Какое время будет по умолчанию, если я его не определяю?, @Guy . D

время начинается с 1970-01-01, @Juraj