Сьогодні я зіткнувся з проблемою що коли переводять годинник мої Arduino пристрої починають показувати неточний час і я знайшов рішення цієї проблеми
Код
#include <NTPClient.h>
#include <WiFiUdp.h>
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ua.pool.ntp.org", 7200);
void initTime() {
// Встановлюємо початкове значення літнього часу на false
bool isDaylightSaving = false;
// Отримуємо поточну дату та час з сервера NTP
timeClient.begin();
timeClient.update();
String formattedTime = timeClient.getFormattedTime();
// Розбиваємо рядок з форматованим часом на складові
int day, month, year, hour, minute, second;
sscanf(formattedTime.c_str(), "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);
// Перевіряємо, чи поточний місяць знаходиться в інтервалі березень-жовтень
if (month > 3 && month <= 10) {
// Якщо так, встановлюємо літній час на true
isDaylightSaving = true;
}
// Встановлюємо зміщення часового поясу для врахування літнього часу
if (isDaylightSaving) {
timeClient.setTimeOffset(14400); // UTC+3 для України
} else {
timeClient.setTimeOffset(10800); // UTC+2 для України
}
}
void setup() {
// Підключення до WiFi і налаштування часу
...
initTime();
}
void loop() {
// Оновлюємо час з сервера NTP
timeClient.update();
// Решта коду для програми
...
}
Тестовано на esp32.