Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ------------------------------------------------------------------------------------------------------------------- //
- // //
- // Simple ESP8266 NodeMCU 0.2 RGB-MATRIX-CLOCK by TOMASZ MAJCHER (TRANSLINE GROUP POAND) //
- // //
- // e-mail : [email protected] //
- // licence : DonationWare //
- // paypal : @TomaszMajcher //
- // www : https://esp32dev.blogspot.com/ //
- // //
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- // v0.2 Free-Lite (10.07.2021) by Tomasz Majcher
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <PxMatrix.h>
- #include "FreeMonoBold12pt7b.h"
- #include "kongtext4pt7b.h"
- #include <Ticker.h>
- Ticker display_ticker;
- #define P_LAT 16
- #define P_A 5
- #define P_B 4
- #define P_C 15
- #define P_D 12
- #define P_E 0
- #define P_OE 2
- #define matrix_width 64
- #define matrix_height 32
- uint8_t display_draw_time=10;
- PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);
- uint16_t myRED = display.color565(255, 0, 0);
- uint16_t myGREEN = display.color565(0, 255, 0);
- uint16_t myBLUE = display.color565(0, 0, 255);
- uint16_t myWHITE = display.color565(255, 255, 255);
- uint16_t myYELLOW = display.color565(255, 255, 0);
- uint16_t myCYAN = display.color565(0, 255, 255);
- uint16_t myMAGENTA = display.color565(255, 0, 255);
- uint16_t myBLACK = display.color565(0, 0, 0);
- uint16_t myCOLORS[8]={myRED,myGREEN,myBLUE,myWHITE,myYELLOW,myCYAN,myMAGENTA,myBLACK};
- void display_updater()
- {
- display.display(display_draw_time);
- }
- void display_update_enable(bool is_enable)
- {
- if (is_enable)
- {
- display_ticker.attach(0.004, display_updater);
- }
- else
- {
- display_ticker.detach();
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- 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 <TaskScheduler.h> // scheluder
- #include <TimeLib.h>
- #include <Arduino.h>
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- N T P T I M E ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <NTPClient_Generic.h> // NTP klient (Time)
- #include <WiFiUdp.h> // UDP dla NTP (Time)
- WiFiUDP ntpUDP;
- char timeServer[] = "0.ca.pool.ntp.org";
- #define TIME_ZONE_OFFSET_HRS 2
- #define NTP_UPDATE_INTERVAL_MS 60000L
- NTPClient timeClient(ntpUDP, timeServer, (3600 * TIME_ZONE_OFFSET_HRS), NTP_UPDATE_INTERVAL_MS);
- bool F_TimeUpdate = false;
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E R I A L --------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define SERIAL true
- #define SerialSpeed 57600
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- 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( 60000, TASK_FOREVER, &Task0Callback); // task_0 - co 1 minutę
- 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;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** WiFi Reconect *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- unsigned long previousMillis = 0;
- unsigned long interval = 30000;
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA Time *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- struct TIME_DATA
- {
- int Hour = 0;
- int Minute = 0;
- int Second = 0;
- int DayOfTheWeek = 0;
- int DayOfTheMonth = 0;
- int Month = 0;
- int Year = 0;
- String ShortTime = "NULL";
- String lastH = "NULL";
- String lastM = "NULL";
- String lastS = "NULL";
- String currentH = "NULL";
- String currentM = "NULL";
- String currentS = "NULL";
- String lastampm = "NULL";
- String currentampm = "NULL";
- }
- S_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 };
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task0Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback()
- {
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task1Callback()
- {
- #if SERIAL
- 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() );
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task2Callback()
- {
- timeClient.update(); // update time
- if (timeClient.updated())
- {
- Serial.printf("\n********UPDATED********");
- F_TimeUpdate = true;
- S_Time.ShortTime = timeClient.getStrHours() + timeClient.getStrMinutes();
- S_Time.currentH = timeClient.getStrHours();
- S_Time.currentM = timeClient.getStrMinutes();
- S_Time.currentS = timeClient.getStrSeconds();
- if (timeClient.getHours() < 12) S_Time.currentampm = "AM";
- if (timeClient.getHours() > 11) S_Time.currentampm = "PM";
- }
- else
- {
- Serial.printf("\n******NOT UPDATED******");
- F_TimeUpdate = false;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- 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();
- timeClient.begin();
- 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 --------------------- //
- Task1Callback();
- Task2Callback();
- Task3Callback();
- Task0Callback();
- // --------------------------------------- //
- display.begin(16);
- display_update_enable(true);
- display.fillScreen(display.color565(0, 0, 0));
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L O O P ------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void loop()
- {
- runner.execute(); // scheluder init
- reconectWifi(); // check Wi-Fi status
- if(F_TimeUpdate)
- {
- if(S_Time.currentH != S_Time.lastH) // if new hour
- {
- display.setCursor(0, 16);
- display.setFont(&FreeMonoBold12pt7b);
- display.setTextColor(myGREEN);
- display.fillRect(0, 8, 24, 15, myBLACK);
- display.print(S_Time.currentH);
- display.setFont();
- S_Time.lastH = S_Time.currentH;
- }
- if(S_Time.currentM != S_Time.lastM) // if new minute
- {
- display.setCursor(26, 16);
- display.setFont(&FreeMonoBold12pt7b);
- display.setTextColor(myGREEN);
- display.fillRect(26, 8, 25, 15, myBLACK);
- display.print(S_Time.currentM);
- display.setFont();
- S_Time.lastM = S_Time.currentM;
- }
- if (S_Time.currentS != S_Time.lastS)
- {
- display.fillRect(51, 17, 13, 6, myBLACK);
- display.setCursor(51, 16);
- display.setTextSize(1);
- display.setTextColor(myYELLOW);
- display.setFont(&kongtext4pt7b);
- display.print(S_Time.currentS);
- display.setFont();
- S_Time.lastS = S_Time.currentS;
- }
- if (S_Time.currentampm != S_Time.lastampm)
- {
- display.fillRect(50, 7, 13, 6, myBLACK);
- display.setCursor(50, 7);
- display.setTextSize(1);
- display.setTextColor(myBLUE);
- display.setFont(&kongtext4pt7b);
- display.print(S_Time.currentampm);
- display.setFont();
- S_Time.lastampm = S_Time.currentampm;
- }
- static int c = 0;
- display.setCursor(20, 8);
- display.setTextSize(2);
- if(c)
- {
- display.setTextColor(myGREEN);
- display.print(":");
- display.setTextSize(1);
- c = 0;
- }
- else
- {
- display.setTextColor(myBLACK);
- display.print(":");
- display.setTextSize(1);
- c = 1;
- }
- F_TimeUpdate = false;
- }
- }
Add Comment
Please, Sign In to add comment