PowerTGS440

TFT_CLOCK_DHT_AM2320_SENSOR_v2.0

Jun 22nd, 2021 (edited)
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 48.16 KB | None | 0 0
  1. // ------------------------------------------------------------------------------------------------------------------- //
  2. // --- N E T W O R K   S E T T I N G S ------------------------------------------------------------------------------- //
  3. // ------------------------------------------------------------------------------------------------------------------- //
  4.  
  5. const char *ssid     = "your_ssid_router";                             // network wifi ssid  
  6. const char *password = "your_network_password";                        // network wifi password
  7.  
  8. // ------------------------------------------------------------------------------------------------------------------- //
  9. //                                                                                                                     //
  10. // Simple ESP8266 NodeMCU 2.0 SimpleTFT Clock & DHT11 & AM2320 by TOMASZ MAJCHER (TRANSLINE GROUP POAND)               //
  11. //                                                                                                                     //
  12. // e-mail  : [email protected]                                                                               //
  13. // licence : DonationWare                                                                                              //
  14. // paypal  : @TomaszMajcher                                                                                            //
  15. // www     : https://esp32dev.blogspot.com/                                                                            //
  16. //                                                                                                                     //
  17. // ------------------------------------------------------------------------------------------------------------------- //
  18. //
  19. // v1.0 Base  (13.06.2021) by Tomasz Majcher (tools & base)
  20. // v2.0 Final (22.06.2021) by Tomasz Majcher (clock, date, DHT11, AM2320) Free Full Version
  21. //
  22. // ------------------------------------------------------------------------------------------------------------------- //
  23. //
  24. // ILI9341 Driver (Pinout) Hardware SPI !!!
  25. //
  26. // VCC to         :   3.3V
  27. // GND to         :   GND
  28. // CS pin to      :   D3
  29. // Reset pin to   :   Reset
  30. // DC pin to      :   D4
  31. // SDI pin to     :   D7
  32. // SCK pin to     :   D5
  33. //
  34. //
  35. //  AM2320 Driver (Pinout) SCA/SDL
  36. //
  37. //  VCC to        :   3.3V
  38. //  GND to        :   GND
  39. //  SCL to        :   D1 (ESP8266)
  40. //  SDA to        :   D2 (ESP8266)
  41. //
  42. //
  43. //  DHT11 Driver (Pinout)
  44. //
  45. //  VCC to        :   3.3V
  46. //  GND to        :   GND
  47. //  DATA to       :   D0
  48. //
  49. //
  50. //
  51. //
  52. // (22.06.2021) v2.0 final -  official free final version !!!
  53. // (22.06.2021) v1.9 beta  -  update : add TFT_ShowTemperature & TFT_ShowHumidity (DHT11) outside ROOM
  54. // (22.06.2021) v1.8 beta  -  update : add DHT11 sensor (temperature & humidity) outside ROOM
  55. // (21.06.2021) v1.7 beta  -  update : add TFT_ShowTemperature & TFT_ShowHumidity (AM2320) inside ROOM
  56. // (21.06.2021) v1.6 beta  -  update : add AM2320 sensor (temperature & humudity) inside ROOM
  57. // (20.06.2021) v1.5 beta  -  update : add TFT_ShowProgres (show progres bar for second)
  58. // (20.06.2021) v1.4 beta  -  update : add TFT_ShowBug (show flying bug)
  59. // (20.06.2021) v1.3 beta  -  update : add TFT_ShowDate (show date on TFT display) from Task3 (one per min)
  60. // (20.06.2021) v1.2 beta  -  update : add TFT_ShowTime (show time on TFT display) from Task0 (one per sec)
  61. // (20.06.2021) v1.1 beta  -  update : add TFT (test, setup library -> ILI9341, pinout)
  62. //
  63. // ------------------------------------------------------------------------------------------------------------------- //
  64. // --- I N C L U D E   L I B R A R Y --------------------------------------------------------------------------------- //
  65. // ------------------------------------------------------------------------------------------------------------------- //
  66.  
  67. extern "C" char* sbrk(int incr);
  68.  
  69. #include <ESP8266WiFi.h>                                         // biblioteka Wi-Fi
  70. #include <NTPClient.h>                                           // NTP klient (Time)
  71. #include <WiFiUdp.h>                                             // UDP dla NTP (Time)
  72. #include <TaskScheduler.h>                                       // scheluder
  73. #include <TimeLib.h>
  74. #include <Arduino.h>
  75.  
  76. // --- AM2320 Temperature & Humidity Sensor -------------------------------------------------------------------------- //
  77.  
  78. #include <Adafruit_Sensor.h>                                     //AM2320 sensor library
  79. #include <Adafruit_AM2320.h>                                     //AM2320 sensor library
  80.  
  81. Adafruit_AM2320 AM2320 = Adafruit_AM2320();                      // create object
  82.  
  83. // --- DHT11 Temperature & Humidity Sensor --------------------------------------------------------------------------- //
  84.  
  85. #include "DHTesp.h"                                              // library
  86. #define DHTpin D0                                                // define PIN
  87.  
  88. DHTesp dht;                                                      // create object
  89.  
  90. // ------------------------------------------------------------------------------------------------------------------- //
  91. // --- L A N G U A G E   S E T U P ----------------------------------------------------------------------------------- //
  92. // ------------------------------------------------------------------------------------------------------------------- //
  93.  
  94. #define LANGUAGE 0                                            // 0 (Polish), 1 (English), 2 (Germany)
  95.                                                              
  96. #if LANGUAGE == 0                                                
  97.     #define POLISH 1
  98.     #define ENGLISH 0
  99.     #define GERMANY 0                                          
  100. #endif
  101.  
  102. #if LANGUAGE == 1                                                      
  103.     #define POLISH 0                                        
  104.     #define ENGLISH 1
  105.     #define GERMANY 0
  106. #endif
  107.  
  108. #if LANGUAGE == 2
  109.     #define POLISH 0
  110.     #define ENGLISH 0
  111.     #define GERMANY 1
  112. #endif      
  113.  
  114. // ------------------------------------------------------------------------------------------------------------------- //
  115. // --- M A C R O   D E F I N E --------------------------------------------------------------------------------------- //
  116. // ------------------------------------------------------------------------------------------------------------------- //
  117.  
  118. #define ARRAY_SIZE(a)   (sizeof(a) / sizeof((a)[0]))
  119.  
  120. // ------------------------------------------------------------------------------------------------------------------- //
  121. // --- T F T --------------------------------------------------------------------------------------------------------- //
  122. // ------------------------------------------------------------------------------------------------------------------- //
  123.  
  124. //#include "Free_Fonts.h"
  125. #include "SPI.h"
  126. #include "TFT_eSPI.h"
  127.  
  128. TFT_eSPI tft = TFT_eSPI();
  129.  
  130. // define color
  131.  
  132. #define TFT_LIGHTGRAY         tft.color565(163, 159, 158)
  133. #define TFT_SWEETBLUE         tft.color565(0, 128, 255)
  134.  
  135. // define day mode color
  136.  
  137. #define TFT_DAY_TEXT          TFT_BLACK
  138. #define TFT_DAY_BACKGROUND    TFT_LIGHTGRAY
  139.  
  140. // define night mode color
  141.  
  142. #define TFT_NIGHT_TEXT        TFT_LIGHTGRAY
  143. #define TFT_NIGHT_BACKGROUND  TFT_BLACK
  144.  
  145. // define cords
  146.  
  147. #define x_min 0
  148. #define y_min 0
  149. #define x_max 320
  150. #define y_max 240
  151. #define frame 5
  152.  
  153. // ------------------------------------------------------------------------------------------------------------------- //
  154. // --- S E R I A L   S E T T I N G S --------------------------------------------------------------------------------- //
  155. // ------------------------------------------------------------------------------------------------------------------- //
  156.  
  157. #define SERIAL true
  158. #define SerialSpeed 57600
  159.  
  160. // ------------------------------------------------------------------------------------------------------------------- //
  161. // --- P R O T O T Y P E --------------------------------------------------------------------------------------------- //
  162. // ------------------------------------------------------------------------------------------------------------------- //
  163.  
  164. void scheluderInit();                 // run from setup() - init scheluder
  165. void statWiFi();                      // show Wi-Fi Status
  166. void initWiFi();                      // init Wi-Fi connection
  167.  
  168. void TFT_Init();                      // init TFT (from setup)
  169. void TFT_ShowDate();                  // show Date on TFT
  170. void TFT_ShowTime();                  // show Time on TFT
  171. void TFT_ShowBug();                   // show BUG on TFT
  172. void TFT_ShowHumidity();              // show Humidity (inside / outside) from sensor AM2320 / DHT11
  173. void TFT_ShowTemperature();           // show Temperature (inside / outside) from sensor AM2320 / DHT11
  174.  
  175. // ------------------------------------------------------------------------------------------------------------------- //
  176. // --- P R O T O T Y P E --- C O R E T A S K ------------------------------------------------------------------------- //
  177. // ------------------------------------------------------------------------------------------------------------------- //
  178.  
  179. void Task0Callback();                 // function Task0 for ESP8266 Core
  180. void Task1Callback();                 // function Task1 for ESP8266 Core
  181. void Task2Callback();                 // function Task2 for ESP8266 Core
  182. void Task3Callback();                 // function Task3 for ESP8266 Core
  183. void Task4Callback();                 // function Task4 for ESP8266 Core
  184. void Task5Callback();                 // function Task4 for ESP8266 Core
  185. void Task6Callback();                 // function Task4 for ESP8266 Core
  186.  
  187. #define Micros_01         50          // 1/100 sekundy
  188. #define Second_01       1000          // 01 second timeout makro definition
  189. #define Second_05       5000          // 05 second timeout makro definition
  190. #define Second_10       10000         // 10 second timeout makro definition
  191. #define Second_30       30000         // 30 second timeout makro definition
  192. #define Second_60       60000         // 60 second timeout makro definition
  193. #define Minute_01       60000         // 01 minute timeout makro definition
  194. #define Minute_05      300000         // 05 minute timeout makro definition
  195. #define Minute_10      600000         // 10 minute timeout makro definition
  196. #define Minute_30     1800000         // 30 minute timeout makro definiction
  197. #define Minute_60     3600000         // 30 minute timeout makro definiction
  198.  
  199.  
  200. // ------------------------------------------------------------------------------------------------------------------- //
  201. // --- Z A D A N I A   S C H E L U D E R ' A ------------------------------------------------------------------------- //
  202. // ------------------------------------------------------------------------------------------------------------------- //
  203.                                                                                                    
  204. Task task_0( Second_01,  TASK_FOREVER, &Task0Callback);         // task_0 run at interval Second_01            
  205. Task task_1( Second_60,  TASK_FOREVER, &Task1Callback);         // task_1 run at interval Second_60            
  206. Task task_2( Second_01,  TASK_FOREVER, &Task2Callback);         // task_2 run at interval Second_10            
  207. Task task_3( Minute_01,  TASK_FOREVER, &Task3Callback);         // task_3 run at interval Minute_01  
  208. Task task_4( Minute_10,  TASK_FOREVER, &Task4Callback);         // task_4 run at interval Minute_10  
  209. Task task_5( Micros_01,  TASK_FOREVER, &Task5Callback);         // task_4 run at interval 1/10 sec
  210. Task task_6( Minute_60,  TASK_FOREVER, &Task6Callback);         // task_4 run at interval Minute_60  
  211.                                                                                                    
  212. Scheduler runner;    
  213.  
  214. // ------------------------------------------------------------------------------------------------------------------- //
  215. //                                              *** WiFi Reconect ***                                                  //
  216. // ------------------------------------------------------------------------------------------------------------------- //
  217.  
  218. unsigned long previousMillis = 0;
  219. unsigned long interval = 30000;
  220.  
  221. // ------------------------------------------------------------------------------------------------------------------- //
  222. //                                              *** STRUKTURA Time ***                                                 //
  223. // ------------------------------------------------------------------------------------------------------------------- //
  224.  
  225. struct TIME_DATA
  226. {
  227.     int     Hour = 0;
  228.     int     Minute  = 0;
  229.     int     Second = 0;
  230.     String  FormatedData  = "NULL";
  231.     String  ShortData = "NULL";
  232.     String  LongData = "NULL";
  233.     String  TFT_Data = "NULL";
  234.     String  TFT_Time = "NULL";
  235.     int     DayOfTheWeek = 0;
  236.     int     DayOfTheMonth = 0;
  237.     int     Month = 0;
  238.     int     Year = 0;
  239. }
  240. Time;
  241.  
  242.  
  243. // ------------------------------------------------------------------------------------------------------------------- //
  244. //                                              *** STRUKTURA AM2320 ***                                               //
  245. // ------------------------------------------------------------------------------------------------------------------- //
  246.  
  247. struct AM2320Sensor
  248. {
  249.     float temperature   = 0;
  250.     float humidity      = 0;
  251. }
  252. sensor;
  253.  
  254. // ------------------------------------------------------------------------------------------------------------------- //
  255. //                                              *** STRUKTURA DHT11 ***                                                //
  256. // ------------------------------------------------------------------------------------------------------------------- //
  257.  
  258.  
  259. struct MyDHT
  260. {
  261.     float temperature = 0;   // default - DHT11/DHT22 sample start value
  262.     float humidity    = 0;   // default - DHT11/DHT22 sample start value
  263. }
  264. myDHT;
  265.  
  266.  
  267. // ------------------------------------------------------------------------------------------------------------------- //
  268. //                                              *** STRUKTURA DZIEN ***                                                //
  269. // ------------------------------------------------------------------------------------------------------------------- //
  270.  
  271. #if POLISH
  272.     const char Day_0 [] = "Niedziela";
  273.     const char Day_1 [] = "Poniedzialek";
  274.     const char Day_2 [] = "Wtorek";
  275.     const char Day_3 [] = "Sroda";
  276.     const char Day_4 [] = "Czwartek";
  277.     const char Day_5 [] = "Piatek";
  278.     const char Day_6 [] = "Sobota";
  279. #endif
  280.  
  281. #if ENGLISH
  282.     const char Day_0 [] = "Sunday";
  283.     const char Day_1 [] = "Monday";
  284.     const char Day_2 [] = "Tuesday";
  285.     const char Day_3 [] = "Wednesday";
  286.     const char Day_4 [] = "Thursday";
  287.     const char Day_5 [] = "Friday";
  288.     const char Day_6 [] = "Saturday";
  289. #endif
  290.  
  291. #if GERMANY
  292.     const char Day_0 [] = "Sonntag";
  293.     const char Day_1 [] = "Montag";
  294.     const char Day_2 [] = "Dienstag";
  295.     const char Day_3 [] = "Mittwoch";
  296.     const char Day_4 [] = "Donnerstag";
  297.     const char Day_5 [] = "Freitag";
  298.     const char Day_6 [] = "Samstag";
  299. #endif
  300.  
  301. const char * const DAY[] = { Day_0, Day_1, Day_2, Day_3, Day_4, Day_5, Day_6 }; // dni tygodnia [0..6]
  302.  
  303. // ------------------------------------------------------------------------------------------------------------------- //
  304. //                                              *** STRUKTURA MONTH ***                                                //
  305. // ------------------------------------------------------------------------------------------------------------------- //
  306.  
  307. #if POLISH
  308.     const char MONTH_0  [] = "NULL";
  309.     const char MONTH_1  [] = "Styczen";
  310.     const char MONTH_2  [] = "Luty";
  311.     const char MONTH_3  [] = "Marzec";
  312.     const char MONTH_4  [] = "Kwiecien";
  313.     const char MONTH_5  [] = "Maj";
  314.     const char MONTH_6  [] = "Czerwiec";
  315.     const char MONTH_7  [] = "Lipiec";
  316.     const char MONTH_8  [] = "Sierpien";
  317.     const char MONTH_9  [] = "Wrzesien";
  318.     const char MONTH_10 [] = "Pazdziernik";
  319.     const char MONTH_11 [] = "Listopad";
  320.     const char MONTH_12 [] = "Grudzien";
  321. #endif
  322.  
  323. #if ENGLISH
  324.     const char MONTH_0  [] = "NULL";
  325.     const char MONTH_1  [] = "January";
  326.     const char MONTH_2  [] = "February";
  327.     const char MONTH_3  [] = "March";
  328.     const char MONTH_4  [] = "April";
  329.     const char MONTH_5  [] = "May";
  330.     const char MONTH_6  [] = "June";
  331.     const char MONTH_7  [] = "July";
  332.     const char MONTH_8  [] = "August";
  333.     const char MONTH_9  [] = "September";
  334.     const char MONTH_10 [] = "October";
  335.     const char MONTH_11 [] = "November";
  336.     const char MONTH_12 [] = "December";
  337. #endif
  338.  
  339. #if GERMANY
  340.     const char MONTH_0  [] = "NULL";
  341.     const char MONTH_1  [] = "Januar";
  342.     const char MONTH_2  [] = "Februar";
  343.     const char MONTH_3  [] = "März";
  344.     const char MONTH_4  [] = "April";
  345.     const char MONTH_5  [] = "Mai";
  346.     const char MONTH_6  [] = "Juni";
  347.     const char MONTH_7  [] = "Juli";
  348.     const char MONTH_8  [] = "August";
  349.     const char MONTH_9  [] = "September";
  350.     const char MONTH_10 [] = "Oktober";
  351.     const char MONTH_11 [] = "November";
  352.     const char MONTH_12 [] = "Dezember";
  353. #endif
  354.    
  355.     const char * const MONTH[] = { MONTH_0, MONTH_1, MONTH_2, MONTH_3, MONTH_4, MONTH_5, MONTH_6,
  356.                                    MONTH_7, MONTH_8, MONTH_9, MONTH_10, MONTH_11, MONTH_12 };
  357.  
  358. // ------------------------------------------------------------------------------------------------------------------- //
  359. // --- T O O L S   C L A S S ----------------------------------------------------------------------------------------- //
  360. // ------------------------------------------------------------------------------------------------------------------- //  
  361.  
  362. class TOOLS
  363. {
  364.     private:
  365.  
  366.     public:
  367.       void TypeWriter(const String & message, unsigned int wait, bool lf = true);
  368.       void FreeRam(bool lf = true);
  369.       void CpuInfo(bool lf = true);
  370.       void WiFiInfo(bool lf = true);      
  371.       inline void BreakLine();
  372.       inline void PrintLine(byte lenght = 60);
  373. };
  374.  
  375. // ------------------------------------------------------------------------------------------------------------------- //  
  376.  
  377. void TOOLS :: TypeWriter(const String & message, unsigned int wait, bool lf)
  378. {
  379.     if(lf) Serial.printf("\n");   // if lf is true print next line
  380.    
  381.     for(const char c : message)
  382.     {
  383.         Serial.print(c);    
  384.         delay(wait);  
  385.     }  
  386. }
  387.  
  388. // ------------------------------------------------------------------------------------------------------------------- //
  389.  
  390. void TOOLS :: FreeRam(bool lf)
  391. {
  392.     if(lf) Serial.printf("\n");   // if lf is true print next line
  393.  
  394.     Serial.printf("[TOOLS] [Memory Free] \t\t: %u [kB]", ESP.getFreeHeap());      
  395. }
  396.  
  397. // ------------------------------------------------------------------------------------------------------------------- //
  398.  
  399. void TOOLS :: CpuInfo(bool lf)
  400. {
  401.     if(lf) Serial.printf("\n");   // if lf is true print next line
  402.  
  403.     Serial.printf("[TOOLS] [CPU frequency] \t: %u [MHz]",ESP.getCpuFreqMHz());      
  404. }
  405.  
  406. // ------------------------------------------------------------------------------------------------------------------- //
  407.  
  408. void TOOLS :: WiFiInfo(bool lf)
  409. {
  410.     if(lf) Serial.printf("\n");   // if lf is true print next line
  411.    
  412.     Serial.printf("[TOOLS] [IP adress] \t\t: %s", WiFi.localIP().toString().c_str());
  413. }
  414.  
  415. // ------------------------------------------------------------------------------------------------------------------- //
  416.  
  417. inline void TOOLS :: BreakLine()
  418. {
  419.     Serial.printf("\n");   // if lf is true print next line
  420. }
  421.  
  422. // ------------------------------------------------------------------------------------------------------------------- //
  423.  
  424. inline void TOOLS :: PrintLine(byte lenght)
  425. {
  426.     for(byte i = 0; i <= lenght; i++) Serial.print("-");
  427. }
  428.  
  429. // ------------------------------------------------------------------------------------------------------------------- //
  430. // --- O B J E C T   I N I T ----------------------------------------------------------------------------------------- //
  431. // ------------------------------------------------------------------------------------------------------------------- //  
  432.  
  433. WiFiUDP ntpUDP;                                                
  434. NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600);  
  435. TOOLS tools;
  436.  
  437. // ------------------------------------------------------------------------------------------------------------------- //
  438. // --- Task0Callback() ----------------------------------------------------------------------------------------------- //
  439. // ------------------------------------------------------------------------------------------------------------------- //
  440.  
  441. void Task0Callback()
  442. {
  443.     String bufor = "NULL";
  444.  
  445.     static bool STEP = false;
  446.  
  447.     if (Time.Hour < 10)
  448.     {
  449.         bufor =  "0";
  450.         bufor += String(Time.Hour);
  451.     }
  452.     else
  453.     {
  454.         bufor = String(Time.Hour);
  455.     }
  456.  
  457.     if (STEP)                           // step 0 sec show :
  458.     {
  459.         bufor += ":";
  460.         STEP = false;
  461.     }
  462.     else                                // step 1 sec show _
  463.     {
  464.         bufor += " ";
  465.         STEP = true;
  466.     }
  467.  
  468.     if (Time.Minute < 10)
  469.     {
  470.         bufor +=  "0";
  471.         bufor += String(Time.Minute);
  472.     }
  473.     else
  474.     {
  475.         bufor += String(Time.Minute);
  476.     }
  477.  
  478.     Time.TFT_Time = bufor;                        // copy bufor to TFT_Time
  479.  
  480.     TFT_ShowTime();                               // show time on TFT  
  481.  
  482. }
  483.  
  484. // ------------------------------------------------------------------------------------------------------------------- //
  485. // --- Task1Callback() ----------------------------------------------------------------------------------------------- //
  486. // ------------------------------------------------------------------------------------------------------------------- //
  487.  
  488. void Task1Callback()
  489. {
  490.     // -------------------------------------------------------------------------------------------- //
  491.     // --- temperature & humidity (INSIDE) from AM2320 sensor ------------------------------------- //
  492.     // -------------------------------------------------------------------------------------------- //
  493.    
  494.     sensor.temperature = AM2320.readTemperature();      // get temperature from AM2320 sensor
  495.     sensor.humidity    = AM2320.readHumidity();         // get humidity from AM2320 sensor        
  496.  
  497.     // -------------------------------------------------------------------------------------------- //
  498.     // --- temperature & humidiry (OUTSIDE) from DHT11 sensor ------------------------------------- //
  499.     // -------------------------------------------------------------------------------------------- //
  500.  
  501.     TempAndHumidity sensor = dht.getTempAndHumidity();    
  502.  
  503.     myDHT.temperature = sensor.temperature;
  504.     myDHT.humidity  = sensor.humidity;
  505.  
  506.     // -------------------------------------------------------------------------------------------- //
  507.  
  508.     TFT_ShowTemperature();                              // show temperature IN/OUT on TFT
  509.     TFT_ShowHumidity();                                 // show humidity IN/OUT on TFT
  510.  
  511.     // -------------------------------------------------------------------------------------------- //
  512.  
  513.     #if SERIAL
  514.        
  515.         String bufor;
  516.        
  517.         if (Time.Hour < 10)
  518.         {
  519.             bufor =  "0";
  520.             bufor += String(Time.Hour);
  521.         }
  522.         else
  523.         {
  524.             bufor = String(Time.Hour);
  525.         }
  526.  
  527.         bufor += ":";
  528.  
  529.         if (Time.Minute < 10)
  530.         {
  531.             bufor +=  "0";
  532.             bufor += String(Time.Minute);
  533.         }
  534.         else
  535.         {
  536.             bufor += String(Time.Minute);
  537.         }
  538.  
  539.         if (Time.Hour < 12) bufor += " AM";
  540.         else                bufor += " PM";
  541.        
  542.         Serial.printf("\n\n[ESP] [TASK1] [Time NTP] \t: %s", bufor.c_str());
  543.         Serial.printf("\n[ESP] [TASK1] [LongData]  \t: %s ", Time.LongData.c_str());
  544.         Serial.printf("\n[ESP] [TASK1] [ShortData] \t: %s ", Time.ShortData.c_str());
  545.  
  546.         #if POLISH
  547.             Serial.printf("\n\n[ESP] [TASK1] [Temperatura] \t: %2.2f stopni C",sensor.temperature);
  548.             Serial.printf("\n[ESP] [TASK1] [Wilgotnosc] \t: %2.2f %%RH",sensor.humidity);
  549.         #endif
  550.         #if GERMANY
  551.             Serial.printf("\n\n[ESP] [TASK1] [Temperature] \t: %2.2f Grad C",sensor.temperature);
  552.             Serial.printf("\n[ESP] [TASK1] [Feuchtigkeit] \t: %2.2f %%RH",sensor.humidity);
  553.         #endif
  554.         #if ENGLISH
  555.             Serial.printf("\n\n[ESP] [TASK1] [Temperature] \t: %2.2f degrees C",sensor.temperature);
  556.             Serial.printf("\n[ESP] [TASK1] [Humidity] \t: %2.2f %%RH",sensor.humidity);
  557.         #endif
  558.        
  559.     #endif            
  560. }
  561.  
  562. // ------------------------------------------------------------------------------------------------------------------- //
  563. // --- Task2Callback() ----------------------------------------------------------------------------------------------- //
  564. // ------------------------------------------------------------------------------------------------------------------- //
  565.  
  566. void Task2Callback()
  567. {
  568.     timeClient.update();                                 // time update                                                        
  569.                                                                                    
  570.     Time.Hour    =  timeClient.getHours()+1;             // zapisz godzinę z serwera
  571.     Time.Minute  =  timeClient.getMinutes();             // zapisz minutę z serwera
  572.     Time.Second  =  timeClient.getSeconds();             // zapisz sekundę z serwera
  573.    
  574.     TFT_ShowProgres();
  575. }
  576.  
  577. // ------------------------------------------------------------------------------------------------------------------- //
  578. // --- Task3Callback() ----------------------------------------------------------------------------------------------- //
  579. // ------------------------------------------------------------------------------------------------------------------- //
  580.  
  581. void Task3Callback()
  582. {
  583.     tools.BreakLine();                                   // breaking line
  584.     tools.FreeRam();                                     // show Free RAM
  585.     tools.CpuInfo();                                     // Show CPU
  586.     tools.WiFiInfo();                                    // Show WiFi Adress
  587.  
  588.     TFT_ShowDate();                                      // Show Date on TFT
  589. }
  590.  
  591. // ------------------------------------------------------------------------------------------------------------------- //
  592. // --- Task4Callback() ----------------------------------------------------------------------------------------------- //
  593. // ------------------------------------------------------------------------------------------------------------------- //
  594.  
  595. void Task4Callback()
  596. {
  597.    
  598. }
  599.  
  600. // ------------------------------------------------------------------------------------------------------------------- //
  601. // --- Task3Callback() ----------------------------------------------------------------------------------------------- //
  602. // ------------------------------------------------------------------------------------------------------------------- //
  603.  
  604. void Task5Callback()
  605. {
  606.     TFT_ShowBug();          // pokaż robala
  607. }
  608. // ------------------------------------------------------------------------------------------------------------------- //
  609. // --- Task6Callback() ----------------------------------------------------------------------------------------------- //
  610. // ------------------------------------------------------------------------------------------------------------------- //
  611.  
  612. void Task6Callback()
  613. {
  614.     timeClient.update();                                                                              
  615.    
  616.     unsigned long epochTime = timeClient.getEpochTime();                                              
  617.     struct tm *ptm = gmtime ( (time_t *) &epochTime );                                          
  618.                                                                                                
  619.     Time.DayOfTheWeek      =   timeClient.getDay();                                          
  620.     Time.DayOfTheMonth     =   ptm->tm_mday;                                                
  621.     Time.Month             =   ptm->tm_mon+1;                                                
  622.     Time.Year              =   ptm->tm_year+1900;
  623.  
  624.     Time.FormatedData   =   String(DAY[Time.DayOfTheWeek])
  625.                         +   ", "
  626.                         +   String(Time.DayOfTheMonth)
  627.                         +   " "
  628.                         +   String(MONTH[Time.Month])
  629.                         +   " "
  630.                         +   String(Time.Year);    
  631.  
  632.     Time.ShortData      =   String(Time.DayOfTheMonth)
  633.                         +   " "
  634.                         +   String(MONTH[Time.Month])
  635.                         +   " "
  636.                         +   String(Time.Year);  
  637.  
  638.     Time.LongData       =   String(DAY[Time.DayOfTheWeek])
  639.                         +   " "
  640.                         +   String(Time.DayOfTheMonth)
  641.                         +   "/"
  642.                         +   String(Time.Month)
  643.                         +   "/"
  644.                         +   String(Time.Year);  
  645.  
  646.     String Buffor = "NULL";
  647.  
  648.     if(Time.DayOfTheMonth < 10)
  649.     {
  650.         Buffor = "0";
  651.         Buffor += Time.DayOfTheMonth;
  652.     }
  653.     else Buffor = Time.DayOfTheMonth;
  654.  
  655.     Buffor += "/";
  656.  
  657.     if(Time.Month < 10)
  658.     {
  659.         Buffor += "0";
  660.         Buffor += Time.Month;
  661.     }
  662.     else Buffor += Time.Month;
  663.    
  664.     Buffor += "/";
  665.     Buffor += Time.Year;    
  666.  
  667.     Time.TFT_Data = Buffor;
  668. }
  669.  
  670. // ------------------------------------------------------------------------------------------------------------------- //
  671. // --- stat Wi-Fi ---------------------------------------------------------------------------------------------------- //
  672. // ------------------------------------------------------------------------------------------------------------------- //
  673.  
  674. void statWiFi()
  675. {
  676.     switch (WiFi.status())
  677.     {
  678.         case WL_NO_SSID_AVAIL:
  679.                             #if SERIAL
  680.                                 #if ENGLISH
  681.                                     Serial.printf("\nConfigured SSID cannot be reached");
  682.                                 #endif
  683.                                 #if POLISH
  684.                                     Serial.printf("\nNie można osiągnąć skonfigurowanego identyfikatora SSID");
  685.                                 #endif
  686.                                 #if GERMANY
  687.                                     Serial.printf("\nKonfigurierte SSID ist nicht erreichbar");
  688.                                 #endif
  689.                             #endif        
  690.                             break;
  691.                            
  692.         case WL_CONNECTED:
  693.                             #if SERIAL
  694.                                 #if ENGLISH
  695.                                     Serial.printf("\nConnection successfully established");
  696.                                     Serial.printf("\nYour IP : %s", WiFi.localIP().toString().c_str());
  697.                                     Serial.printf("\nReceived Signal Strength Indication : %d", WiFi.RSSI());
  698.                                 #endif
  699.                                 #if POLISH
  700.                                     Serial.printf("\nPomyślnie nawiązano połączenie");
  701.                                     Serial.printf("\nTwój adres IP : %s", WiFi.localIP().toString().c_str());
  702.                                     Serial.printf("\nWskazanie siły odbieranego sygnału : %d", WiFi.RSSI());
  703.                                 #endif
  704.                                 #if GERMANY
  705.                                     Serial.printf("\nVerbindung erfolgreich hergestellt");
  706.                                     Serial.printf("\nDeine IP-Adresse : %s", WiFi.localIP().toString().c_str());
  707.                                     Serial.printf("\nAnzeige der empfangenen Signalstärke : %d", WiFi.RSSI());                                
  708.                                 #endif
  709.                             #endif
  710.                             break;
  711.                            
  712.         case WL_CONNECT_FAILED:
  713.                             #if SERIAL
  714.                                 #if ENGLISH
  715.                                     Serial.printf("\nConnection failed");
  716.                                 #endif
  717.                                 #if POLISH
  718.                                     Serial.printf("\nPołączenie nieudane");
  719.                                 #endif
  720.                                 #if GERMANY
  721.                                     Serial.printf("\nVerbindung fehlgeschlagen");
  722.                                 #endif
  723.                             #endif
  724.                             break;
  725.     }      
  726. }
  727.  
  728. // ------------------------------------------------------------------------------------------------------------------- //
  729. // --- init Wi-Fi ---------------------------------------------------------------------------------------------------- //
  730. // ------------------------------------------------------------------------------------------------------------------- //
  731.  
  732. void initWiFi()
  733. {
  734.     WiFi.mode(WIFI_STA);
  735.     WiFi.begin(ssid, password);
  736.  
  737.     #if SERIAL    
  738.         #if ENGLISH
  739.             Serial.printf("\nConnecting to WiFi ..");
  740.         #endif
  741.         #if POLISH
  742.             Serial.printf("\nŁącze z siecią WiFi ..");
  743.         #endif
  744.         #if GERMANY
  745.             Serial.printf("\nNetzwerkverbindung mit WLAN ..");
  746.         #endif
  747.     #endif
  748.    
  749.     while (WiFi.status() != WL_CONNECTED)
  750.     {
  751.         Serial.print('.');
  752.         delay(200);
  753.     }
  754.  
  755.     statWiFi();
  756.        
  757.     WiFi.setAutoReconnect(true);
  758.     WiFi.persistent(true);
  759. }
  760.  
  761. // ------------------------------------------------------------------------------------------------------------------- //
  762. // --- reconect Wi-Fi ------------------------------------------------------------------------------------------------ //
  763. // ------------------------------------------------------------------------------------------------------------------- //
  764.  
  765. void reconectWifi()
  766. {
  767.     unsigned long currentMillis = millis();
  768.    
  769.     if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval))
  770.     {
  771.         #if SERIAL
  772.             #if ENGLISH
  773.                 Serial.println("Reconnecting to WiFi...");
  774.             #endif
  775.             #if POLISH
  776.                 Serial.println("Ponowne łączenie z Wi-Fi...");
  777.             #endif
  778.             #if GERMANY
  779.                 Serial.println("Erneut mit WLAN verbinden...");
  780.             #endif
  781.         #endif
  782.        
  783.         WiFi.disconnect();
  784.         WiFi.begin(ssid, password);
  785.        
  786.         statWiFi();
  787.        
  788.         previousMillis = currentMillis;
  789.   }
  790. }
  791.  
  792. // ------------------------------------------------------------------------------------------------------------------- //
  793. // --- schedulerInit ------------------------------------------------------------------------------------------------- //
  794. // ------------------------------------------------------------------------------------------------------------------- //
  795.  
  796. void scheluderInit()
  797. {
  798.     runner.init();                                       // inicjalizuj scheluder
  799.                                                                                  
  800.     runner.addTask(task_0);                              // dodaj zadanie do scheluder
  801.     task_0.enable();                                     // włącz zadanie do scheluder
  802.     runner.addTask(task_1);                              // dodaj zadanie do scheluder
  803.     task_1.enable();                                     // włącz zadanie do scheluder
  804.     runner.addTask(task_2);                              // dodaj zadanie do scheluder
  805.     task_2.enable();                                     // włącz zadanie do scheluder
  806.     runner.addTask(task_3);                              // dodaj zadanie do scheluder
  807.     task_3.enable();                                     // włącz zadanie do scheluder
  808.     runner.addTask(task_4);                              // dodaj zadanie do scheluder
  809.     task_4.enable();                                     // włącz zadanie do scheluder
  810.     runner.addTask(task_5);                              // dodaj zadanie do scheluder
  811.     task_5.enable();                                     // włącz zadanie do scheluder
  812.     runner.addTask(task_6);                              // dodaj zadanie do scheluder
  813.     task_6.enable();                                     // włącz zadanie do scheluder  
  814. }
  815.  
  816. // ------------------------------------------------------------------------------------------------------------------- //
  817. // --- S E T U P --- T F T --- I N I T ------------------------------------------------------------------------------- //
  818. // ------------------------------------------------------------------------------------------------------------------- //
  819.  
  820. void TFT_Init()
  821. {
  822.     tft.begin();
  823.     tft.setRotation(1);
  824.     TFT_DrawPanel();    
  825. }
  826.  
  827. // ------------------------------------------------------------------------------------------------------------------- //
  828. // --- S E T U P ----------------------------------------------------------------------------------------------------- //
  829. // ------------------------------------------------------------------------------------------------------------------- //
  830.  
  831. void setup()
  832. {
  833.     #if SERIAL
  834.         Serial.begin(SerialSpeed);
  835.     #endif
  836.  
  837.     delay(200);
  838.        
  839.     tools.TypeWriter("Project by Tomasz Majcher", 100, true);  
  840.     tools.TypeWriter("Tools version 0.01", 100);
  841.     tools.BreakLine();
  842.    
  843.     initWiFi();
  844.     TFT_Init();
  845.     scheluderInit();
  846.  
  847.     AM2320.begin();                         // AM2320 sensor start
  848.     dht.setup(DHTpin, DHTesp::DHT11);       // DHT11 sensor start
  849.  
  850.     Task6Callback();
  851. }
  852.  
  853. // ------------------------------------------------------------------------------------------------------------------- //
  854. // --- L O O P ------------------------------------------------------------------------------------------------------- //
  855. // ------------------------------------------------------------------------------------------------------------------- //
  856.  
  857. void loop()
  858. {
  859.     runner.execute();     // scheluder init
  860.     reconectWifi();       // check Wi-Fi status
  861. }
  862.  
  863. // ------------------------------------------------------------------------------------------------------------------- //
  864. // --- D R A W   P A N E L   T F T ----------------------------------------------------------------------------------- //
  865. // ------------------------------------------------------------------------------------------------------------------- //
  866.  
  867. void TFT_DrawPanel()
  868. {
  869.     tft.fillScreen(TFT_LIGHTGRAY);                                                      // BACKGROUND COLOR (E-paper)
  870.  
  871.     tft.drawFastVLine(x_min+frame,    y_min+frame,    y_max-2*(frame),  TFT_BLACK);     // LEFT LINE
  872.     tft.drawFastVLine(x_min+frame+1,  y_min+frame+1,  y_max-2*(frame),  TFT_BLACK);     // LEFT LINE
  873.     tft.drawFastVLine(x_max-frame,    y_min+frame,    y_max-2*(frame),  TFT_BLACK);     // RIGHT LINE
  874.     tft.drawFastVLine(x_max-frame-1,  y_min+frame+1,  y_max-2*(frame),  TFT_BLACK);     // RIGHT LINE
  875.  
  876.     tft.drawFastHLine(x_min+frame,    y_min+frame,    x_max-2*(frame),  TFT_BLACK);     // UP LINE
  877.     tft.drawFastHLine(x_min+frame,    y_min+frame+1,  x_max-2*(frame),  TFT_BLACK);     // UP LINE
  878.     tft.drawFastHLine(x_min+frame,    y_max-frame,    x_max-2*(frame),  TFT_BLACK);     // DOWN LINE
  879.     tft.drawFastHLine(x_min+frame+1,  y_max-frame-1,  x_max-2*(frame),  TFT_BLACK);     // DOWN LINE
  880.  
  881.     tft.drawFastHLine(x_min+frame,    y_min+frame+60,    x_max-2*(frame),  TFT_BLACK);   // CLOCK LINE DOWN
  882.     tft.drawFastHLine(x_min+frame,    y_min+frame+61,    x_max-2*(frame),  TFT_BLACK);   // CLOCK LINE DOWN
  883.     //tft.drawFastVLine(x_min+157,      y_min+frame+1,     60,  TFT_BLACK);                // CLOCK LINE RIGHT
  884.     //tft.drawFastVLine(x_min+156,      y_min+frame+1,     60,  TFT_BLACK);                // CLOCK LINE RIGHT
  885.  
  886.     tft.drawFastHLine(x_min+frame,    y_min+frame+80,    x_max-2*(frame),  TFT_BLACK);   // PROGRES LINE DOWN
  887.     tft.drawFastHLine(x_min+frame,    y_min+frame+81,    x_max-2*(frame),  TFT_BLACK);   // PROGRES LINE DOWN
  888.  
  889.     tft.drawFastHLine(x_min+frame,    y_min+frame+150,    x_max-2*(frame),  TFT_BLACK);   // SENSOR LINE
  890.     tft.drawFastHLine(x_min+frame,    y_min+frame+151,    x_max-2*(frame),  TFT_BLACK);   // SENSOR LINE
  891.  
  892.     tft.drawFastVLine(x_min+165,      85,     150,  TFT_BLACK);                           // SENSOR LINE
  893.     tft.drawFastVLine(x_min+166,      85,     150,  TFT_BLACK);                           // SENSOR LINE
  894. }
  895.  
  896. // ------------------------------------------------------------------------------------------------------------------- //
  897. // --- T F T   S H O W    TEMPERATURE -------------------------------------------------------------------------------- //
  898. // ------------------------------------------------------------------------------------------------------------------- //
  899.  
  900. void TFT_ShowTemperature()
  901. {
  902.     // ----------------------------------------------------------------- //
  903.     // --- show temperature INSIDE from AM2320 sensor ------------------ //
  904.     // ----------------------------------------------------------------- //
  905.  
  906.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);
  907.     tft.drawCentreString("Temperature IN",80,95,2);
  908.     String Buffor = String(sensor.temperature) + "`C";
  909.     tft.drawCentreString(Buffor,80,120,4);
  910.  
  911.     // ----------------------------------------------------------------- //
  912.     // --- show temperature OUTSIDE from DHT11 sensor ------------------ //
  913.     // ----------------------------------------------------------------- //    
  914.    
  915.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);
  916.     tft.drawCentreString("Temperature OUT",245,95,2);
  917.     Buffor = String(myDHT.temperature) + "`C";
  918.     tft.drawCentreString(Buffor,240,120,4);    
  919.    
  920.     // ----------------------------------------------------------------- //
  921.    
  922. }
  923.  
  924. // ------------------------------------------------------------------------------------------------------------------- //
  925. // --- T F T   S H O W    HUMIDITY -------------------------------------------------------------------------------- //
  926. // ------------------------------------------------------------------------------------------------------------------- //
  927.  
  928. void TFT_ShowHumidity()
  929. {
  930.     // ----------------------------------------------------------------- //
  931.     // --- show humidity INSIDE from AM2320 sensor --------------------- //
  932.     // ----------------------------------------------------------------- //
  933.  
  934.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);
  935.     tft.drawCentreString("HUMIDITY IN",80,165,2);
  936.     String Buffor = String(sensor.humidity) + "%";
  937.     tft.drawCentreString(Buffor,80,190,4);
  938.  
  939.     // ----------------------------------------------------------------- //
  940.     // --- show humidity OUTSIDE from DHT11 sensor --------------------- //
  941.     // ----------------------------------------------------------------- //
  942.    
  943.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);
  944.     tft.drawCentreString("HUMIDITY OUT",240,165,2);
  945.     Buffor = String(myDHT.humidity) + "%";
  946.     tft.drawCentreString(Buffor,240,190,4);
  947.  
  948.     // ----------------------------------------------------------------- //
  949. }
  950.  
  951. // ------------------------------------------------------------------------------------------------------------------- //
  952. // --- T F T   S H O W    D A T E -=---------------------------------------------------------------------------------- //
  953. // ------------------------------------------------------------------------------------------------------------------- //
  954.  
  955. void TFT_ShowDate()
  956. {
  957.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);    
  958.     //tft.drawCentreString(DAY[Time.DayOfTheWeek], 240, 10, 4);    
  959.     tft.drawCentreString(Time.TFT_Data, 240, 25, 4);  
  960. }
  961.  
  962. // ------------------------------------------------------------------------------------------------------------------- //
  963. // --- T F T   S H O W    T I M E ------------------------------------------------------------------------------------ //
  964. // ------------------------------------------------------------------------------------------------------------------- //
  965.  
  966. void TFT_ShowTime()
  967. {
  968.     tft.setTextColor(TFT_BLACK, TFT_LIGHTGRAY);            
  969.     tft.drawString(Time.TFT_Time, 12, 12, 7);      
  970. }
  971.  
  972. // ------------------------------------------------------------------------------------------------------------------- //
  973. // --- T F T   P R O G R E S   T I M E ------------------------------------------------------------------------------- //
  974. // ------------------------------------------------------------------------------------------------------------------- //
  975.  
  976. void TFT_ShowProgres()
  977. {
  978.     int progres = Time.Second;
  979.     static bool F_Clear = false;
  980.  
  981.     if (progres>50) F_Clear = true;
  982.  
  983.     if ( !progres && F_Clear )
  984.     {
  985.         tft.fillRect(13, 70, 300, 12, TFT_DAY_BACKGROUND);                    // fast clear progres bar    
  986.         F_Clear = false;
  987.     }
  988.     else
  989.     if ( progres < 5 && F_Clear )
  990.     {
  991.         tft.fillRect(13, 70, 300, 12, TFT_DAY_BACKGROUND);                    // fast clear progres bar    
  992.         F_Clear = false;
  993.     }
  994.  
  995.     for(int i = 0; i < progres; i++)
  996.     {
  997.         tft.fillRect(13+(i*5), 70, 3, 12, TFT_DAY_TEXT);                       // fast draw progres bar
  998.     }
  999.  
  1000. }
  1001.  
  1002. // ------------------------------------------------------------------------------------------------------------------- //
  1003. // --- T F T   S H O W    B U G -  ----------------------------------------------------------------------------------- //
  1004. // ------------------------------------------------------------------------------------------------------------------- //
  1005.  
  1006. void TFT_ShowBug()
  1007. {
  1008.     static int position_x = 0;
  1009.     static int position_y = 0;
  1010.     static bool step_1 = true;
  1011.     static bool step_2 = false;
  1012.     static bool step_3 = false;
  1013.     static bool step_4 = false;
  1014.  
  1015.     if (step_1)
  1016.     {
  1017.         if (position_x<140)
  1018.         {
  1019.             tft.fillRect(165+position_x, 15, 1, 5, TFT_DAY_BACKGROUND);
  1020.             position_x ++;
  1021.             tft.fillRect(165+position_x, 15, 5, 5, TFT_DAY_TEXT);
  1022.         }        
  1023.         else
  1024.         {
  1025.             step_1 = false;   // stop move bug to right
  1026.             step_2 = true;    // start move bug to down
  1027.         }            
  1028.     }
  1029.     else
  1030.     if (step_2)
  1031.     {
  1032.         if (position_y<35)
  1033.         {
  1034.             tft.fillRect(165+position_x, 15+position_y, 5, 1, TFT_DAY_BACKGROUND);
  1035.             position_y ++;
  1036.             tft.fillRect(165+position_x, 15+position_y, 5, 5, TFT_DAY_TEXT);      
  1037.         }
  1038.         else
  1039.         {
  1040.             step_2 = false;   // stop move bug to down
  1041.             step_3 = true;    // start move bug to left
  1042.         }
  1043.     }
  1044.     else
  1045.     if (step_3)
  1046.     {
  1047.         if (position_x>0)
  1048.         {
  1049.             tft.fillRect(165+position_x+5, 15+position_y, 1, 5, TFT_DAY_BACKGROUND);
  1050.             position_x --;
  1051.             tft.fillRect(165+position_x, 15+position_y, 5, 5, TFT_DAY_TEXT);  
  1052.         }
  1053.         else
  1054.         {
  1055.             tft.fillRect(165+position_x+5, 15+position_y, 1, 5, TFT_DAY_BACKGROUND);
  1056.             step_3 = false;
  1057.             step_4 = true;
  1058.         }
  1059.     }
  1060.     else
  1061.     if (step_4)
  1062.     {
  1063.         if (position_y>0)
  1064.         {
  1065.             tft.fillRect(165+position_x, 15+position_y+5, 5, 1, TFT_DAY_BACKGROUND);
  1066.             position_y --;
  1067.             tft.fillRect(165+position_x, 15+position_y, 5, 5, TFT_DAY_TEXT);        
  1068.         }
  1069.         else
  1070.         {
  1071.             tft.fillRect(165+position_x, 15+position_y+5, 5, 1, TFT_DAY_BACKGROUND);
  1072.             step_4 = false;
  1073.             step_1 = true;
  1074.         }
  1075.     }
  1076. }
  1077.  
  1078. // ------------------------------------------------------------------------------------------------------------------- //
  1079. // --- E N D  -------------------------------------------------------------------------------------------------------- //
  1080. // ------------------------------------------------------------------------------------------------------------------- //
Advertisement
Add Comment
Please, Sign In to add comment