| Ваш IP: 3.238.107.166 | Online(31) - гости: 24, боты: 7 | Загрузка сервера: 0.8 ::::::::::::

Интернет часы ESP8266 + LCD1602_I2C

Использование NTP-сервера является одним из лучших решений для получения точного времени, а использование ESP8266 Nodemcu позволит очень просто создать интернет часы. Текущее время и дата будут выводится на дисплей LCD1602 на базе контроллера HD44780 который работает совместно I2C модулем на базе микросхем PCF8574 который позволяет подключить дисплей к плате ESP8266 NodeMCU всего по двум проводам SDA и SCL (D2 и D1).

Перед тем как приступить к созданию интернет часов необходимо ознакомится со следующими статьями:

Так же Вам  понадобятся следующие библиотеки

#include <NTPClient.h>
#include <ESP8266WiFi.h> 
#include <WiFiUdp.h> 
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
 WiFiUDP ntpUDP;
      /////////////////  https://www.ntppool.org/zone/@ - другие сервера  /////////////////////////////
      ///////////////// для России - ru.pool.ntp.org //////////////////////////////////////////////////
 NTPClient timeClient(ntpUDP, "pool.ntp.org", 21600,3600123);// 21600 - временной сдвиг в секундах от UTC 
 const char *ssid = "Имя_Wi-Fi_сети"; 
 const char *password = "Пароль";
 String date_time;
 unsigned long times;
 
void setup(){
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
    timeClient.begin();}
  lcd.init();                    
  lcd.backlight();// Включаем подсветку дисплея
}
 
void loop(){
  if(millis()-times>=1000){times=millis();
   while(!timeClient.update()){timeClient.forceUpdate();}
  int hh = timeClient.getHours();
  int mm = timeClient.getMinutes();
  int ss = timeClient.getSeconds();
  date_time = timeClient.getFormattedDate();
  int index_date = date_time.indexOf("T");
  String date = date_time.substring(0, index_date);
 
  lcd.setCursor(4,0);
  lcd.print(hh/10);lcd.print(hh%10);lcd.print(":");
  lcd.print(mm/10);lcd.print(mm%10);lcd.print(":");
  lcd.print(ss/10);lcd.print(ss%10);
  lcd.setCursor(3,1);
  lcd.print(date);
  }}


Интернет часы на ESP8266 +TM1637

В дополнение к теме статьи привожу пример использования четырех разрядного семи-сегментного индикатора TM1637. На индикатор выводится часы, минуты и мигающее в такт секундам двоеточие.

Для индикатора TM1637 Вам необходимо установить библиотеку — TM1637Display.zip

Для питания индикатора TM1637 можно использовать контакт 3V модуля ESP8266 NodeMCU.

#include <NTPClient.h>
#include <ESP8266WiFi.h> 
#include <WiFiUdp.h> 
#include <Wire.h> 
#include <TM1637Display.h>
 TM1637Display display(D4, D2);// CLK,DIO
 WiFiUDP ntpUDP;
 NTPClient timeClient(ntpUDP, "pool.ntp.org", 21600,3600123);// 21600 - временной сдвиг в секундах от UTC 
 const char *ssid = "Имя_Wi-Fi_сети"; 
 const char *password = "Пароль";
 
 int times,x;
 unsigned long t1,t;
 
void setup(){
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);Serial.print(".");
    timeClient.begin();}
    display.setBrightness(3);// ЯРКОСТЬ    
}
 
void loop(){  
  if(millis()-t1>=1000){t1=millis();
   while(!timeClient.update()){timeClient.forceUpdate();}
  int hh = timeClient.getHours();
  int mm = timeClient.getMinutes();
 // int ss = timeClient.getSeconds();
  times=hh*100+mm;} 
  if(millis()-t<500){x=0x00;}
  if(millis()-t>500){x=0x40;}
  if(millis()-t>999){t=millis();}
  display.showNumberDecEx(times,x,true); // вывод информации на индикатор TM1637
  }


Интернет часы ESP8266 + TFT SPI 320х240

