PowerTGS440

ESP32Time-Starter v1.0

Aug 12th, 2021
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 21.42 KB | None | 0 0
  1. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  2. // --- L A N G U A G E   S E T U P --------------------------------------------------------------------------------------------------------------- //
  3. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  4.  
  5. #define LANGUAGE 0                                            // 0 (Polish), 1 (English)
  6.                                                              
  7. #if LANGUAGE == 0                                                
  8.     #define POLISH 1
  9.     #define ENGLISH 0
  10. #endif
  11.  
  12. #if LANGUAGE == 1                                                      
  13.     #define POLISH 0                                        
  14.     #define ENGLISH 1    
  15. #endif
  16.  
  17. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  18. // --- D E F I N E   S E C T I O N  -------------------------------------------------------------------------------------------------------------- //
  19. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  20.  
  21. #define   SERIAL  1
  22. #define   DEBUG1  1                       // show struct psTIME
  23.  
  24. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  25. // --- PS RAM ------------------------------------------------------------------------------------------------------------------------------------ //
  26. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  27.  
  28. #include "esp_system.h"
  29. #include "esp32-hal-psram.h"
  30.  
  31. extern "C"
  32. {
  33.     #include <esp_spiram.h>
  34.     #include <esp_himem.h>
  35. }
  36.  
  37. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  38. // --- WiFi Settings ----------------------------------------------------------------------------------------------------------------------------- //
  39. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  40.  
  41. #include <WiFi.h>
  42. #define   SSID        "XXXXXX"                                              // nazwa sieci Wi-Fi
  43. #define   PASSWORD    "XXXXXXXXXXX"                                         // hasło sieci Wi-Fi
  44.  
  45. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  46. // --- NTP Settings ------------------------------------------------------------------------------------------------------------------------------ //
  47. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  48.  
  49. #include <ESP32Time.h>  
  50. #include <WiFiClient.h>
  51. #include <NTPClient.h>    
  52.  
  53. WiFiUDP ntpUDP;                                                     // dla NTP (pobieranie czasu z internetu)
  54. NTPClient timeClient(ntpUDP, "pool.ntp.org", 7200);                 // dla NTP (pobieranie czasu z internetu)                                                            
  55. WiFiClient wifiClient;                                              // obiekt WiFi
  56. ESP32Time RTC;                                                      // zegar RTC
  57.  
  58. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  59. // --- P R O T O T Y P Y    M U L T I - C O R E -------------------------------------------------------------------------------------------------- //
  60. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  61.  
  62. TaskHandle_t CPU_Core_0;                                            // rdzeń nr. 0 CPU - ESP32
  63. TaskHandle_t CPU_Core_1;                                            // rdzeń nr. 1 CPU - ESP32
  64.  
  65. void Core0_Task1( void * pvParameters );                            // funkcja Task1 dla rdzenia nr. 0 CPU        
  66. void Core0_Task2( void * pvParameters );                            // funkcja Task2 dla rdzenia nr. 0 CPU        
  67. void Core0_Task3( void * pvParameters );                            // funkcja Task1 dla rdzenia nr. 0 CPU  
  68.  
  69. #define T01    60000                                                //  1 minute
  70. #define T02   120000                                                //  2 minutes
  71. #define T05   300000                                                //  5 minutes
  72. #define T10   600000                                                // 10 minutes
  73. #define T15   900000                                                // 15 minutes
  74. #define T30  1800000                                                // 30 minutes
  75. #define T60  3600000                                                // 60 minutes
  76. #define T90  5400000                                                // 90 minutes
  77.  
  78. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  79. // --- S T U C T U R E   S E C T I O N ----------------------------------------------------------------------------------------------------------- //
  80. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  81. //
  82. //
  83. //
  84. //
  85. //
  86. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  87. // --- s t r u c t u r e   T I M E & D A T E   s t o r e   i n   P S R A M ( n o t   u s e   d y n a m i c   m e m o r y )                     --- //
  88. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  89.  
  90. bool F_ptrTIME = false;                  // false if ptrTime is not allocate
  91.  
  92. struct psTIME
  93. {
  94.     uint Hour = 0;                       // hour (godzina)
  95.     uint Minute = 0;                     // minute (minuta)
  96.     uint Second = 0;                     // second (sekunda)
  97.     uint Day = 0;                        // day of month (dzień miesiąca 1-31)
  98.     uint DayOfWeek = 0;                  // day of week (dzień tygodnia 1-7)
  99.     uint Month = 0;                      // month (miesiąc 1-12)
  100.     uint Year = 0;                       // year (rok)
  101.    
  102.     char sDayOfWeek[20];                 // day of week (char tab)
  103.     char sMonth[20];                     // month (char tab)
  104. };
  105.  
  106. struct psTIME *ptrTime;                  // ptr to struct psTIME 40156 - 724838
  107.  
  108. #if POLISH
  109.     const char Day_0 [] = "Niedziela";
  110.     const char Day_1 [] = "Poniedzialek";
  111.     const char Day_2 [] = "Wtorek";
  112.     const char Day_3 [] = "Sroda";
  113.     const char Day_4 [] = "Czwartek";
  114.     const char Day_5 [] = "Piatek";
  115.     const char Day_6 [] = "Sobota";
  116. #endif
  117.  
  118. #if ENGLISH
  119.     const char Day_0 [] = "Sunday";
  120.     const char Day_1 [] = "Monday";
  121.     const char Day_2 [] = "Tuesday";
  122.     const char Day_3 [] = "Wednesday";
  123.     const char Day_4 [] = "Thursday";
  124.     const char Day_5 [] = "Friday";
  125.     const char Day_6 [] = "Saturday";
  126. #endif
  127.  
  128. const char * const DAY[] = { Day_0, Day_1, Day_2, Day_3, Day_4, Day_5, Day_6 }; // dni tygodnia [0..6]
  129.  
  130. #if POLISH
  131.     const char MONTH_0  [] = "NULL";
  132.     const char MONTH_1  [] = "Styczen";
  133.     const char MONTH_2  [] = "Luty";
  134.     const char MONTH_3  [] = "Marzec";
  135.     const char MONTH_4  [] = "Kwiecien";
  136.     const char MONTH_5  [] = "Maj";
  137.     const char MONTH_6  [] = "Czerwiec";
  138.     const char MONTH_7  [] = "Lipiec";
  139.     const char MONTH_8  [] = "Sierpien";
  140.     const char MONTH_9  [] = "Wrzesien";
  141.     const char MONTH_10 [] = "Pazdziernik";
  142.     const char MONTH_11 [] = "Listopad";
  143.     const char MONTH_12 [] = "Grudzien";
  144. #endif
  145.  
  146. #if ENGLISH
  147.     const char MONTH_0  [] = "NULL";
  148.     const char MONTH_1  [] = "January";
  149.     const char MONTH_2  [] = "February";
  150.     const char MONTH_3  [] = "March";
  151.     const char MONTH_4  [] = "April";
  152.     const char MONTH_5  [] = "May";
  153.     const char MONTH_6  [] = "June";
  154.     const char MONTH_7  [] = "July";
  155.     const char MONTH_8  [] = "August";
  156.     const char MONTH_9  [] = "September";
  157.     const char MONTH_10 [] = "October";
  158.     const char MONTH_11 [] = "November";
  159.     const char MONTH_12 [] = "December";
  160. #endif
  161.  
  162. 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 };
  163.  
  164. // --- create in PSRAM struct psTIME ------------------------------------------------------------------------------------------------------------- //
  165.  
  166. void psTIMEcreate()
  167. {
  168.     ptrTime = ( struct psTIME * ) ps_malloc ( sizeof (struct psTIME) );                           // allocate memory for struct psTIME in PSRAM
  169.     F_ptrTIME = true;                                                                             // set flag prtTIME : true
  170.  
  171.     #if SERIAL
  172.         #if ENGLISH
  173.             Serial.printf("\n[ESP] [psRAM] [ptrTime] memory for struct psTIME has been allocated in PSRAM... ");          
  174.         #endif        
  175.         #if POLISH
  176.             Serial.printf("\n[ESP] [psRAM] [ptrTime] pamiec dla struct psTIME zostala pomyslnie alokowana w pamieci PSRAM...");        
  177.         #endif
  178.     #endif
  179. }
  180.  
  181. // --- delete from PSRAM struct psTIME ----------------------------------------------------------------------------------------------------------- //
  182.  
  183. void psTIMEdelete()
  184. {
  185.     free ( ptrTime );                                                                              // free memory (ptrTime)
  186.     F_ptrTIME = false;                                                                             // set flag prtTIME : false
  187.  
  188.     #if SERIAL
  189.         Serial.printf("\n[ESP] [psRAM] [ptrTime] memory for struct psTIME has been free... ");  
  190.     #endif
  191. }
  192.  
  193. // --- update time in structure psTIME ----------------------------------------------------------------------------------------------------------- //
  194.  
  195. void psTIMEupdate()
  196. {
  197.  
  198.     timeClient.update();
  199.        
  200.     unsigned long epochTime = timeClient.getEpochTime();                                              
  201.     struct tm *ptm = gmtime ((time_t *)&epochTime);      
  202.  
  203.     RTC.setTime(timeClient.getSeconds(), timeClient.getMinutes(), timeClient.getHours(), ptm->tm_mday, ptm->tm_mon+1, ptm->tm_year+1900);
  204.  
  205.     if (F_ptrTIME)                                                        // is Flag is true (memory in PSRAM allocated)
  206.     {
  207.         ptrTime -> Hour = timeClient.getHours();                          // copy to PSRAM
  208.         ptrTime -> Minute =  timeClient.getMinutes();                     // copy to PSRAM
  209.         ptrTime -> Second =  timeClient.getSeconds();                     // copy to PSRAM
  210.         ptrTime -> Day = ptm -> tm_mday;                                  // copy to PSRAM
  211.         ptrTime -> DayOfWeek = timeClient.getDay();                       // copy to PSRAM
  212.         ptrTime -> Month = ptm -> tm_mon+1;                               // copy to PSRAM
  213.         ptrTime -> Year = ptm -> tm_year+1900;                            // copy to PSRAM    
  214.  
  215.         strcpy (ptrTime -> sDayOfWeek, DAY[ptrTime -> DayOfWeek]);        // copy to char tab name of day of week (PSRAM)
  216.         strcpy (ptrTime -> sMonth, MONTH[ptrTime -> Month]);              // copy to char tab name of month (PSRAM)
  217.  
  218.         #if SERIAL
  219.             #if ENGLISH
  220.                 Serial.printf("\n[ESP] [psRAM] [ptrTime] update psTIME success... ");  
  221.                 #if DEBUG1
  222.                     Serial.printf("\n\n[STRUCT psTIME] Hour = %d", ptrTime -> Hour);
  223.                     Serial.printf("\n[STRUCT psTIME] Minute = %d", ptrTime -> Minute);
  224.                     Serial.printf("\n[STRUCT psTIME] Second = %d", ptrTime -> Second);
  225.                     Serial.printf("\n[STRUCT psTIME] Day = %d", ptrTime -> Day);
  226.                     Serial.printf("\n[STRUCT psTIME] DayOfWeek = %d", ptrTime -> DayOfWeek);
  227.                     Serial.printf("\n[STRUCT psTOME] DayOfweek = %s", ptrTime -> sDayOfWeek);
  228.                     Serial.printf("\n[STRUCT psTIME] Month = %d", ptrTime -> Month);
  229.                     Serial.printf("\n[STRUCT psTIME] Month = %s", ptrTime -> sMonth);
  230.                     Serial.printf("\n[STRUCT psTIME] Year = %d\n", ptrTime -> Year);                    
  231.                 #endif
  232.             #endif            
  233.             #if POLISH
  234.                 Serial.printf("\n[ESP] [psRAM] [ptrTime] aktualizacja struktury psTIME zakonczona sukcesem... ");  
  235.                 #if DEBUG1
  236.                     Serial.printf("\n\n[STRUCT psTIME] Godzina = %d", ptrTime -> Hour);
  237.                     Serial.printf("\n[STRUCT psTIME] Minuta = %d", ptrTime -> Minute);
  238.                     Serial.printf("\n[STRUCT psTIME] Sekunda = %d", ptrTime -> Second);
  239.                     Serial.printf("\n[STRUCT psTIME] Dzien = %d", ptrTime -> Day);
  240.                     Serial.printf("\n[STRUCT psTIME] Dzien tygodnia = %d", ptrTime -> DayOfWeek);
  241.                     Serial.printf("\n[STRUCT psTOME] Dzien tygodnia = %s", ptrTime -> sDayOfWeek);
  242.                     Serial.printf("\n[STRUCT psTIME] Miesiac = %d", ptrTime -> Month);
  243.                     Serial.printf("\n[STRUCT psTIME] Miesiac = %s", ptrTime -> sMonth);
  244.                     Serial.printf("\n[STRUCT psTIME] Rok = %d\n", ptrTime -> Year);                    
  245.                 #endif
  246.             #endif
  247.         #endif
  248.     }
  249.     else
  250.     {
  251.         #if SERIAL
  252.             #if ENGLISH
  253.                 Serial.printf("\n[ESP] [psRAM] [ptrTime] struct psTIME not update !!! memory is not-allocated... ");  
  254.             #endif            
  255.             #if POLISH
  256.                 Serial.printf("\n[ESP] [psRAM] [ptrTime] struct psTIME nie zostala zaktualizowana !!! pamiec nie jest alowana dla wskaznika ptrTIME ");  
  257.             #endif
  258.         #endif
  259.     }
  260. }
  261.  
  262. //
  263. // ------------------------------------------------------------------------------------------------------------ //
  264. // --- W i F i   R E C O N E C T ------------------------------------------------------------------------------ //
  265. // ------------------------------------------------------------------------------------------------------------ //
  266. //
  267.  
  268. void WiFiEvent(WiFiEvent_t event)
  269. {
  270.     switch (event)
  271.     {
  272.         case SYSTEM_EVENT_STA_GOT_IP:        
  273.                                               #if SERIAL
  274.                                                   Serial.printf("\n[ESP] [WiFiEvent] [Connect to Wi-Fi] ");  
  275.                                               #endif
  276.                                               break;
  277.  
  278.         case SYSTEM_EVENT_STA_DISCONNECTED:  
  279.                                               #if SERIAL
  280.                                                   Serial.printf("\n[ESP] [WiFiEvent] [Utracono połączenie z Wi-Fi] ");
  281.                                               #endif
  282.                                              
  283.                                               WiFi.setAutoReconnect(true);                                              
  284.                                               break;
  285.         default:                              break;
  286.   }
  287. }
  288.  
  289. //
  290. // ------------------------------------------------------------------------------------------------------------ //
  291. // --- CORE 0 TASK 1 ------------------------------------------------------------------------------------------ //
  292. // ------------------------------------------------------------------------------------------------------------ //
  293. //
  294.  
  295. void Core0_Task1( void * pvParameters )
  296. {
  297.     for(;;)                                                                       // for for Core0_Task1
  298.     {  
  299.         if (WiFi.status() == WL_CONNECTED)                                        // if WiFi is O.K.
  300.         {
  301.             if ( !F_ptrTIME ) psTIMEcreate();                                     // create memory in PSRAM for struct psTIME
  302.            
  303.             if ( F_ptrTIME )                                                      // if memory in PSRAM for struct is allocated
  304.             {
  305.                 psTIMEupdate();                                                   // update RTC-ESP clock if PSRAM is allocated
  306.                
  307.                 #if SERIAL
  308.                     Serial.printf("\n[CORE0] [TASK1] [RTC Time] ");  
  309.                     Serial.print(RTC.getTime());
  310.                     Serial.printf("\n[CORE0] [TASK1] [RTC Date] ");  
  311.                     Serial.print(RTC.getDate());
  312.                     Serial.printf("\n[CORE0] [TASK1] [FREE RAM] ");                
  313.                     Serial.println(ESP.getFreeHeap());
  314.                     Serial.printf("[CORE0] [TASK1] [FREE PSRAM] : %d\n", ESP.getFreePsram());
  315.                 #endif
  316.             }
  317.         }
  318.         else
  319.         {
  320.             #if SERIAL
  321.                 Serial.printf("\n[CORE0] [TASK1] [WiFi] not conected, time is not update ... ");  
  322.             #endif
  323.         }
  324.  
  325.         delay(T01);
  326.     }
  327. }
  328.  
  329. //
  330. // ------------------------------------------------------------------------------------------------------------ //
  331. // --- CORE 0 TASK 2 ------------------------------------------------------------------------------------------ //
  332. // ------------------------------------------------------------------------------------------------------------ //
  333. //
  334.  
  335. void Core0_Task2( void * pvParameters )
  336. {
  337.     for(;;)  
  338.     {
  339.         delay(T30);
  340.     }
  341. }
  342.  
  343. //
  344. // ------------------------------------------------------------------------------------------------------------ //
  345. // --- CORE 0 TASK 1 ------------------------------------------------------------------------------------------ //
  346. // ------------------------------------------------------------------------------------------------------------ //
  347. //
  348.  
  349. void Core0_Task3( void * pvParameters )
  350. {
  351.     for(;;)  
  352.     {
  353.         delay(T60);
  354.     }
  355. }
  356.  
  357.  
  358. //
  359. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  360. // ---      P S R A M   I N F O                                                                                                                --- //
  361. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  362. //
  363.  
  364. void PSRAM_Info()
  365. {
  366.     log_d("Total PSRAM: %d", ESP.getPsramSize());
  367.     log_d("Free PSRAM: %d", ESP.getFreePsram());
  368. }
  369.  
  370. //
  371. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  372. // --- S E T U P --------------------------------------------------------------------------------------------------------------------------------- //
  373. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  374. //
  375.  
  376. void setup()
  377. {
  378.     psramInit();                            // PSRAM memory init
  379.     PSRAM_Info();                           // PSRAM check & info  
  380.    
  381.     #if SERIAL
  382.         Serial.begin(115200);        
  383.     #endif
  384.      
  385.     WiFi.onEvent(WiFiEvent);                // funkcja zdarzenie Event
  386.     WiFi.setAutoConnect(true);              // auto-reconnect
  387.     WiFi.mode(WIFI_STA);                    // tryb pracy WiFi
  388.     WiFi.begin(SSID, PASSWORD);             // WiFi start
  389.    
  390.     while ( WiFi.status() != WL_CONNECTED )                                                    
  391.     {                                
  392.         #if SERIAL                                                          
  393.             Serial.print(".");
  394.         #endif
  395.        
  396.         delay(50);                                                                    
  397.     }      
  398.  
  399.     Serial.println(WiFi.localIP());
  400.  
  401.     timeClient.begin();                     // start NTP
  402.  
  403.  
  404.     // --- CPU_Core_0 ----------------------------------------------------------------------------------
  405.                                                                                                        
  406.     xTaskCreatePinnedToCore(Core0_Task1, "CPU_Core_0", 15000, NULL, 1, &CPU_Core_0, 0);                
  407.     vTaskDelay(500 / portTICK_PERIOD_MS);                                                              
  408.                                                                                                        
  409.     xTaskCreatePinnedToCore(Core0_Task2, "CPU_Core_0", 7000, NULL, 1, &CPU_Core_0, 0);                
  410.     vTaskDelay(500 / portTICK_PERIOD_MS);  
  411.    
  412.     xTaskCreatePinnedToCore(Core0_Task3, "CPU_Core_0", 7000, NULL, 1, &CPU_Core_0, 1);                
  413.     vTaskDelay(500 / portTICK_PERIOD_MS);      
  414.  
  415.  
  416. }
  417.  
  418. //
  419. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  420. // --- M A I N   L O O P ------------------------------------------------------------------------------------------------------------------------- //
  421. // ----------------------------------------------------------------------------------------------------------------------------------------------- //
  422. //
  423.  
  424. void loop()
  425. {
  426.    
  427. }
  428.  
Advertisement
Add Comment
Please, Sign In to add comment