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

Интернет часы 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


Форумы:

Комментарии

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

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

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

  • Стерео усилитель 2*12Вт на TDA7263М

    Стерео усилитель 2*12Вт на TDA7263М

    Стерео усилитель на базе микросхемы TDA7263М  относится к классу АВ и используется в основном в бытовой HI-FI технике. Микросхема имеет защиту от КЗ по переменному току, снабжена тепловой защитой: температура срабатывания тепловой защиты 145°С. TDA7263M имеет в своем составе систему MUTE которая позволяет избежать шумов и щелчков громкоговорителей в момент …Подробнее...
  • Параметры, типовой режим и цоколевки электровакуумных приборов широкого применения (триоды)

    Литература РА1998_08Подробнее...
  • ТЕХНОЛОГИЯ МОНТАЖА СОЕДИНЕНИЙ ОТВЕТВЛЕНИЙ В ОСВЕТИТЕЛЬНЫХ СЕТЯХ

    ТЕХНОЛОГИЯ МОНТАЖА СОЕДИНЕНИЙ ОТВЕТВЛЕНИЙ В ОСВЕТИТЕЛЬНЫХ СЕТЯХ

    Качество монтажа электрического освещения в значительной степени зависит от правильного выполнения работ по соединению и ответвлению токоподводящих жил проводов и кабелей. Выборочные проверки в электромонтажных организациях данного вида выполненных работ показали, что они зачастую выполняются со значительными отступлениями от технологии монтажа. Поэтому ниже дается более подробное описание способов выполнения работ …Подробнее...
  • Измерители уровня выходных сигналов на ТТЛ-микросхеме

    Измеритель уровня сигналов имеет 6-ть индицируемых уровней, время интеграции 180мс, время обратного хода 1,7с, диапазон индицируемых уровней от 0,14 до 5В, ток потребления при свечении всех шести светодиодов 70мА. На рисунке показана схема простого измерителя на одном микросхеме ТТЛ К155ЛИ1. Прибор основан на свойстве порога срабатывания инверторов. По мере увеличения …Подробнее...
  • Светодиодный драйвер на ИС 555

    Этот светодиодный драйвер позволяет подключить до 7-и светодиодов. Питание драйвера осуществляется от аккумуляторных батарей АА NiMH. При напряжении питания 1,25В выходное напряжение драйвера будет 23В. В драйвере используется таймер 555 который работает как генератор частоты 220кГц. Драйвер может работать до 190 часов на одном аккумуляторе 1,25В 2000мАч. Источник материала — …Подробнее...