Для отображения времени интернет часов так же можно использовать TFT-дисплей SPI 320×240 , но не просто выводить время, а сделать имитацию стрелочных часов.

Для нормальной загрузки скетча Вам понадобится дополнительная библиотекаNew_UTFT.zip

#include <NTPClient.h>
#include <ESP8266WiFi.h> 
#include <WiFiUdp.h>
#include <UTFT.h>
#include <SPI.h>
 WiFiUDP ntpUDP;
 NTPClient timeClient(ntpUDP, "pool.ntp.org", 21600,3600123);
 extern uint8_t BigFont[],SmallFont[];
 UTFT myGLCD ( ILI9341_S5P, 13, 14, 15, 0, 12 );//SDI (MOSI), SCK, CS, RESET, DC == D7 D5 D8 D3 D6
 const char *ssid = "Имя_Wi-Fi_сети"; 
 const char *password = "Пароль";
 String date_time;
 float sx,sy,osx,osy,mx,my,omx,omy,hx,hy,ohx,ohy;
 unsigned long times;
 
void setup(){
  Serial.begin(9600);
  WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);Serial.print(".");
    timeClient.begin();}  
  myGLCD.InitLCD(0);myGLCD.fillRect(0,0,320,240);myGLCD.setFont(BigFont);myGLCD.clrScr(); // первоначальные настройки экрана
  myGLCD.fillScr(0x0000);myGLCD.setColor(0xffff);myGLCD.setBackColor(0x0000); 
 
   for(int i=0;i<360;i+=30){
    sx=cos((i-90)*0.0174532925);
    sy=sin((i-90)*0.0174532925);
    myGLCD.drawLine(sx*120+120,sy*120+120,sx*110+120,sy*110+120);}
 
   for(int i=0;i<360;i+=6){
    sx=cos((i-90)*0.0174532925);
    sy=sin((i-90)*0.0174532925);
    myGLCD.drawPixel(sx*115+120,sy*115+120);}
}
 
void loop(){
  if(millis()-times>=1000){times=millis();
   while(!timeClient.update()){timeClient.forceUpdate();}
 int hh = timeClient.getHours();
 int mm = timeClient.getMinutes();
 int ss = timeClient.getSeconds();
  date_time = timeClient.getFormattedDate();
 int index_date = date_time.indexOf("T");
 String date = date_time.substring(0, index_date);
  hx=cos(((hh*30+mm*6*0.08333333)-90)*0.0174532925);
  hy=sin(((hh*30+mm*6*0.08333333)-90)*0.0174532925);
  mx=cos(((mm*6+ss*6*0.01666667)-90)*0.0174532925);
  my=sin(((mm*6+ss*6*0.01666667)-90)*0.0174532925);
  sx=cos((ss*6-90)*0.0174532925);
  sy=sin((ss*6-90)*0.0174532925);
 myGLCD.setColor(0x0000);// clear
 myGLCD.drawLine(osx,osy,120,120);
 myGLCD.drawLine(omx,omy,120,120);
 myGLCD.drawLine(ohx,ohy,120,120); 
 myGLCD.setColor(0xffff);
 myGLCD.print("12",104,0);
 myGLCD.print("6",112,225);
 myGLCD.print("9",0,112);
 myGLCD.print("3",224,112);
  ohx = hx*70+120;
  ohy = hy*70+120;
  omx = mx*100+120;
  omy = my*100+120;  
  osx = sx*110+120;
  osy = sy*110+120;
 myGLCD.setColor(0xf000);
 myGLCD.drawLine(osx,osy,120,120);
 myGLCD.setColor(0xffff);
 myGLCD.drawLine(omx,omy,120,120);
 myGLCD.setColor(0xfff5);
 myGLCD.drawLine(ohx,ohy,120,120);
 myGLCD.setColor(0xf000);
 myGLCD.fillCircle(120,120,4);
 myGLCD.setColor(0xffff);
///////////////////////////////////////////////////////
 myGLCD.print(timeClient.getFormattedTime(),60,275);
 myGLCD.print(date,45,295);
  }
 }//loop


Форумы:

