Скетч Arduino — как добавить временную метку для исходящего MQTT
Я пишу скетч для загрузки на устройство Sonoff (дистанционное реле на базе ESP8266).
Все работает отлично, но я хочу, чтобы мои публикации MQTT содержали следующий формат:
[ ДАТА И ВРЕМЯ ] сообщение
ESP8266 подключен к Интернету. Я ищу способ сделать это (включая периодические обновления времени), не запуская всю память объемом 1 МБ, то есть: код, который 1) получить время из внешнего источника (LAN или WAN) 2) обновлять каждые 24 часа 3) Облегченный код?
Спасибо
@Guy . D, 👍0
Обсуждение1 ответ
Начнем с примера ESP8266WiFi "NTPClient" . Это научит вас, как получить время "Unix Epoch" из Интернета.
Это значение можно напрямую передать в TimeLib, чтобы отслеживать время (действительно, TimeLib включает в себя пример NTP для Arduino Ethernet, который должен помочь вам начать работу). Делайте это периодически (ежедневно, ежечасно, как угодно), и у вас будет время. Затем TimeLib может предоставить вам дату и время в виде отдельных компонентов (часы, минуты и т. д.), которые вы затем можете объединить (я бы использовал snprintf
) для включения в ваше сообщение MQTT:
int len = strlen(message) + 25;
char mqttMessage[len];
snprintf(mqttMessage, len, "[%04d/%02d/%02d %02d:%02d:%02d] %s",
year(), month(), day(), hour(), minute(), second(), message);
mqttMessage => "[2018/08/11 20:36:24] foo"
- ESP8266: ошибка: 'getLocalTime' was not declared in this scope
- Как разобрать 20180810T143000Z в time_t
- Как найти разницу между двумя timestamp
- Установить time() на ESP8266
- ESP8266 ISO 8601 string to tm struct
- Каков идеальный способ проверить, готово ли время на ESP8266 через NTP?
- Время UNIX в мс в человеческую дату и время
- Не удалось изменить NtpClient для использования статического IP-адреса
пожалуйста, задайте конкретный вопрос, @jsotola
обновлено, хотя это казалось простым, @Guy . D
посмотрите NTC, я думаю, там есть встроенный пример, если нет, то это очень распространенная библиотека с примерами, добавленными в менеджер., @dandavis
@dandavis Вы, конечно, имеете в виду NTP..., @Majenko
@Majenko: молодец, это я и имел в виду, NTP. Протокол сетевого времени., @dandavis