INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

ESP8266: Часы с NTP синхронизацией по WiFi

№ 8358 В разделах: Electronics ESP8266 Programming от July 8th, 2017,
В подшивках: , , ,

Выглядит неплохо? Есть еще более приятная версия с погодой и вайфай менеджером https://blindage.org/?p=8366.

Использованы библиотеки:

Видеодемонстрация:

Код:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>
#include <NtpClientLib.h>
#include <ESP8266WiFi.h>

#define YOUR_WIFI_SSID "mywifispot"
#define YOUR_WIFI_PASSWD "superpasswd"

#define ONBOARDLED 2 // Built in LED on ESP-12/ESP-07

LiquidCrystal_I2C lcd(0x20, 20, 4);
int8_t timeZone = 6;

// Start NTP only after IP network is connected
void onSTAGotIP(WiFiEventStationModeGotIP ipInfo) {
  Serial.printf("Got IP: %s\r\n", ipInfo.ip.toString().c_str());
  NTP.begin("ntp.tsu.ru", timeZone, true);
  NTP.setInterval(63);
  digitalWrite(ONBOARDLED, LOW); // Turn on LED
}

// Manage network disconnection
void onSTADisconnected(WiFiEventStationModeDisconnected event_info) {
  Serial.printf("Disconnected from SSID: %s\n", event_info.ssid.c_str());
  Serial.printf("Reason: %d\n", event_info.reason);
  digitalWrite(ONBOARDLED, HIGH); // Turn off LED
  //NTP.stop(); // NTP sync can be disabled to avoid sync errors
}

void processSyncEvent(NTPSyncEvent_t ntpEvent) {
  if (ntpEvent) {
    Serial.print("Time Sync error: ");
    lineClear(0);
    lcd.setCursor(0, 0);
    lcd.print("EE:");
    if (ntpEvent == noResponse) {
      Serial.println("NTP server not reachable");
      lcd.setCursor(4, 0);
      lcd.print("not reachable");
    }
    else if (ntpEvent == invalidAddress) {
      Serial.println("Invalid NTP server address");
      lcd.setCursor(4, 0);
      lcd.print("invalid address");
    }
  }
  else {
    Serial.print("Got NTP time: ");
    Serial.println(NTP.getTimeDateString(NTP.getLastNTPSync()));
    lineClear(0);
    lcd.setCursor(0, 0);
    lcd.print("NTP sync successful");
  }
}

void lineClear(uint8_t line)
{
  lcd.setCursor(0, line);
  lcd.print("                    ");
}

boolean syncEventTriggered = false;
NTPSyncEvent_t ntpEvent;

void setup()
{
  static WiFiEventHandler e1, e2;

  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(YOUR_WIFI_SSID, YOUR_WIFI_PASSWD);

  pinMode(ONBOARDLED, OUTPUT); // Onboard LED
  digitalWrite(ONBOARDLED, HIGH); // Switch off LED

  NTP.onNTPSyncEvent([](NTPSyncEvent_t event) {
    ntpEvent = event;
    syncEventTriggered = true;
  });

  e1 = WiFi.onStationModeGotIP(onSTAGotIP);// As soon WiFi is connected, start NTP Client
  e2 = WiFi.onStationModeDisconnected(onSTADisconnected);

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Device started");
  delay(1000);
}

void loop()
{
  static int i = 0;
  static int last = 0;

  if (syncEventTriggered) {
    processSyncEvent(ntpEvent);
    syncEventTriggered = false;
  }

  if ((millis() - last) > 5100) {
    last = millis();
    lineClear(0);
    Serial.print(i); Serial.print(" ");
    Serial.print(NTP.getTimeDateString()); Serial.print(" ");
    Serial.print(NTP.isSummerTime() ? "Summer Time. " : "Winter Time. ");
    Serial.print("WiFi is ");
    Serial.print(WiFi.isConnected() ? "connected" : "not connected"); Serial.print(". ");
    Serial.print("Uptime: ");
    lcd.setCursor(0, 0);
    lcd.print(WiFi.isConnected() ? "WiFi connected" : "not connected");
    lcd.setCursor(0, 3);
    lcd.print(NTP.isSummerTime() ? "Summer Time. " : "Winter Time. ");
    Serial.print(NTP.getUptimeString()); Serial.print(" since ");
    Serial.println(NTP.getTimeDateString(NTP.getFirstSync()).c_str());

    i++;
  }
  delay(100);
  lcd.setCursor(0, 2);
  lcd.print(NTP.getTimeDateString());
}

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Облачная платформа

Микроблог перейти


🇷🇺 © Vladimir Smagin, 2005-2023. Копирование материалов без разрешения запрещено. GPG *
Яндекс.Метрика

Fortune cookie: Today's spam: get your universty digree onlineJECT