ESP32, NTP и сброс ПО

esp32 reset ntpclient

После аппаратного сброса (кнопка или переподключение питания) я получаю правильное смещение NTP, но когда я использую ESP.restart() через MQTT, я получаю правильное время без смещения на 3 3 часа из-за Tz . Что происходит после сброса ПО, которое ведет себя таким образом, и как это исправить?

bool myIOT2::_startNTP(const char *ntpServer, const char *ntpServer2)
{
    unsigned long startLoop = millis();
    while (!_NTP_updated() && (millis() - startLoop < 20000))
    {
#if defined(ESP8266)
        configTime(TZ_Asia_Jerusalem, ntpServer2, ntpServer); // configuring time offset and an NTP server
#elif defined(ESP32)
        configTzTime(TZ_Asia_Jerusalem, ntpServer2, ntpServer);
#endif
        delay(1000);
    }
    if (!_NTP_updated())
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
bool myIOT2::_NTP_updated()
{
    return now() > 1640803233;
}

, 👍0

Обсуждение

Не могли бы вы также добавить (соответствующие фрагменты) кода приложения?, @Nick S.


1 ответ


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

0

Видимо, время в ESP32 сохраняется после сброса ПО, а в ESP8266 — нет. Таким образом, в коде, который одинаков для обоих - если часы обновляются (грубый критерий, что время больше, чем какой-то день в 2020 году), он пропускает обновление TZ configTzTime(TZ_Asia_Jerusalem, ntpServer2, ntpServer);

Итак, после сбоя и/или отправки MQTT-сообщения на перезагрузку время отсутствовало обновление TZ.

Надеюсь, это кому-нибудь поможет.

Парень

,