Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ------------------------------------------------------------------------------------------------------------------- //
- // //
- // Simple ESP8266 NodeMCU 1.0 MATRIX-CLOCK by TOMASZ MAJCHER (TRANSLINE GROUP POAND) //
- // //
- // e-mail : [email protected] //
- // licence : DonationWare //
- // paypal : @TomaszMajcher //
- // www : https://esp32dev.blogspot.com/ //
- // //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // v1.0 Free-Lite (13.06.2021) by Tomasz Majcher
- //
- // download library (MD_PAROLA BID DIGIT !!!) from https://pastebin.com/tuxnqmW2
- // replace file : 'D_MAX72xx_font.cpp' in 'C:\USERS\UserName\Documents\Arduino\libraries\MD_MAX82XX\src'
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // GND <---> GND
- // VCC <---> Vin
- // CLK <---> D5 (NodeMCU)
- // DAT <---> D7 (NodeMCU)
- // CS <---> D8 (NodeMCU)
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L A N G U A G E S E T U P ----------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define LANGUAGE 0 // 0 (Polish), 1 (English), 2 (Germany)
- #if LANGUAGE == 0
- #define POLISH 1
- #define ENGLISH 0
- #define GERMANY 0
- #endif
- #if LANGUAGE == 1
- #define POLISH 0
- #define ENGLISH 1
- #define GERMANY 0
- #endif
- #if LANGUAGE == 2
- #define POLISH 0
- #define ENGLISH 0
- #define GERMANY 1
- #endif
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- M A C R O D E F I N E --------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
- const char *ssid = "XXXXXX"; // network wifi ssid
- const char *password = "XXXXXXXXXXX"; // network wifi password
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- I N C L U D E L I B R A R Y --------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- extern "C" char* sbrk(int incr);
- #include <ESP8266WiFi.h> // biblioteka Wi-Fi
- #include <NTPClient.h> // NTP klient (Time)
- #include <WiFiUdp.h> // UDP dla NTP (Time)
- #include <TaskScheduler.h> // scheluder
- #include <TimeLib.h>
- #include <Arduino.h>
- #include <MD_Parola.h>
- #include <MD_MAX72xx.h>
- #define SERIAL true
- #define SerialSpeed 57600
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- D E F I N E - P A R O L A - O P T Y M I Z E D T O 8 * M A X 7 2 1 9 --- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define HARDWARE_TYPE MD_MAX72XX::FC16_HW
- #define MAX_DEVICES 8 // ilość wyświetlaczy ( 8 )
- #define CLK_PIN D5 // CLK (SCK) PIN D5 na ESP2886
- #define DATA_PIN D7 // DATA (MOSI) PIN D7 na ESP2886
- #define CS_PIN D8 // CS (SS) PIND D8 na ESP2886
- // GND do G na ESP2886
- // VCC do 3V na ESP2886
- MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- P R O T O T Y P Y --------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback(); // funkcja dla task_0
- void Task1Callback(); // funkcja dla task_1
- void Task2Callback(); // funkcja dla task_2
- void Task3Callback(); // funkcja dla task_3
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Z A D A N I A S C H E L U D E R ' A ------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- Task task_0( 3600000, TASK_FOREVER, &Task0Callback); // task_0 - co 1 godzinę
- Task task_1( 60000, TASK_FOREVER, &Task1Callback); // task_1 - co 1 minutę
- Task task_2( 1000, TASK_FOREVER, &Task2Callback); // task_2 - co 1 sekundę
- Task task_3( 90000, TASK_FOREVER, &Task3Callback); // task_3 - co 90 sekund
- Scheduler runner;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** DIGITS *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- // DUŻE CYFRY 0 1 2 3 4 5 6 7 8 9
- const char * BigDigit[10] = { "\27", "\1", "\2", "\3", "\4", "\5", "\6", "\7", "\10", "\11" };
- // NORMALNE CYFRY 0 1 2 3 4 5 6 7 8 9
- const char * MediumDigit[10] = { "\60", "\61", "\62", "\63", "\64", "\65", "\66", "\67", "\70", "\71" };
- // MAŁE CYFRY 0 1 2 3 4 5 6 7 8 9
- const char * LittleDigit[10] = { "\12", "\13", "\14", "\15", "\16", "\17", "\20", "\21", "\22", "\23" };
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** WiFi Reconect *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- unsigned long previousMillis = 0;
- unsigned long interval = 30000;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA Time *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- struct TIME_DATA
- {
- int Hour = 0;
- int Minute = 0;
- int Second = 0;
- String FormatedData = "NULL";
- String ShortData = "NULL";
- String LongData = "NULL";
- int DayOfTheWeek = 0;
- int DayOfTheMonth = 0;
- int Month = 0;
- int Year = 0;
- }
- Time;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA DZIEN *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- #if POLISH
- const char Day_0 [] = "Niedziela";
- const char Day_1 [] = "Poniedzialek";
- const char Day_2 [] = "Wtorek";
- const char Day_3 [] = "Sroda";
- const char Day_4 [] = "Czwartek";
- const char Day_5 [] = "Piatek";
- const char Day_6 [] = "Sobota";
- #endif
- #if ENGLISH
- const char Day_0 [] = "Sunday";
- const char Day_1 [] = "Monday";
- const char Day_2 [] = "Tuesday";
- const char Day_3 [] = "Wednesday";
- const char Day_4 [] = "Thursday";
- const char Day_5 [] = "Friday";
- const char Day_6 [] = "Saturday";
- #endif
- #if GERMANY
- const char Day_0 [] = "Sonntag";
- const char Day_1 [] = "Montag";
- const char Day_2 [] = "Dienstag";
- const char Day_3 [] = "Mittwoch";
- const char Day_4 [] = "Donnerstag";
- const char Day_5 [] = "Freitag";
- const char Day_6 [] = "Samstag";
- #endif
- const char * const DAY[] = { Day_0, Day_1, Day_2, Day_3, Day_4, Day_5, Day_6 }; // dni tygodnia [0..6]
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA MONTH *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- #if POLISH
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "Styczen";
- const char MONTH_2 [] = "Luty";
- const char MONTH_3 [] = "Marzec";
- const char MONTH_4 [] = "Kwiecien";
- const char MONTH_5 [] = "Maj";
- const char MONTH_6 [] = "Czerwiec";
- const char MONTH_7 [] = "Lipiec";
- const char MONTH_8 [] = "Sierpien";
- const char MONTH_9 [] = "Wrzesien";
- const char MONTH_10 [] = "Pazdziernik";
- const char MONTH_11 [] = "Listopad";
- const char MONTH_12 [] = "Grudzien";
- #endif
- #if ENGLISH
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "January";
- const char MONTH_2 [] = "February";
- const char MONTH_3 [] = "March";
- const char MONTH_4 [] = "April";
- const char MONTH_5 [] = "May";
- const char MONTH_6 [] = "June";
- const char MONTH_7 [] = "July";
- const char MONTH_8 [] = "August";
- const char MONTH_9 [] = "September";
- const char MONTH_10 [] = "October";
- const char MONTH_11 [] = "November";
- const char MONTH_12 [] = "December";
- #endif
- #if GERMANY
- const char MONTH_0 [] = "NULL";
- const char MONTH_1 [] = "Januar";
- const char MONTH_2 [] = "Februar";
- const char MONTH_3 [] = "März";
- const char MONTH_4 [] = "April";
- const char MONTH_5 [] = "Mai";
- const char MONTH_6 [] = "Juni";
- const char MONTH_7 [] = "Juli";
- const char MONTH_8 [] = "August";
- const char MONTH_9 [] = "September";
- const char MONTH_10 [] = "Oktober";
- const char MONTH_11 [] = "November";
- const char MONTH_12 [] = "Dezember";
- #endif
- const char * const MONTH[] = { MONTH_0, MONTH_1, MONTH_2, MONTH_3, MONTH_4, MONTH_5, MONTH_6,
- MONTH_7, MONTH_8, MONTH_9, MONTH_10, MONTH_11, MONTH_12 };
- WiFiUDP ntpUDP;
- NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600);
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task0Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback()
- {
- timeClient.update();
- unsigned long epochTime = timeClient.getEpochTime();
- struct tm *ptm = gmtime ( (time_t *) &epochTime );
- Time.DayOfTheWeek = timeClient.getDay();
- Time.DayOfTheMonth = ptm->tm_mday;
- Time.Month = ptm->tm_mon+1;
- Time.Year = ptm->tm_year+1900;
- Time.FormatedData
- = String(DAY[Time.DayOfTheWeek])
- + ", "
- + String(Time.DayOfTheMonth)
- + " "
- + String(MONTH[Time.Month])
- + " "
- + String(Time.Year);
- Time.ShortData = String(Time.DayOfTheMonth)
- + " "
- + String(MONTH[Time.Month])
- + " "
- + String(Time.Year);
- Time.LongData = String(DAY[Time.DayOfTheWeek])
- + " "
- + String(Time.DayOfTheMonth)
- + "/"
- + String(Time.Month);
- // --- formatowanie długości wyświetlanej daty ---
- if ( strlen(Time.LongData.c_str()) < 15 ) // jesli uda sie dokleci /RRRR
- {
- Time.LongData += "/" + String(Time.Year);
- }
- else
- if ( strlen(Time.LongData.c_str()) < 18 ) // jesli nie uda się dokleić /RRRR doklej /RR
- {
- Time.LongData += "/" + String(Time.Year % 100);
- }
- else
- if ( strlen(Time.LongData.c_str()) < 17 ) // jesli nie uda sie dokleic /RR
- {
- // nie rób nic :-)
- }
- // -----------------------------------------------
- #if SERIAL
- Serial.printf("\n\n[ESP] [TASK0] Data NTP \t: %s ", Time.FormatedData.c_str());
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task1Callback()
- {
- #if SERIAL
- String bufor;
- if (Time.Hour < 10)
- {
- bufor = "0";
- bufor += String(Time.Hour);
- }
- else
- {
- bufor = String(Time.Hour);
- }
- bufor += ":";
- if (Time.Minute < 10)
- {
- bufor += "0";
- bufor += String(Time.Minute);
- }
- else
- {
- bufor += String(Time.Minute);
- }
- if (Time.Hour < 12) bufor += " AM";
- else bufor += " PM";
- Serial.printf("\n\n[ESP] [TASK1] [Time NTP] \t: %s", bufor.c_str());
- Serial.printf("\n[ESP] [TASK1] [Memory Free] : %u [kB]", ESP.getFreeHeap());
- Serial.printf("\n[ESP] [TASK1] [CPU frequency] : %u [MHz]",ESP.getCpuFreqMHz());
- Serial.printf("\n[ESP] [TASK1] [WiFi IP] : "); Serial.print(WiFi.localIP() );
- Serial.printf("\n[ESP] [TASK1] [LongData] \t: %s ", Time.LongData.c_str());
- Serial.printf("\n[ESP] [TASK1] [ShortData] \t: %s ", Time.ShortData.c_str());
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task2Callback()
- {
- timeClient.update();
- Time.Hour = timeClient.getHours()+1; // zapisz godzinę z serwera
- Time.Minute = timeClient.getMinutes(); // zapisz minutę z serwera
- Time.Second = timeClient.getSeconds(); // zapisz sekundę z serwera
- char TimeBufor[20] = " TOMEK "; // bufor do przechowywania czasu
- strcpy(TimeBufor, BigDigit[Time.Hour / 10]);
- strcat(TimeBufor, BigDigit[Time.Hour % 10]);
- if(Time.Second % 2) strcat(TimeBufor, "\24");
- else strcat(TimeBufor, "\26");
- strcat(TimeBufor, BigDigit[Time.Minute / 10]);
- strcat(TimeBufor, BigDigit[Time.Minute % 10]);
- strcat(TimeBufor, "\25");
- strcat(TimeBufor, BigDigit[Time.Second / 10]);
- strcat(TimeBufor, BigDigit[Time.Second % 10]);
- P.displayText(TimeBufor, PA_CENTER, 50, 1000, PA_PRINT, PA_PRINT);
- P.displayAnimate();
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task3Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task3Callback()
- {
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- stat Wi-Fi ---------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void statWiFi()
- {
- switch (WiFi.status())
- {
- case WL_NO_SSID_AVAIL:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\nConfigured SSID cannot be reached");
- #endif
- #if POLISH
- Serial.printf("\nNie można osiągnąć skonfigurowanego identyfikatora SSID");
- #endif
- #if GERMANY
- Serial.printf("\nKonfigurierte SSID ist nicht erreichbar");
- #endif
- #endif
- break;
- case WL_CONNECTED:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\nConnection successfully established");
- Serial.printf("\nYour IP : %s", WiFi.localIP().toString().c_str());
- Serial.printf("\nReceived Signal Strength Indication : %d", WiFi.RSSI());
- #endif
- #if POLISH
- Serial.printf("\nPomyślnie nawiązano połączenie");
- Serial.printf("\nTwój adres IP : %s", WiFi.localIP().toString().c_str());
- Serial.printf("\nWskazanie siły odbieranego sygnału : %d", WiFi.RSSI());
- #endif
- #if GERMANY
- Serial.printf("\nVerbindung erfolgreich hergestellt");
- Serial.printf("\nDeine IP-Adresse : %s", WiFi.localIP().toString().c_str());
- Serial.printf("\nAnzeige der empfangenen Signalstärke : %d", WiFi.RSSI());
- #endif
- #endif
- break;
- case WL_CONNECT_FAILED:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\nConnection failed");
- #endif
- #if POLISH
- Serial.printf("\nPołączenie nieudane");
- #endif
- #if GERMANY
- Serial.printf("\nVerbindung fehlgeschlagen");
- #endif
- #endif
- break;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- init Wi-Fi ---------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void initWiFi()
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- #if SERIAL
- #if ENGLISH
- Serial.printf("\nConnecting to WiFi ..");
- #endif
- #if POLISH
- Serial.printf("\nŁącze z siecią WiFi ..");
- #endif
- #if GERMANY
- Serial.printf("\nNetzwerkverbindung mit WLAN ..");
- #endif
- #endif
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print('.');
- delay(200);
- }
- statWiFi();
- WiFi.setAutoReconnect(true);
- WiFi.persistent(true);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- reconect Wi-Fi ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void reconectWifi()
- {
- unsigned long currentMillis = millis();
- if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval))
- {
- #if SERIAL
- #if ENGLISH
- Serial.println("Reconnecting to WiFi...");
- #endif
- #if POLISH
- Serial.println("Ponowne łączenie z Wi-Fi...");
- #endif
- #if GERMANY
- Serial.println("Erneut mit WLAN verbinden...");
- #endif
- #endif
- WiFi.disconnect();
- WiFi.begin(ssid, password);
- statWiFi();
- previousMillis = currentMillis;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- SerialTypeWriter ---------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void SerialTypeWriter(const String & message, unsigned int wait)
- {
- for(const char c : message)
- {
- Serial.print(c);
- delay(wait);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E T U P ----------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void setup()
- {
- #if SERIAL
- Serial.begin(SerialSpeed);
- #endif
- initWiFi();
- runner.init(); // inicjalizuj scheluder
- runner.addTask(task_0); // dodaj zadanie do scheluder
- task_0.enable(); // włącz zadanie do scheluder
- runner.addTask(task_1); // dodaj zadanie do scheluder
- task_1.enable(); // włącz zadanie do scheluder
- runner.addTask(task_2); // dodaj zadanie do scheluder
- task_2.enable(); // włącz zadanie do scheluder
- runner.addTask(task_3); // dodaj zadanie do scheluder
- task_3.enable(); // włącz zadanie do scheluder
- // --- WYWOŁAJ TERAZ --------------------- //
- Task0Callback();
- Task1Callback();
- Task3Callback();
- // --------------------------------------- //
- P.begin();
- P.setIntensity(1);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L O O P ------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void loop()
- {
- runner.execute(); // scheluder init
- reconectWifi(); // check Wi-Fi status
- }
Advertisement
Add Comment
Please, Sign In to add comment