| Ваш IP: 18.207.254.88 | Online(32) - гости: 22, боты: 10 | Загрузка сервера: 1.43 ::::::::::::


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


Форумы:

Комментарии

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

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

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

  • Милливольтметр переменного тока от 1мВ до 1В

    Милливольтметр переменного тока от 1мВ до 1В

    На рисунке показана схема простого милливольтметра переменного тока, милливольтметр имеет четыре диапазона 1 мВ, 10 мВ, 100 мВ и 1 В. Входной сигнал может иметь частоту от нескольких герц до 50 кГц. Нелинейность схемы выпрямителя устраняется путем применения обратной связи в ОУ. Схема рассчитана на измерение полного выпрямленного среднего значения …Подробнее...
  • switch…case (Arduino)

    switch…case (Arduino)

    Оператор switch подобен в чем то оператору if, он так же управляет процессом выполнения программы, позволяя  задавать альтернативный код, который будет выполняться при разных условиях. Оператор switch сравнивает значение переменной со значением, определенном в операторах case. Когда найден оператор case, значение которого равно значению переменной, выполняется программный код в этом …Подробнее...
  • Контактный термометр

    Термометр измеряет температуру от 0 до 100°С. Схема не требует регулировки и настраивается R3 по стрелочному индикатору по известной температуре. VT3 — датчик, он смонтирован на щупе при этом инерционность как у ртутного термометра. *** Замены КТ201Б в виде датчика — НЕТ! Литература Радиолюбитель 5\96 Автор: Ю. Рощенко г. ЧеркасскПодробнее...
  • Светодиодный драйвер на ИС 555

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

    Регулирующие транзисторы выбираются, исходя из тока нагрузки. Для тока 25 А можно использовать один транзистор КТ878, или два КТ848А,  включенных параллельно, или три 10-амперных транзистора (КГ819, КТ808, КТ841), снабдив их, конечно, уравнивающими ток резисторами сопротивлением 0,1 Ом. Их наматывают константановой проволокой диаметром 0,3 мм или более на корпусе резистора МЛТ-2. …Подробнее...