Kaptain.
Telegram /
LinkedIn /
Email /
GIT /
RSS /
GPG /
Заказ печатных плат

№ 8358 В разделах:
Electronics
ESP8266
Programming
от July 8th, 2017,
В подшивках: Displays, ESP8266, Smart Home, WifiManager
Выглядит неплохо? Есть еще более приятная версия с погодой и вайфай менеджером 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());
}
Fortune cookie: "Salvation for credulity means damnation for investigation." [Robert G. Ingersoll]
Leave a Reply