Точное время с NTP-сервера на ESP8266: вывод на TM1637 и LCD 1602

Получение времени без модуля часов — удобное решение для ESP8266. Подключаемся к NTP-серверу, синхронизируем дату и время по вашему поясу. При потере интернета часы продолжают идти, а при восстановлении — автоматически корректируются. В этом проекте выведем время на популярный 4-значный дисплей TM1637 и дату/время на LCD 1602 с I2C.

NTP время на TM1637 и LCD 1602 без RTC модуля

Возможности проекта

  • Автоматическая синхронизация с NTP-сервером
  • Вывод времени на TM1637 (ЧЧ:ММ с миганием)
  • Вывод даты и времени на LCD 1602
  • Минимальное потребление, простое подключение
  • Легко добавить день недели, температуру с сервера

Необходимые компоненты

  • ESP8266 (NodeMCU / Wemos)
  • Дисплей TM1637 (4 цифры)
  • LCD 1602 с модулем I2C
  • Провода

Подключение TM1637

  • VCC → 3.3V или 5V
  • GND → GND
  • CLK → D3
  • DIO → D4

Подключение LCD 1602 I2C

  • VCC → 5V
  • GND → GND
  • SDA → D2
  • SCL → D1

Библиотеки

  • NTPClient
  • TimeLib
  • TM1637Display
  • LiquidCrystal_I2C

Скетч для TM1637

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

TM1637Display display(D3, D4);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 10800); // +3ч

void setup() {
  WiFi.begin("SSID", "PASS");
  while (WiFi.status() != WL_CONNECTED) delay(500);
  timeClient.begin();
  display.setBrightness(5);
}

void loop() {
  timeClient.update();
  int h = timeClient.getHours();
  int m = timeClient.getMinutes();
  display.showNumberDecEx(h*100 + m, 0b01000000, true); // мигание :
  delay(1000);
}
Делает следующее:
подключается к Wi-Fi.
получает точное время с NTP-сервера (UTC+3).
отображает ЧЧ:ММ на TM1637 с миганием точки каждую секунду.

Скетч для LCD 1602

#include <LiquidCrystal_I2C.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

LiquidCrystal_I2C lcd(0x27,16,2);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 10800); // UTC+3

void setup() {
  lcd.init(); lcd.backlight();
  WiFi.begin("SSID","PASS");
  while(WiFi.status() != WL_CONNECTED) delay(500);
  timeClient.begin();
}

void loop() {
  timeClient.update();
  lcd.setCursor(0,0); lcd.print(timeClient.getFormattedDate());
  lcd.setCursor(0,1); lcd.print(timeClient.getFormattedTime() + "  ");
  delay(1000);
}
Делает следующее:
подключается к Wi-Fi.
получает точное время с NTP-сервера (UTC+3).
отображает дату на первой строке и время на второй строке LCD.
обновляет каждую секунду.

Заключение

Простые и точные часы без RTC-модуля. NTP обеспечивает автоматическую подстройку. Проект легко расширить: добавить день недели, будильник или вывод на другие дисплеи.

FAQ — NTP время без RTC

Что если интернет пропадёт?

Часы продолжают идти по внутреннему таймеру ESP8266, подстроятся при восстановлении связи.

Как изменить часовой пояс?

В NTPClient укажите offset в секундах (например, +3ч = 108 cortic00).

Можно вывести день недели?

Да, используйте weekday() и массив строк [«Вс»,»Пн»,…].

Как найти адрес I2C для LCD?

Запустите I2C Scanner скетч — выведет адрес (обычно 0x27 или 0x3F).

Можно добавить мигание на LCD?

Да, чередуйте вывод с «:» и без в delay(500).

Работает ли с другими дисплеями?

Да, OLED SSD1306, Nokia 5110, TFT — просто измените библиотеку вывода.

Как уменьшить яркость ночью?

Проверяйте час и устанавливайте display.setBrightness(1-7) по условию.