NTP протокол – Network Time Protocol (Протокол Часу у Мережі). Це стандартний протокол інтернет-часу для синхронізації годинника з еталонним годинником в мережі.
Інколи в проектах потрібно викорстання часу, наприклад вмикати реле по заданому часу, або зберігання даних датчиків через заданий час. Для цього використовують RTC (real-time clock), часи реального часу, але точність цих мікросхем не дуже хороша. DS1307 має похибку 20 ~ 30 секунд на добу. Коригувати час вручну не дуже зручно, якщо є підключення до інтернету можна використати NTP протокол, і періодично оновлювати годинник у автоматичному режимі.
Для отримання точного часу по NTP будем використовувати ESP32 з підключенням до інтернету по Wi-Fi та бібліотеку NTPClient Arduino ESP32.
Для встановлення бібліотеки у PlatformIO додайте наступний рядок до файлу platformio.ini.
lib_deps = arduino-libraries/NTPClient @ ^3.1.0
Код програми
#include <NTPClient.h>
#include <WiFi.h>
const char *ssid = "ssid";
const char *password = "password";
const int utcOffsetInSeconds = 7200; // UTC +2 в секундах
const int updateInterval = 3600; // Інтервал оновлення в секундах
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
void setup()
{
Serial.begin(9600);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED )
{
Serial.print(".");
delay ( 500 );
}
timeClient.begin();
}
void print_time()
{
Serial.print("Day of week - ");
Serial.println(timeClient.getDay()); // День тижня
Serial.print("Hours - ");
Serial.println(timeClient.getHours()); // Години
Serial.print("Minutes - ");
Serial.println(timeClient.getMinutes()); // Хвилини
Serial.print("Seconds - ");
Serial.println(timeClient.getSeconds()); // Секунди
Serial.print("Formatted time - ");
Serial.println(timeClient.getFormattedTime()); // форматований час hh:mm:ss
Serial.print("Unix time - ");
Serial.println(timeClient.getEpochTime()); // Секунд від 1970.01.01 00:00:00
Serial.println("");
}
void loop()
{
if (timeClient.update()){
print_time();
}
delay(5000);
}
Вивід монітору серійного порта
Основні світові NTP сервери
Зона | Сервер |
---|---|
Загальносвітовий серврер | pool.ntp.org |
Європа | europe.pool.ntp.org |
Азія | asia.pool.ntp.org |
Північна америка | north-america.pool.ntp.org |
Південна америка | south-america.pool.ntp.org |
Океанія | oceania.pool.ntp.org |
ПІсля отримання точного часу можна оновити наш годинник.
Підключення RTC DS1307 та DS3231 до Arduino часи реального часу та ESP32/ESP8266