1

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

Основная статья - http://rcl-radio.ru/?p=67569

Данный контент доступен только зарегистрированным пользователям.
http://rcl-radio.ru/wp-content/uploads/ … ibrary.zip

#include <NTPClient.h>
#include <ESP8266WiFi.h> 
#include <WiFiUdp.h> 
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
 WiFiUDP ntpUDP;
 NTPClient timeClient(ntpUDP, "pool.ntp.org", 21600,60000);
 const char *ssid     = "Redmi Note 3";
 const char *password = "32481975";
 String date_time;

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(){
  timeClient.update();
  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);
 
  }

  

2 (2024-03-24 17:16:38 отредактировано gelit4)

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

Здравствуйте, а можно сделать такие часы но с большими цифрами на lcd 1602 и датчиком темп.влажности AHT10
Вот как в этой теме http://forum.rcl-radio.ru/viewtopic.php?id=66
А то они у меня то спешат, то отстают с ds3231 приходится прошивать каждый год

Вот ваш код, там было вначале время потом температура и потом влажность крупными цифрами

#include <Wire.h> 
#include <Thinary_AHT10.h>
#include <LiquidCrystal.h>
#include <DS3231.h>
      AHT10Class AHT10;
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = {14,17,17,17,14,0,0,0};
      int a[4],digit,sek_old,w,w1,w2,h,t;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      unsigned long times;
      
   void setup(){ Wire.begin(); clock.begin(); Serial.begin(9600);  AHT10.begin(); 
    //clock.setDateTime(__DATE__, __TIME__);  // Устанавливаем время --> Раскомментировать / Закомментировать
    lcd.begin(16, 2);
      pinMode(10,INPUT); // SQW часов на 10 ногу
      lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
      clock.setOutput(DS3231_1HZ);
   }
   
   void loop(){
    //if(millis()-times>3000){
    h = AHT10.GetHumidity();// влажность
    t = AHT10.GetTemperature();// температура
    //}
    ;DateTime=clock.getDateTime(); 
     if(millis()-times<=5000){digit = DateTime.hour*100+DateTime.minute;
     if(w1==1){lcd.clear();w1=0;}w=1;
     if(digit>999){a[0]=digit/1000;}else{a[0]=11;}
     a[1]=digit/100%10;
     a[2]=digit/10%10;
     a[3]=digit%10%10;
     
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
      
   if(digitalRead(10) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);} // SQW часов на 10 ногу
   if(digitalRead(10) == LOW){lcd.setCursor(8,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(8,0);lcd.write((uint8_t)5);} // SQW часов на 10 ногу
 //  lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(DateTime.second<10){lcd.print("0");}lcd.print(DateTime.second);
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
     if(millis()-times>5000&&millis()-times<6500){digit=t;
    if(w==1){lcd.clear();w=0;}w2=1;
    if(digit>=10){a[0]=digit/10;}else{a[0]=11;}
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=4,e2=5,e3=6;break;
        case 1: e1=8,e2=9,e3=10;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
      lcd.setCursor(11,0);lcd.write((uint8_t)8);
   
    }

///////////////////////////////////////////////////////////////////////////////////////
    if(millis()-times>=6500&&millis()-times<8000){digit=h;
     if(w2==1){lcd.clear();w2=0;}w1=1;
     a[0]=digit/10;
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=4,e2=5,e3=6;break;
        case 1: e1=8,e2=9,e3=10;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break; 
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
      lcd.setCursor(11,0);lcd.print("%");
         
    }
   if(millis()-times>8000){times=millis();} 
   }// loop