№ 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: Today's spam: get your universty digree onlineJECT
Leave a Reply