Точное время с NTP-сервера на ESP8266: вывод на TM1637 и LCD 1602
Получение времени без модуля часов — удобное решение для ESP8266. Подключаемся к NTP-серверу, синхронизируем дату и время по вашему поясу. При потере интернета часы продолжают идти, а при восстановлении — автоматически корректируются. В этом проекте выведем время на популярный 4-значный дисплей TM1637 и дату/время на LCD 1602 с I2C.
Возможности проекта
- Автоматическая синхронизация с 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) по условию.