Комментарии

  • F.P.:

    В заголовке статьи перепутаны цифры после ESP.

  • zgl28:

    Спс автор заработало!!! Я подключил дисплей к Vin без перемычки. Я использовал в программе NTP Client NTPClient timeClient(ntpUDP, «ua.pool.ntp.org», 7200,60000); Спасибо еще раз 🙂

    • liman28:

      Лучше поменять:
      NTPClient timeClient(ntpUDP, «ua.pool.ntp.org», 7200,60000);
      на
      NTPClient timeClient(ntpUDP, «ua.pool.ntp.org», 7200,3600123); // коррекция раз в час и 123 мс
      При коррекции времени опрос идет только для секунд, часы могут начать отставать по минутам. Лучше чтобы коррекция происходила когда нет перехода с одной минуты на другую.

  • вылезла такая ошибка

    Arduino: 1.8.13 (Windows 7), Плата:»NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200″

    ПРЕДУПРЕЖДЕНИЕ: библиотека LiquidCrystal_I2C-master должна запускаться на архитектурах avr и может быть несовместима с вашей платой на архитектуре esp8266.

    C:\Users\З\Documents\displey\CheckFlashConfig\CheckFlashConfig.ino: In function ‘void loop()’:

    CheckFlashConfig:33:26: error: ‘class NTPClient’ has no member named ‘getFormattedDate’

    exit status 1

    ‘class NTPClient’ has no member named ‘getFormattedDate’

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    «Показать подробный вывод во время компиляции»

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • НЕКОТОРЫЕ ВОПРОСЫ ЭКСПЛУАТАЦИИ АККУМУЛЯТОРНЫХ БАТАРЕЙ

    При эксплуатации аккумуляторных батарей следует всегда четко помнить следующее: • после покупки батареи находятся в разряженном состоянии и перед началом эксплуатации их необходимо зарядить; • напряжение на заряженном элементе аккумуляторной батареи составляет 1,2 В; • напряжение конца разряда (напряжение, ниже которого элемент разряжать не следует) составляет 1,0…1,05 В; • емкость …Подробнее...
  • Частотомер на PIC16F628A

    Частотомер на PIC16F628A

    На рисунке показана схема простого частотомера созданного на основе микроконтроллера PIC16F628A. Частотомер измеряет частоту от 2 Гц до 10 МГц, результат измерения выводится на первую строку индикатора 1602А, во второй строке отображается период измеряемого сигнала от 100 нс до 500 мс. Время измерения 1 секунда. Сигнал уровня ТТЛ можно непосредственно …Подробнее...
  • Индикатор перегорания предохранителя

    Данное уст-во индицирует перегорание предохранителя короткими звуковыми и световыми сигналами. индикатор также может работать в цепи постоянного или переменного тока с частотой до 1000Гц и напряжением от 10 до 1000В. В качестве время задающего конденсатора служит пьезокерамический излучатель BQ1 — 0,022…0,5мкФ. Литература Радиолюбитель 2\1999 Автор: М.Шустов, А.Шустов г. ТомскПодробнее...
  • СТАЦИОНАРНЫЙ МОЩНЫЙ СВЕТОРЕГУЛЯТОР

    Сетевой полупроводниковый светорегулятор комнатного освещения со стационарной установкой вместо сетевого выключателя. Предназначен для плавного регулирования яркости свечения ламп накаливания подвесных и потолочных светильников в жилых  помещениях при максимальной мощности нагрузки 300 Вт. Надежная и устойчивая работа светорегулятора обеспечивается в течение длительного времени при эксплуатации в условиях умеренно холодного климата при …Подробнее...
  • Источник питания с фиксированным выходным напряжением 1,5…9В

    Источник питания с фиксированным выходным напряжением 1,5…9В

    При помощи стабилизатора напряжения LM317 можно сделать источник питания с фиксированным выходным напряжением — 1,5, 3, 4,5, 6 и 9В. Максимальный выходной ток источника питания 1,5А. Источник питания имеет защиту от КЗ выхода и тепловую защиту. Для стабилизатора LM317 необходим теплоотвод. В уст-ве используется трансформатор мощностью 20-25 Вт с выходным …Подробнее...