Используйте MQTT для обновления внутренних часов
Я пишу код для загрузки в ESP8266. Я хочу использовать отметку времени для регистрации событий. Я нашел эскиз NTP, с которым могу работать (поскольку у него есть подключение к Wi-Fi), но я хочу, чтобы мой код был максимально простым.
Поэтому я подумываю использовать свой MQTT-сервер для время от времени отправки обновлений (для этого есть определенная тема), а между обновлениями использовать millis()
.
Поскольку я здесь новичок, я хочу узнать у опытного программиста, имеет ли это смысл? Мне бы хотелось услышать плюсы и минусы (прежде чем я начну программировать).
Любая помощь будет оценена
Парень
@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
- Как подключиться к MQTT брокеру с помощью TLS?
- Преобразование byte* в int в Arduino
- esp32-cam публикует изображение в mqtt
- ESP8266 глубокий сон и MQTT
- ESP-01 неправильно просыпается после глубокого сна
- Приведение от 'char*' к 'char' теряет точность
- Публиковать данные json в mqtt
- Не удалось подключиться к брокеру MQTT через esp8266/32 и pub/sub client
Насколько для вас важно, чтобы время было точным? NTP будет работать надежнее, чем получение времени через MQTT. NTP предназначен для компенсации времени, необходимого для получения ответа от сервера NTP, и для решения проблемы дрейфа часов. С MQTT вы не будете уверены, сколько времени прошло с тех пор, как сервер MQTT опубликовал время, что может быть приемлемо для вашего приложения, если вам нужна просто приблизительно точная временная метка., @romkey
@JohnRomkey - спасибо за ответ. Как я уже сказал, это для временной метки, то есть несколько минут в день (скажем, 2), будет приемлемо. Я уверен, что вы на 100% правы, но я хочу, чтобы мой код был максимально легким, @Guy . D