Точное время и дата с NTP-сервера на ESP8266 без RTC-модуля

NTP-сервер позволяет получать точное время и дату по интернету без модуля часов (DS3231/DS1307). ESP8266 подключается к пулу NTP, синхронизирует часы по вашему поясу. При потере сети время идёт по внутреннему таймеру, при восстановлении — корректируется автоматически. Идеально для умного дома, логгеров, синхронизации устройств.

Точное время с NTP на ESP8266 без модуля часов

Преимущества NTP

  • Нет нужды в RTC-модуле и батарейке
  • Автоматическая коррекция при подключении
  • Доступ к дате, времени, дню недели
  • Минимум энергопотребления и стоимости
  • Легко вывести на любой дисплей

Необходимые библиотеки

  • NTPClient
  • WiFiUdp
  • TimeLib (опционально для форматирования)

Основной скетч ESP8266

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h>

const char* ssid = "yourSSID";
const char* password = "yourPASS";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 10800, 60000); // UTC+3

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  timeClient.begin();
}

void loop() {
  timeClient.update();

  // получаем Unix-время
  unsigned long epochTime = timeClient.getEpochTime();
  setTime(epochTime);

  // вывод времени
  Serial.print("Время: ");
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.println(second());

  // вывод даты
  Serial.print("Дата: ");
  Serial.print(day());
  Serial.print(".");
  Serial.print(month());
  Serial.print(".");
  Serial.println(year());

  delay(1000);
}

подключается к Wi-Fi.
получает точное время с NTP-сервера (UTC+3).
Альтернативная библиотека

NTPTimeESP — тоже стабильна, с автоматическим летним временем.

Заключение

NTP — простой и надёжный способ получить точное время без аппаратных часов. Готово к выводу на дисплеи, записи в лог или синхронизации устройств.

FAQ — NTP время на ESP8266

Какой NTP-сервер лучше использовать?

pool.ntp.org — пул серверов, автоматически выбирает ближайший.

Как задать часовой пояс?

В секундах: для +3ч — 10800 (часы × 3600).

Что если нет интернета?

Время продолжает идти по millis(), подстроится при подключении.

Как получить день недели текстом?

Создайте массив String days[7] = {«Вс»,»Пн»,…}; и выводите days[weekday()-1].

Сколько памяти занимает NTP?

Менее 10% Flash на ESP8266, работает стабильно.

Можно добавить летнее время?

Да, вручную +3600 весной/осенью или используйте библиотеку с автоопределением.

Где взять timestamp?

timeClient.getEpochTime() — секунды с 1970 года.

📁 Скачать примеры