NodeMCU NTP óra
Ezt a projektet, az a személyes indíttatás vezérelte, hogy semmi kedvem sincs az órákat átállítani beállítani stb. Tanulva a DS1307 pontatlanságából az RTC-k szóba sem jöhettek. Tudom van más RTC-je is Dallasnak ami pontosabb, de szerintem egy óra akkor jó, ha nem kell hozzányúlni soha (mobiltelefonon), ezt egyik RTC sem teszi lehetővé. Ebben az órában csak egy buktató van, ha nincs wifi, akkor nincs pontos idő sem. Viszont mint tudjuk, wifi nélkül élni sem lehet. Mármint nem bemeneti feltétele az életnek, de az ismerőseim körében a háztartások 90%-ában van Wifi. Igen még a nagyiknak is. Így hát próba szerencse alapon, az eltelt idő lesz a mércéje, annak hogy ez az ötlet mennyire életképes. Lássunk is neki. NodeMcu NTP Óra a megoldás.
ESP8266 Arduino Core Reference
Első körben, ha nincs telepítve az ESP core az Arduino Ide alá, akkor azt telepítsük. A GIT és a leírás ITT található. A telepítést a szokásos módon tudjuk végrehajtani, beillesztjük a github repo-t, a Beállítások ->> További alaplapkezelő URL-ekhez és az alaplapkezelőben telepítjük az ESP8266 csomagot. Személy szerint én a 2.4.1-es verziót használom, mert azzal a régi könyvtárak is működnek.
Ha ezzel megvagyunk, vagy már telepítve volt a lapkakészlet, akkor telepítsük a könyvtárakat, amiket használni fogunk.
Keressünk rá az alábbi könyvtárakra: MD_Max72xx , NTPclient, majd telepítsük is azokat a legfrissebb verzióval.
Ezzel a szoftveres részével a dolognak meg is vagyunk, nézzük a hardveres részét, ami ennél sokkal egyszerűbb lesz.
Nodemcu NTP óra Bekötés:
D5 – CLK
D7 – DIN
D8 – CS
3,3V – VCC
GND – GND
A Modul működik 3.3 V-on is bár, ez az NodeMcu-nak nem tesz túl jót. Érdemes külön tápellátással ellátni mindenképpen.
NodeMCU NTP óra forráskód:
#include <MD_MAX72xx.h> #include <SPI.h> #include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> const char *ssid = "Your SSID"; const char *password = "Password"; char timeprint[20]=""; String timenow; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "hu.pool.ntp.org", 7200, 60000); #define DEBUG 1 #if DEBUG #define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); } #define PRINTS(x) Serial.print(F(x)) #define PRINTD(x) Serial.println(x, DEC) #else #define PRINT(s, x) #define PRINTS(x) #define PRINTD(x) #endif #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_DEVICES 8 #define CLK_PIN D5 // SCK #define DATA_PIN D7 // MOSI #define CS_PIN D8 // SS MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); #define DELAYTIME 200 // millisecundum void scrollText(char *p) { uint8_t charWidth; uint8_t cBuf[10]; // Karakterek száma PRINTS("\nScrolling text"); mx.clear(); while (*p != '\0') { charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); for (uint8_t i=0; i<=charWidth; i++) { mx.transform(MD_MAX72XX::TSL); if (i < charWidth) mx.setColumn(0, cBuf[i]); delay(DELAYTIME); } } } void setup() { Serial.begin(115200); WiFi.begin(ssid, password); if ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ("\n No Wifi"); } timeClient.begin(); mx.begin(); #if DEBUG Serial.begin(115200); #endif PRINTS("\n NTP Time"); } void loop() { timeClient.update(); timenow = timeClient.getFormattedTime(); timenow.toCharArray(timeprint, 20); #if 1 if ( WiFi.status() != WL_CONNECTED ) { scrollText("No Wifi"); WiFi.begin(ssid, password); } else { scrollText(timeprint); Serial.println("\n"+timeClient.getFormattedTime()); delay(100); } #endif }
Ezzel a megoldással csak, egyetlen egy probléma van, hogy ez a jelenlegi nyári időszámítás szerinti időt mutatja. Tehát UTC + 2-ben. Konklúzió? Hozzá kell nyúlni az órához, tehát nem jó.
A következő oldalon bemutatom, azt a megoldást, ahol már nem kell a kódhoz hozzányúlni, és teljesen automatán átáll a téli vagy a nyári időszámításra.
A termékek megvásárolhatóak az alábbi oldalakon:
NodeMcu — Led Mátrix