| Ваш IP: 35.170.81.210 | Online(28) - гости: 13, боты: 15 | Загрузка сервера: 0.4 ::::::::::::

Интернет часы 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 - временной сдвиг в секундах от 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


Форумы:

Комментарии

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

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

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

  • Светодиодная сетевая лампа

    В лампе установлено 19 всер ярких белых светодиодов диаметром 10мм яркостью от 10 до 20 кд. Основные элементы уст-ва — диодный мост VD1 и С1 С2. Первый из них балластный , его емкость выбрана такой что бы ток через светодиоды не превышал 26мА. Основное назначение С2 — сглаживать пульсации напряжения …Подробнее...
  • Сенсорный регулятор освещения

    Простым прикосновением к сенсорной пластине вы можете увеличить интенсивность света лампы накаливания в три этапа. Если вы коснетесь сенсорной пластиной, лампочка загорится тускло. При втором прикосновении лампа будет светиться на средней мощности. При третьем касании, лампочка будет гореть на полной мощности. Еще одно прикосновение заставит выключится свет. Основа сенсорного регулятора …Подробнее...
  • Простое FM — радио (Arduino)

    Простое FM — радио (Arduino)

    На странице https://rcl-radio.ru/?p=53162 был показан пример создания FM — радио в котором использовался радио модуль RRD_102v 2.0 на чипе RDA5807M совместно с ИК-модуля VS1838B. На этой странице будет рассмотрен пример создания очень просто FM — радио который основан на тех же модулях и дополнительно применен миниатюрный усилитель на PAM8403 класса D. Особенность FM …Подробнее...
  • Узел задержки включения

    Узел задержки включения

    Узел задержки включения активирует реле через установленное время. Время регулируется от 0 до 20 секунд при указанных в схеме элементах. Мощность подключаемого уст-ва ограничена током коммутации выбранного Вами реле. При помощи резистора R1 происходит установка задержки времени включения реле. Увеличивая емкость конденсатора С1, Вы увеличите максимальное время задержки включения. Источник — http://www.aaroncake.net/circuits/relaytim.aspПодробнее...
  • Усилитель мощности на 250Вт

    Усилитель мощности на 250Вт

    На рисунке представлена схема балансного мостового усилителя мощности НЧ на 250 Вт при коэффициенте гармоник 2% в полосе частот от 30 до 16000Гц. Основа конструкции 2-а идентичных усилителя НЧ, собранные на биполярных транзисторах кремниевых транзисторах. Устройство защиты оконечных каскадов отсутствует. Изменение фазы входного сигнала производится фазоинвертором на Т8. Коэффициент передачи …Подробнее...