Advertisement
PowerTGS440

ESP32-WeatherStation pogoda v_0.02

Mar 27th, 2021
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.15 KB | None | 0 0
  1. // =========================================================================================================== //
  2. //
  3. // Plik        : pogoda.h                                                                
  4. // Wersja      : 0.02 Beta                                                                      
  5. // Data        : 02.03.2021                                                                    
  6. // Autor       : TRANSLINE GROUP, Tomasz Majcher, Lubin                                        
  7. //
  8. //
  9. // E-Mail      : transline.majcher@gmail.com    
  10. //  
  11. //                                                        
  12. // Licencja v1 : Donationware. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane    
  13. //               i dystrybuowane pod warunkiem, że licencjobiorca zapłaci autorowi symboliczną kwotę.      
  14. //               Wielkość opłaty zależy od licencjobiorcy.
  15. //                                                
  16. //                                                                                                        
  17. // Licencja v2 : OpenSource. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane      
  18. //               i dystrybuowane pod warenkiem, że licencjobiorca jest członkiem grupy: ESP Projekty      
  19. //               oraz ESP Polska                                                                          
  20. //                                                    
  21. // =========================================================================================================== //
  22. // === H I S T O R I A   W E R S J I ========================================================================= //
  23. // =========================================================================================================== //
  24. //
  25. // wersja 0.02 STABLE (27.03.2021) - dodano : return miasto i kraj odczytu
  26. // wersja 0.01 STABLE (20.03.2021) - klasa TPogoda
  27. // --- SPIS METOD -------------------------------------------------------------------------------------------- //
  28. //
  29. //
  30. //  
  31. // --- INCLUDE ----------------------------------------------------------------------------------------------- //
  32.  
  33. #include <Arduino_JSON.h>                     // parser JSON
  34. #include <TimeLib.h>                          // parser TIME
  35. #include <HTTPClient.h>                       // klient HTTP
  36.  
  37. // --- TYPEDEF ----------------------------------------------------------------------------------------------- //
  38.  
  39.  
  40.  
  41.  
  42. // --- DEFINE ------------------------------------------------------------------------------------------------ //
  43.  
  44. #define True        1
  45. #define False       0
  46.  
  47. #define Terminal    True
  48.  
  49. #define DebugLev1   True
  50. #define DebugLev2   True
  51.  
  52. // --- ZMIENNE ----------------------------------------------------------------------------------------------- //
  53.  
  54.  
  55. // --- OBIEKTY ----------------------------------------------------------------------------------------------- //
  56.  
  57. extern Tools tools;                   // obiekt tools z biblioteki tools.h
  58.  
  59. // --- KLASA ------------------------------------------------------------------------------------------------- //
  60.  
  61. class TPogoda
  62. {
  63.     // --- zmienne i metody prywatne ----------------------------------------------------------
  64.    
  65.     private:
  66.        
  67.         JSONVar myObject;                     // parser JSON    
  68.  
  69.         String openWeatherMapApiKey = "565a88311e7c48c2d00b170cd0765c91";    // token
  70.         String city = "Lubin";                                               // miasto
  71.         String countryCode = "Pl";                                           // kraj
  72.         String jsonBuffer;
  73.        
  74.         String serverPath = "http://api.openweathermap.org/data/2.5/weather?q="      
  75.                           + city
  76.                           + ","
  77.                           + countryCode
  78.                           + "&APPID="
  79.                           + openWeatherMapApiKey;                            // ścieżnka serwera
  80.        
  81.         const double Kelvin = 273.15;                                        // wartość Kelvin
  82.  
  83.         // --- struktura danych pobranych z serwera OpenWeatherMap (API) --------------------------
  84.         struct SPogoda
  85.         {
  86.             double          temperatura     = 0;
  87.             double          temperatura_odczuwalna = 0;
  88.             double          temperatura_minimalna = 0;
  89.             double          temperatura_maksymalna = 0;
  90.             double          temperatura_srednia = 0;
  91.             int             cisnienie = 0;
  92.             int             wilgotnosc = 0;
  93.             int             widzialnosc = 0;
  94.             double          wiatr_predkosc = 0;
  95.             int             wiatr_kierunek = 0;
  96.             double          wiatr_porywy = 0;
  97.             int             zachmurzenie = 0;
  98.             String          czas_odczytu = "";
  99.             char            wschod_slonca[10];
  100.             char            zachod_slonca[10];
  101.             int             strefa_czasowa = 0;
  102.             String          miasto = "Osiek";
  103.             String          kraj = "Polska";            
  104.         } pogoda;
  105.                        
  106.         // --- metody prywatne --------------------------------------------------------------------
  107.         String httpGETRequest(const char* serverName);
  108.         void ParsujPogode();
  109.  
  110.         inline double PobierzTemperature();
  111.         inline int    PobierzCisnienie();
  112.         inline int    PobierzWilgotnosc();
  113.         inline int    PobierzWidocznosc();
  114.         inline double PobierzWiatr();
  115.         inline int    PobierzZachmurzenie();
  116.         inline String PobierzWschodSlonca();
  117.         inline String PobierzZachodslonca();
  118.  
  119.    
  120.     // --- zmienne i metody publiczne --------------------------------------------------------
  121.    
  122.     public:
  123.  
  124.         // --- konstruktor domyślny ----------------------------------------------------------
  125.         TPogoda()
  126.         {
  127.            
  128.         }
  129.  
  130.         TPogoda(String miasto, String kraj)
  131.         {
  132.             city = miasto;
  133.             countryCode = kraj;
  134.         }
  135.  
  136.         // --- destruktor domyślny -----------------------------------------------------------
  137.         ~TPogoda()
  138.         {
  139.  
  140.         }
  141.  
  142.         // --- metody publiczne --------------------------------------------------------------
  143.  
  144.         void PobierzPogode();        // definicja : pobiera pogodę z serwera OpenWeatherMap
  145.         void PokazPogode();          // drukuj na Serial dane pogodowe
  146.         inline double PublicPobierzTemperature();
  147.         inline int PublicPobierzCisnienie();
  148.         inline int PublicPobierzWilgotnosc();
  149.         inline int PublicPobierzZachmurzenie();
  150.         inline int PublicPobierzPredkoscWiatru();
  151.         String PublicPobierzWschodSlonca();
  152.         String PublicPobierzZachodSlonca();
  153.         String PublicPobierzLokalizacje();
  154. };
  155.  
  156. // --- METODY PRYWATNE --------------------------------------------------------------------------------------- //
  157. // ----------------------------------------------------------------------------------------------------------- //
  158. // --- http GET string --------------------------------------------------------------------------------------- //
  159.  
  160. String TPogoda :: httpGETRequest(const char* serverName)              
  161. {                                                                    
  162.     HTTPClient http;                                                  
  163.     http.begin(serverName);                                          
  164.     int httpResponseCode = http.GET();                                
  165.     String bufor = "{}";                                              
  166.                                                                      
  167.     if ( httpResponseCode > 0 ) bufor = http.getString();    
  168.     http.end();
  169.     return bufor;
  170. }  
  171.  
  172. // --- METODY PRYWATNE --------------------------------------------------------------------------------------- //
  173. // ----------------------------------------------------------------------------------------------------------- //
  174. // --- Parser danych pogodowych pobranych z serwera OpenWeatherMap ------------------------------------------- //
  175.  
  176. void TPogoda :: ParsujPogode()
  177. {                                                                                                              
  178.       long buforLong = 0;
  179.  
  180.       pogoda.temperatura = myObject["main"]["temp"];      
  181.       pogoda.temperatura -= Kelvin;                                          
  182.       pogoda.temperatura_odczuwalna = myObject["main"]["feels_like"];                  
  183.       pogoda.temperatura_odczuwalna -= Kelvin;                                                                                
  184.       pogoda.temperatura_minimalna = myObject["main"]["temp_min"];
  185.       pogoda.temperatura_minimalna -= Kelvin;                                                                                  
  186.       pogoda.temperatura_maksymalna = myObject["main"]["temp_max"];
  187.       pogoda.temperatura_maksymalna -= Kelvin;                                                                          
  188.       pogoda.cisnienie = myObject["main"]["pressure"];                                                                                                            
  189.       pogoda.wilgotnosc = myObject["main"]["humidity"];
  190.       pogoda.widzialnosc = myObject["visibility"];
  191.       pogoda.wiatr_predkosc = myObject["wind"]["speed"];
  192.       pogoda.wiatr_kierunek = myObject["wind"]["deg"];
  193.       pogoda.wiatr_porywy = myObject["wind"]["gust"];
  194.       pogoda.zachmurzenie = myObject["clouds"]["all"];
  195.  
  196.       pogoda.czas_odczytu = String( hour(myObject["dt"])+1 ) + " : "
  197.                           + String( minute(myObject["dt"]) ) + " : "
  198.                           + String( second(myObject["dt"]) );
  199.  
  200.       sprintf(pogoda.wschod_slonca, "%02d:%02d",hour(myObject["sys"]["sunrise"])+1,minute(myObject["sys"]["sunrise"]));                                                  
  201.                                                                                                          
  202.       sprintf(pogoda.zachod_slonca, "%02d:%02d",hour(myObject["sys"]["sunset"])+1,minute(myObject["sys"]["sunset"]));    
  203.      
  204.       pogoda.strefa_czasowa = myObject["timezone"];
  205.       pogoda.miasto = myObject["name"];
  206.       pogoda.kraj = myObject["sys"]["country"];
  207.  
  208.       #if Terminal  
  209.           #if DebugLev2                                                                    
  210.               tools.PokazWiadomosc("Class: TPogoda","Metoda: ParsujPogode","JSON parsowanie zakonczone");
  211.           #endif
  212.       #endif
  213. }
  214.  
  215. // ----------------------------------------------------------------------------------------------------------- //
  216.  
  217. inline double TPogoda :: PobierzTemperature()
  218. {
  219.     return pogoda.temperatura;
  220. }
  221.  
  222. // ----------------------------------------------------------------------------------------------------------- //        
  223.  
  224. inline int TPogoda :: PobierzCisnienie()
  225. {
  226.     return pogoda.cisnienie;
  227. }
  228.  
  229. // ----------------------------------------------------------------------------------------------------------- //
  230.  
  231. inline int TPogoda :: PobierzWilgotnosc()
  232. {
  233.     return pogoda.wilgotnosc;
  234. }
  235.  
  236. // ----------------------------------------------------------------------------------------------------------- //
  237.  
  238. inline int TPogoda :: PobierzWidocznosc()
  239. {
  240.     return pogoda.widzialnosc;
  241. }
  242.  
  243. // ----------------------------------------------------------------------------------------------------------- //
  244.  
  245. inline double TPogoda :: PobierzWiatr()
  246. {
  247.     return pogoda.wiatr_predkosc;
  248. }
  249.  
  250. // ----------------------------------------------------------------------------------------------------------- //
  251.  
  252. inline int TPogoda :: PobierzZachmurzenie()
  253. {
  254.     return pogoda.zachmurzenie;
  255. }
  256.  
  257. // ----------------------------------------------------------------------------------------------------------- //
  258.  
  259. inline String TPogoda ::PobierzWschodSlonca()
  260. {
  261.     return String(pogoda.wschod_slonca);
  262. }
  263.  
  264. // ----------------------------------------------------------------------------------------------------------- //
  265.  
  266. inline String TPogoda :: PobierzZachodslonca()
  267. {
  268.     return String(pogoda.zachod_slonca);
  269. }
  270.  
  271. // --- METODY PUBLICZNE -------------------------------------------------------------------------------------- //
  272. // ----------------------------------------------------------------------------------------------------------- //
  273. // --- Pobierz pogodę z serwera Open Weather Map ------------------------------------------------------------- //
  274.  
  275. void TPogoda :: PobierzPogode()
  276. {
  277.     if(WiFi.status()== WL_CONNECTED)                                                            
  278.     {                                                                                            
  279.         jsonBuffer = httpGETRequest(serverPath.c_str());                                                      
  280.                                                                                                              
  281.         #if Terminal        
  282.             #if DebugLev1                                
  283.                 tools.PokazWiadomosc("Class: TPogoda","Metoda: PobierzPogode","Pobrano dane z OpenWeatherMap");
  284.             #endif
  285.         #endif                                                                                              
  286.                                                                                                              
  287.         myObject = JSON.parse(jsonBuffer);
  288.  
  289.         ParsujPogode();
  290.                                                                                                                
  291.         if (JSON.typeof(myObject) == "undefined") return;                                                      
  292.     }                                                                                                          
  293. }
  294.  
  295. // ----------------------------------------------------------------------------------------------------------- //
  296. // --- Pokaz pogodę zapisaną w strukturze SPogoda pogoda ----------------------------------------------------- //
  297.  
  298. void TPogoda :: PokazPogode()
  299. {
  300.     String bufor = "";
  301.    
  302.     tools.DrukujLinie(60);
  303.     bufor = "Czas odczytu             " + pogoda.czas_odczytu + " UTC";
  304.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  305.  
  306.     bufor = "Strefa czasowa           " + String(pogoda.strefa_czasowa);
  307.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  308.  
  309.     bufor = "Miasto / kraj            " + pogoda.miasto + ", " + pogoda.kraj;
  310.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  311.  
  312.     bufor = "Wschod slonca            " + String(pogoda.wschod_slonca);
  313.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  314.  
  315.     bufor = "Zachod slonca            " + String(pogoda.zachod_slonca);
  316.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  317.  
  318.     bufor = "Temperatura              " + String(pogoda.temperatura) + " st.C";
  319.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  320.  
  321.     bufor = "Temperatura odczuwalna   " + String(pogoda.temperatura_odczuwalna) + " st.C";
  322.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  323.  
  324.     bufor = "Temperatura minimalna    " + String(pogoda.temperatura_minimalna) + " st.C";
  325.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  326.  
  327.     bufor = "Temperatura maksymalna   " + String(pogoda.temperatura_maksymalna) + " st.C";
  328.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  329.  
  330.     bufor = "Cisnienie atmosferyczne  " + String(pogoda.cisnienie) + " mPa";
  331.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  332.  
  333.     bufor = "Wilgotnosc powietrza     " + String(pogoda.wilgotnosc) + " %";
  334.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  335.  
  336.     bufor = "Widocznosc               " + String(pogoda.widzialnosc) + " metrow";
  337.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  338.  
  339.     bufor = "Predkosc wiatru          " + String(pogoda.wiatr_predkosc) + " km/h";
  340.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  341.  
  342.     bufor = "Kierunek wiatru          " + String(pogoda.wiatr_kierunek) + " stopni";
  343.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  344.  
  345.     bufor = "Porywy wiatru            " + String(pogoda.wiatr_porywy) + " km/h";
  346.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  347.  
  348.     bufor = "Zachmurzenie (chmury)    " + String(pogoda.zachmurzenie) + " %";
  349.     tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
  350.  
  351. }
  352.  
  353. // ----------------------------------------------------------------------------------------------------------- //
  354. // --- Pobierz Temperaturę ze struktury pogoda --------------------------------------------------------------- //
  355.  
  356. inline double TPogoda :: PublicPobierzTemperature()
  357. {
  358.     return pogoda.temperatura;
  359. }
  360.  
  361. // ----------------------------------------------------------------------------------------------------------- //
  362. // --- Pobierz Cisnienie ze struktury pogoda ----------------------------------------------------------------- //
  363.  
  364. inline int TPogoda :: PublicPobierzCisnienie()
  365. {
  366.     return pogoda.cisnienie;
  367. }
  368.  
  369. // ----------------------------------------------------------------------------------------------------------- //
  370. // --- Pobierz Cisnienie ze struktury pogoda ----------------------------------------------------------------- //
  371.  
  372. inline int TPogoda :: PublicPobierzWilgotnosc()
  373. {
  374.     return pogoda.wilgotnosc;
  375. }
  376.  
  377. // ----------------------------------------------------------------------------------------------------------- //
  378. // --- Pobierz Zachmurzenie ze struktury pogoda -------------------------------------------------------------- //
  379.  
  380. inline int TPogoda :: PublicPobierzZachmurzenie()
  381. {
  382.     return pogoda.zachmurzenie;
  383. }
  384.  
  385. // ----------------------------------------------------------------------------------------------------------- //
  386. // --- Pobierz Zachmurzenie ze struktury pogoda -------------------------------------------------------------- //
  387.  
  388. inline int TPogoda :: PublicPobierzPredkoscWiatru()
  389. {
  390.     return pogoda.wiatr_predkosc;
  391. }
  392.  
  393. // ----------------------------------------------------------------------------------------------------------- //
  394. // --- Pobierz Wschod Słońca --------------------------------------------------------------------------------- //
  395.  
  396. String TPogoda :: PublicPobierzWschodSlonca()
  397. {
  398.     return String(pogoda.wschod_slonca);
  399. }
  400.  
  401. // ----------------------------------------------------------------------------------------------------------- //
  402. // --- Pobierz Zachód Słońca --------------------------------------------------------------------------------- //
  403.        
  404. String TPogoda :: PublicPobierzZachodSlonca()
  405. {
  406.     return String(pogoda.zachod_slonca);
  407. }
  408.  
  409. // ----------------------------------------------------------------------------------------------------------- //
  410. // --- Pobierz Lokalizacje ----------------------------------------------------------------------------------- //
  411.  
  412. String TPogoda :: PublicPobierzLokalizacje()
  413. {
  414.     return ( pogoda.miasto + ", " + pogoda.kraj );
  415. }
  416.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement