Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****************************************************************************************************************************
- WiFi + NTP + EXPANDER + RELAY + BLYNK
- Starter v1.0 by Tomasz Majcher
- Licencja : Free
- *****************************************************************************************************************************/
- //
- // 2 WIRE !!!
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- WiFi Setup ---------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <ESP8266WiFi.h> // Library for WiFi Network (biblioteka do obsługi sieci WiFi)
- #include <WiFiUdp.h> // Library for NTP Server (biblioteka do obsługi serwera NTP)
- char ssid[] = "XXXXXX"; // your network SSID (nazwa twojej sieci WiFi)
- char pass[] = "XXXXXXXXXXX"; // your network password (hasło dostępu do sieci WiFi)
- WiFiUDP ntpUDP;
- unsigned long previousMillis = 0; // for WiFiReconect
- unsigned long interval = 30000; // for WiFiReconect
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- NTP server ---------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define NTP_DBG_PORT Serial // where Debug NTP ---> Serial
- #define _NTP_LOGLEVEL_ 0 // 0 = no NTP debug
- #include <NTPClient_Generic.h> // Library for NTP Server
- char timeServer[] = "pl.pool.ntp.org"; // Time Server (Europe/Poland)
- #define TIME_ZONE_OFFSET_HRS (2) // Time Zone (Europe/Warsaw)
- #define NTP_UPDATE_INTERVAL_MS 60000L // Ntp Update (60 seconds)
- NTPClient timeClient(ntpUDP, timeServer, (3600 * TIME_ZONE_OFFSET_HRS), NTP_UPDATE_INTERVAL_MS);
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- B L Y N K ----------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <BlynkSimpleEsp8266.h>
- #define VPIN_BUTTON_1 V1
- #define VPIN_BUTTON_2 V2
- #define VPIN_BUTTON_3 V3
- #define VPIN_BUTTON_4 V4
- #define VPIN_BUTTON_5 V5
- #define VPIN_BUTTON_6 V6
- #define VPIN_BUTTON_7 V7
- #define VPIN_BUTTON_8 V8
- #define AUTH "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // You should get Auth Token in the Blynk App.
- BlynkTimer timer;
- int toggleState_1 = 1; //Define integer to remember the toggle state for relay 1
- int toggleState_2 = 1; //Define integer to remember the toggle state for relay 2
- int toggleState_3 = 1; //Define integer to remember the toggle state for relay 3
- int toggleState_4 = 1; //Define integer to remember the toggle state for relay 4
- int toggleState_5 = 1; //Define integer to remember the toggle state for relay 5
- int toggleState_6 = 1; //Define integer to remember the toggle state for relay 6
- int toggleState_7 = 1; //Define integer to remember the toggle state for relay 7
- int toggleState_8 = 1; //Define integer to remember the toggle state for relay 8
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- E X P A N D E R ---------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <pcf8574_esp.h>
- #include <Wire.h>
- /*
- Wire.h already defines "Wire" which the PCF8574-class would use by default,
- but for the sakes of an example let's define our own instance of it and use that instead!
- Also, since I2C is emulated on the ESP8266 let's redefine what pins to use as SDA and SCL
- and instead swap them around!
- DO NOT FORGET TO WIRE ACCORDINGLY, SDA GOES TO GPIO5, SCL TO GPIO4 (ON NODEMCU GPIO5 IS D1 AND GPIO4 IS D2)
- */
- TwoWire rWire; // wire SCL D2 (GPIO4), SCA D1 (GPIO5)
- PCF857x expander(0x20, &rWire); // expander on 0x20
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- R E L A Y S -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define RELAY0 0 // reserved (to manage from 1 to 8)
- #define RELAY1 0 // RELAY 1 on pin 0 (EXPANDER)
- #define RELAY2 1 // RELAY 2 on pin 1 (EXPANDER)
- #define RELAY3 2 // RELAY 3 on pin 2 (EXPANDER)
- #define RELAY4 3 // RELAY 4 on pin 3 (EXPANDER)
- #define RELAY5 4 // RELAY 5 on pin 4 (EXPANDER)
- #define RELAY6 5 // RELAY 6 on pin 5 (EXPANDER)
- #define RELAY7 6 // RELAY 7 on pin 6 (EXPANDER)
- #define RELAY8 7 // RELAY 8 on pin 7 (EXPANDER)
- #define RelayMin 1 // define first RELAY (to debug)
- #define RelayMax 8 // define last RELAY (to debug)
- const byte RELAY[9] = { RELAY0, RELAY1, RELAY2, RELAY3, RELAY4, RELAY5, RELAY6, RELAY7, RELAY8 };
- /*
- How to use ?
- RelayOn(0); turn on all relay (set to LOW)
- RelayOff(0); turn off all relay (set to HIGH)
- RelayOn(1); turn on relay nr. 1 (set to LOW)
- RelayOn(3); turn on relay nr. 3 (set to LOW)
- RelayOff(3); turn off relay nr. 1 (set to HIGH)
- RelayOff(1); turn off relay nr. 3 (set to HIGH)
- */
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K ------------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #include <TaskScheduler.h> // scheluder
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- 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;
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- L A N G U A G E S E T U P ----------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define LANGUAGE 0 // 0 (Polish), 1 (English)
- #if LANGUAGE == 0 // if POLISH Language
- #define POLISH 1
- #define ENGLISH 0
- #endif
- #if LANGUAGE == 1 // if ENGLISH Language
- #define POLISH 0
- #define ENGLISH 1
- #endif
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E R I A L S E T U P --------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- #define SERIAL true
- #define SerialSpeed 57600
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA DNI TYGODNIA / STRUCT DAY OF WEEK *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- const char PL_Day_0 [] = "Fake";
- const char PL_Day_1 [] = "Niedziela";
- const char PL_Day_2 [] = "Poniedzialek";
- const char PL_Day_3 [] = "Wtorek";
- const char PL_Day_4 [] = "Sroda";
- const char PL_Day_5 [] = "Czwartek";
- const char PL_Day_6 [] = "Piatek";
- const char PL_Day_7 [] = "Sobota";
- const char EN_Day_0 [] = "Fake";
- const char EN_Day_1 [] = "Sunday";
- const char EN_Day_2 [] = "Monday";
- const char EN_Day_3 [] = "Tuesday";
- const char EN_Day_4 [] = "Wednesday";
- const char EN_Day_5 [] = "Thursday";
- const char EN_Day_6 [] = "Friday";
- const char EN_Day_7 [] = "Saturday";
- const char * const PL_DAY[] = { PL_Day_0, PL_Day_1, PL_Day_2, PL_Day_3, PL_Day_4, PL_Day_5, PL_Day_6, PL_Day_7 }; // in POLISH
- const char * const EN_DAY[] = { EN_Day_0, EN_Day_1, EN_Day_2, EN_Day_3, EN_Day_4, EN_Day_5, EN_Day_6, EN_Day_7 }; // in ENGLISH
- // ------------------------------------------------------------------------------------------------------------------- //
- // *** STRUKTURA MIESIĄCE / STRUCT MONTH *** //
- // ------------------------------------------------------------------------------------------------------------------- //
- const char PL_MONTH_00 [] = "Fake";
- const char PL_MONTH_01 [] = "Styczen";
- const char PL_MONTH_02 [] = "Luty";
- const char PL_MONTH_03 [] = "Marzec";
- const char PL_MONTH_04 [] = "Kwiecien";
- const char PL_MONTH_05 [] = "Maj";
- const char PL_MONTH_06 [] = "Czerwiec";
- const char PL_MONTH_07 [] = "Lipiec";
- const char PL_MONTH_08 [] = "Sierpien";
- const char PL_MONTH_09 [] = "Wrzesien";
- const char PL_MONTH_10 [] = "Pazdziernik";
- const char PL_MONTH_11 [] = "Listopad";
- const char PL_MONTH_12 [] = "Grudzien";
- const char EN_MONTH_00 [] = "Fake";
- const char EN_MONTH_01 [] = "January";
- const char EN_MONTH_02 [] = "February";
- const char EN_MONTH_03 [] = "March";
- const char EN_MONTH_04 [] = "April";
- const char EN_MONTH_05 [] = "May";
- const char EN_MONTH_06 [] = "June";
- const char EN_MONTH_07 [] = "July";
- const char EN_MONTH_08 [] = "August";
- const char EN_MONTH_09 [] = "September";
- const char EN_MONTH_10 [] = "October";
- const char EN_MONTH_11 [] = "November";
- const char EN_MONTH_12 [] = "December";
- const char * const PL_MONTH[] = { PL_MONTH_00,
- PL_MONTH_01, PL_MONTH_02, PL_MONTH_03,
- PL_MONTH_04, PL_MONTH_05, PL_MONTH_06,
- PL_MONTH_07, PL_MONTH_08, PL_MONTH_09,
- PL_MONTH_10, PL_MONTH_11, PL_MONTH_12
- };
- const char * const EN_MONTH[] = { EN_MONTH_00,
- EN_MONTH_01, EN_MONTH_02, EN_MONTH_03,
- EN_MONTH_04, EN_MONTH_05, EN_MONTH_06,
- EN_MONTH_07, EN_MONTH_08, EN_MONTH_09,
- EN_MONTH_10, EN_MONTH_11, EN_MONTH_12
- };
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- M Y N T P S T R U C T --------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- struct TIMEDATA
- {
- // *** U T C T I M E & D A T A *** ///
- int iUTCYear; // year UTC integer
- int iUTCMonth; // month UTC integer
- String sUTCMonth; // month UTC string
- String sUTCDoW; // day of week UTC string
- int iUTCDay; // day UTC integer
- int iUTCHours; // hour UTC integer
- String sUTCHours; // hour UTC string
- int iUTCMinutes; // minutes UTC integer
- String sUTCMinutes; // minutes UTC string
- int iUTCSeconds; // seconds UTC integer
- String sUTCSeconds; // seconds UTC string
- // *** L O C T I M E & D A T A *** ///
- int iLOCYear;
- String sLOCMonth;
- int iLOCMonth;
- String sLOCWeekDay;
- int iLOCWeekDay; // Day of week (need re-build library by Tomasz Majcher)
- int iLOCDay;
- int iLOCHours;
- String sLOCHours;
- int iLOCMinutes;
- String sLOCMinutes;
- int iLOCSeconds;
- String sLOCSeconds;
- // *** E X T R A S T R I N G *** ///
- //String sPL_DayOfWeek; // Day of week (need re-build library by Tomasz Majcher)
- //String sEN_DayOfWeek; // Day of week (need re-build library by Tomasz Majcher)
- String sPL_Month;
- String sEN_Month;
- }
- MyNTP;
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S E R I A L I N I T ---------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void SerialInit()
- {
- #if SERIAL
- Serial.begin(SerialSpeed); // init Serial and set speed
- while (!Serial); // wait if not ready
- Serial.printf("\n\n"); // next line please
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- D R A W L I N E --------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void DrawLine(byte l, char s)
- {
- #if SERIAL
- Serial.printf("\n");
- for (byte i=0; i<l; i++) Serial.print(s);
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- W i F i I N I T --------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void WiFiInit()
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, pass);
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [WiFI] Connecting to WiFi ..");
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [WiFI] Łącze z siecią WiFi ..");
- #endif
- #endif
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print('.');
- delay(200);
- }
- //statWiFi();
- WiFi.setAutoReconnect(true);
- WiFi.persistent(true);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- WiFiStat ------------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void WiFiStat()
- {
- switch (WiFi.status())
- {
- case WL_NO_SSID_AVAIL:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [WiFI] Configured SSID cannot be reached");
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [WiFI] Nie można osiągnąć skonfigurowanego identyfikatora SSID");
- #endif
- #endif
- break;
- case WL_CONNECTED:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [WiFI] Connection successfully established");
- Serial.printf("\n[ESP] [WiFI] Your IP : %s", WiFi.localIP().toString().c_str());
- Serial.printf("\n[ESP] [WiFI] Received Signal Strength Indication : %d", WiFi.RSSI());
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [WiFI] Pomyślnie nawiązano połączenie");
- Serial.printf("\n[ESP] [WiFI] Twój adres IP : %s", WiFi.localIP().toString().c_str());
- Serial.printf("\n[ESP] [WiFI] Wskazanie siły odbieranego sygnału : %d", WiFi.RSSI());
- #endif
- #endif
- break;
- case WL_CONNECT_FAILED:
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [WiFI] Connection failed");
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [WiFI] Połączenie nieudane");
- #endif
- #endif
- break;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- reconect Wi-Fi ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- void WiFiReconect()
- {
- unsigned long currentMillis = millis();
- if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) // if no WiFi connect now
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [WiFI] Reconnecting to WiFi...");
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [WiFI] Ponowne łączenie z Wi-Fi...");
- #endif
- #endif
- WiFi.disconnect();
- WiFi.begin(ssid, pass);
- WiFiStat(); // show WiFi Status
- previousMillis = currentMillis;
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // ---N T P I N I T ------------------------------------------------------------------------------------------------ //
- // ------------------------------------------------------------------------------------------------------------------- //
- int NTPInit()
- {
- timeClient.update();
- if (timeClient.updated())
- {
- #if SERIAL
- DrawLine(60,'*');
- #if ENGLISH
- Serial.printf("\n[ESP] [NTP] Time Update :-)");
- Serial.printf("\n[ESP] [NTP] Using NTP Server : %s", timeClient.getPoolServerName().c_str());
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [NTP] Czas został zaktualizowany :-)");
- Serial.printf("\n[ESP] [NTP] Używasz Serwera NTP : %s", timeClient.getPoolServerName().c_str());
- #endif
- #endif
- return 1; // return 1 if time is update
- }
- else
- {
- #if SERIAL
- #if ENGLISH
- Serial.printf("\n[ESP] [NTP] Time in not Update !!!");
- #endif
- #if POLISH
- Serial.printf("\n[ESP] [NTP] Czas nie został zaktualizowany !!!");
- #endif
- #endif
- return 0; // return 0 if time is not update
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- S H O W N T P ----------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Show_NTP()
- {
- #if SERIAL
- DrawLine(60,'*');
- #if POLISH
- Serial.printf("\n[ESP] [TIME] UTC Czas : %s", timeClient.getFormattedUTCTime().c_str());
- Serial.printf("\n[ESP] [TIME] UTC Data : %d/%d/%d", timeClient.getUTCDay(),timeClient.getUTCMonth(),timeClient.getUTCYear());
- Serial.printf("\n[ESP] [TIME] LOC Czas : %s", timeClient.getFormattedTime().c_str());
- Serial.printf("\n[ESP] [TIME] LOC Data : %d/%d/%d", timeClient.getDay(),timeClient.getMonth(),timeClient.getYear());
- //Serial.printf("\n[ESP] [TIME] EXT Data : %s %d %s %d", MyNTP.sPL_DayOfWeek, timeClient.getDay(), MyNTP.sPL_Month, timeClient.getYear());
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [TIME] UTC Time : %s", timeClient.getFormattedUTCTime().c_str());
- Serial.printf("\n[ESP] [TIME] UTC Data : %d/%d/%d", timeClient.getUTCDay(),timeClient.getUTCMonth(),timeClient.getUTCYear());
- Serial.printf("\n[ESP] [TIME] LOC Time : %s", timeClient.getFormattedTime().c_str());
- Serial.printf("\n[ESP] [TIME] LOC Data : %d/%d/%d", timeClient.getDay(),timeClient.getMonth(),timeClient.getYear());
- //Serial.printf("\n[ESP] [TIME] EXT Data : %s %d %s %d", MyNTP.sEN_DayOfWeek, timeClient.getDay(), MyNTP.sEN_Month, timeClient.getYear());
- #endif
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- U P D A T E M Y N T P S T R U C T U R E ------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void MyNTP_Update()
- {
- timeClient.update();
- // *** U T C T I M E & D A T A *** ///
- MyNTP.iUTCYear = timeClient.getUTCYear();
- MyNTP.iUTCMonth = timeClient.getUTCMonth();
- MyNTP.sUTCMonth = timeClient.getUTCMonthStr();
- MyNTP.sUTCDoW = timeClient.getUTCDoW();
- MyNTP.iUTCDay = timeClient.getUTCDay();
- MyNTP.iUTCHours = timeClient.getUTCHours();
- MyNTP.sUTCHours = timeClient.getUTCStrHours();
- MyNTP.iUTCMinutes = timeClient.getUTCMinutes();
- MyNTP.sUTCMinutes = timeClient.getUTCStrMinutes();
- MyNTP.iUTCSeconds = timeClient.getUTCSeconds();
- MyNTP.sUTCSeconds = timeClient.getUTCStrSeconds();
- // *** L O C T I M E & D A T A *** ///
- MyNTP.iLOCYear = timeClient.getYear();
- MyNTP.sLOCMonth = timeClient.getMonthStr();
- MyNTP.iLOCMonth = timeClient.getMonth();
- MyNTP.sLOCWeekDay = timeClient.getDoW();
- //MyNTP.iLOCWeekDay = timeClient.getWeek();
- MyNTP.iLOCDay = timeClient.getDay();
- MyNTP.iLOCHours = timeClient.getHours();
- MyNTP.sLOCHours = timeClient.getStrHours();
- MyNTP.iLOCMinutes = timeClient.getMinutes();
- MyNTP.sLOCMinutes = timeClient.getStrMinutes();
- MyNTP.iLOCSeconds = timeClient.getSeconds();
- MyNTP.sLOCSeconds = timeClient.getStrSeconds();
- // *** E X T R A S T R I N G *** ///
- //MyNTP.sPL_DayOfWeek = PL_DAY[MyNTP.iLOCWeekDay]; // day of week (dzień tygodnia) POLISH (need Re-Build Library NTP by Tomasz Majcher)
- //MyNTP.sEN_DayOfWeek = EN_DAY[MyNTP.iLOCWeekDay]; // day of week (dzień tygodnia) ENGLISH(need Re-Build Library NTP by Tomasz Majcher)
- MyNTP.sPL_Month = PL_MONTH[MyNTP.iLOCMonth]; // month (miesiąc) in POLISH
- MyNTP.sEN_Month = EN_MONTH[MyNTP.iLOCMonth]; // month (miesiąć) in ENGLISH
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K S E T U P ------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void TaskInit()
- {
- 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
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K C A L L B A C K ------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task0Callback() // run with interval 60 minutes
- {
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K C A L L B A C K ------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task1Callback() // run with interval 60 seconds
- {
- #if SERIAL
- Serial.printf("\n\n[ESP] [TASK1] Inside Task1Callback() ");
- DrawLine(60,'*');
- 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
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K C A L L B A C K ------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task2Callback() // run with interval 1 seconds
- {
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- T A S K C A L L B A C K ------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void Task3Callback() // run with interval 90 seconds
- {
- #if SERIAL
- Serial.printf("\n\n[ESP] [TASK3] Inside Task3Callback() ");
- MyNTP_Update(); // copy Time & Data to structure MyNTP
- Show_NTP(); // show NTP time & datarunner.execute();
- #endif
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- E X P A N D E R I N I T ------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void ExpanderInit()
- {
- rWire.begin(5, 4);
- rWire.setClock(100000L);
- expander.begin();
- RelayOff(0); // all Relay OFF (send 0)
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- M A I N S E T U P ------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void setup()
- {
- SerialInit(); // check and init serial monitor
- WiFiInit(); // start WiFi Connection
- WiFiStat(); // show WiFi Status
- WiFiReconect(); // check WiFi Connection and conect if loss !!!
- timeClient.begin(); // start timeClient
- DrawLine(60,'*'); // Draw 60x separator *
- if ( WiFi.status() == WL_CONNECTED ) // if WiFi is OK
- {
- while(!NTPInit()); // init NTP server
- MyNTP_Update(); // copy Time & Data to structure MyNTP
- Show_NTP(); // show NTP time & data
- }
- ExpanderInit(); // ExpanderInit
- TaskInit(); // Init Task Scheluder
- /*
- RelayOn(1);
- RelayOn(10);
- delay(2000);
- RelayOff(1);
- RelayOff(10);
- delay(2000);
- RelayOn(0);
- delay(2000);
- RelayOff(0);
- */
- timer.setInterval(3000L, checkBlynkStatus); // check if Blynk server is connected every 3 seconds
- Blynk.config(AUTH);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- M A I N L O O P --------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void loop()
- {
- runner.execute(); // scheluder
- Blynk.run();
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- //
- // *** R E L A Y S ***
- //
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Relay to OFF -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void RelayOff(byte nr)
- {
- if (!nr) // if nr = 0 all relay set to OFF (RelayMin, RelayMax)
- {
- for (byte i = RelayMin; i <= RelayMax; i++) expander.write(RELAY[i], HIGH);
- #if SERIAL
- DrawLine(60,'-'); // draw line
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Wyłączono wszystkie przekaźniki");
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] Turn off all relay");
- #endif
- #endif
- }
- else
- {
- if ( nr >= RelayMin && nr <= RelayMax ) // only value (1-8)
- {
- if ( !expander.read(RELAY[nr]) ) // if Relay is ON
- {
- expander.write(RELAY[nr], HIGH); // turn off Relay
- #if SERIAL
- DrawLine(60,'-'); // draw line
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Wyłączono przekaźnik nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] Turn off relay no. %d", nr);
- #endif
- #endif
- }
- else // relay is off, re-off
- {
- #if SERIAL
- DrawLine(60,'-');
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Wykryto próbę ponownego wyłączenia przekaźnika nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] An attempt to re-engage the relay has been detected no. %d", nr);
- #endif
- #endif
- }
- }
- else // ERROR !!! Relay does not exist (jeśli taki przekaźnik nie istnieje)
- {
- #if SERIAL
- DrawLine(60,'-');
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Nie ma takiego przekaźnika, nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] There is no such relay, no. %d", nr);
- #endif
- #endif
- }
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // --- Relay to OFF -------------------------------------------------------------------------------------------------- //
- // ------------------------------------------------------------------------------------------------------------------- //
- void RelayOn(byte nr)
- {
- if (!nr) // if nr = 0 all relay set to ON (RelayMin, RelayMax)
- {
- for (byte i = RelayMin; i <= RelayMax; i++) expander.write(RELAY[i], LOW);
- #if SERIAL
- DrawLine(60,'-'); // draw line
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Włączono wszystkie przekaźniki");
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] Turn on all relay");
- #endif
- #endif
- }
- else
- {
- if ( nr >= RelayMin && nr <= RelayMax ) // only value (1-8)
- {
- if ( expander.read(RELAY[nr]) ) // if Relay is OFF
- {
- expander.write(RELAY[nr], LOW); // turn on Relay
- #if SERIAL
- DrawLine(60,'-'); // draw line
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Włączono przekaźnik nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] Turn on relay no. %d", nr);
- #endif
- #endif
- }
- else // relay is on, re-on
- {
- #if SERIAL
- DrawLine(60,'-');
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Wykryto próbę ponownego włączenia przekaźnika nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] An attempt to re-engage the relay has been detected no. %d", nr);
- #endif
- #endif
- }
- }
- else
- {
- #if SERIAL
- DrawLine(60,'-'); // draw line
- #if POLISH
- Serial.printf("\n[ESP] [RELAY] Nie ma takiego przekaźnika, nr. %d", nr);
- #endif
- #if ENGLISH
- Serial.printf("\n[ESP] [RELAY] There is no such relay, no. %d", nr);
- #endif
- #endif
- }
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- //
- //
- // B L Y N K S E C T I O N
- //
- //
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK_CONNECTED
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_CONNECTED()
- {
- Blynk.syncVirtual(VPIN_BUTTON_1);
- Blynk.syncVirtual(VPIN_BUTTON_2);
- Blynk.syncVirtual(VPIN_BUTTON_3);
- Blynk.syncVirtual(VPIN_BUTTON_4);
- Blynk.syncVirtual(VPIN_BUTTON_5);
- Blynk.syncVirtual(VPIN_BUTTON_6);
- Blynk.syncVirtual(VPIN_BUTTON_7);
- Blynk.syncVirtual(VPIN_BUTTON_8);
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 1
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_1)
- {
- toggleState_1 = param.asInt();
- if(toggleState_1)
- {
- RelayOn(1);
- }
- else
- {
- RelayOff(1);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 2
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_2)
- {
- toggleState_2 = param.asInt();
- if(toggleState_2)
- {
- RelayOn(2);
- }
- else
- {
- RelayOff(2);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 3
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_3)
- {
- toggleState_3 = param.asInt();
- if(toggleState_3)
- {
- RelayOn(3);
- }
- else
- {
- RelayOff(3);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 4
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_4)
- {
- toggleState_4 = param.asInt();
- if(toggleState_4)
- {
- RelayOn(4);
- }
- else
- {
- RelayOff(4);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 5
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_5)
- {
- toggleState_5 = param.asInt();
- if(toggleState_5)
- {
- RelayOn(5);
- }
- else
- {
- RelayOff(5);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 6
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_6)
- {
- toggleState_6 = param.asInt();
- if(toggleState_6)
- {
- RelayOn(6);
- }
- else
- {
- RelayOff(6);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 7
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_7)
- {
- toggleState_7 = param.asInt();
- if(toggleState_7)
- {
- RelayOn(7);
- }
- else
- {
- RelayOff(7);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // BLYNK BUTTON 8
- // ------------------------------------------------------------------------------------------------------------------- //
- BLYNK_WRITE(VPIN_BUTTON_8)
- {
- toggleState_8 = param.asInt();
- if(toggleState_8)
- {
- RelayOn(8);
- }
- else
- {
- RelayOff(8);
- }
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // CHECK BLYNK
- // ------------------------------------------------------------------------------------------------------------------- //
- void checkBlynkStatus()
- {
- // no yet available
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- // E N D
- // ------------------------------------------------------------------------------------------------------------------- //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement