Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:ajipa:mihnea_stefan.voicu [2025/05/25 12:19]
mihnea_stefan.voicu [Hardware Design]
pm:prj2025:ajipa:mihnea_stefan.voicu [2025/05/25 22:00] (current)
mihnea_stefan.voicu
Line 10: Line 10:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Proiectul conține următoarele module necesare pentru funcționarea acestuia:+==Proiectul conține următoarele module necesare pentru funcționarea acestuia:==
   * senzori care colectează informații din mediul înconjurător și trimit valorile către unitatea de control (ESP8266): de temperatură,​ presiune, umiditate si UV;   * senzori care colectează informații din mediul înconjurător și trimit valorile către unitatea de control (ESP8266): de temperatură,​ presiune, umiditate si UV;
   * Unitatea de control – NodeMCU ESP8266, care primește datele de la senzori, le procesează și le afișează pe ecranul LCD, le trimite prin Wi-Fi către platformele WeatherUnderground și ThingSpeak și obține date meteo externe de la OpenWeather pentru comparație;​   * Unitatea de control – NodeMCU ESP8266, care primește datele de la senzori, le procesează și le afișează pe ecranul LCD, le trimite prin Wi-Fi către platformele WeatherUnderground și ThingSpeak și obține date meteo externe de la OpenWeather pentru comparație;​
Line 20: Line 20:
 Senzorii trimit date către ESP8266 → ESP le afișează pe LCD și le trimite prin Wi-Fi către platformele web → În paralel, ESP primește date de la OpenWeather → Compară valorile locale cu cele externe → Totul este alimentat de baterii, iar rezultatul este vizibil atât local (pe ecran), cât și online (în cloud). Senzorii trimit date către ESP8266 → ESP le afișează pe LCD și le trimite prin Wi-Fi către platformele web → În paralel, ESP primește date de la OpenWeather → Compară valorile locale cu cele externe → Totul este alimentat de baterii, iar rezultatul este vizibil atât local (pe ecran), cât și online (în cloud).
  
-{{:​pm:​prj2025:​ajipa:​diagrama_pm.jpg?650x400}}+{{:​pm:​prj2025:​ajipa:​diagrama_pm_v2.png?650x400}}
  
  
Line 96: Line 96:
  
  
-Descrierea codului aplicaţiei (firmware):+==Descrierea codului aplicaţiei (firmware):==
   * din punctul de vedere al bibliotecilor folosite, cea pe care am folosit-o pentru a realiza acest proiect este ESP8266WiFi,​ pentru a realiza legatura microcontroller-ului prin WiFi cu aplicatiile de unde extrage informatii;   * din punctul de vedere al bibliotecilor folosite, cea pe care am folosit-o pentru a realiza acest proiect este ESP8266WiFi,​ pentru a realiza legatura microcontroller-ului prin WiFi cu aplicatiile de unde extrage informatii;
   * elementul de noutate al proiectului consta in faptul ca aceasta statie meteo poate fi considerata una flexibila, intrucat este usor de folosit in orice mediu, fiind un dispozitiv de dimensiuni mici. De asemenea, in cazul in care unul dintre senzorii statiei masoara datele eronat sau ajunge sa fie defectuat, statia afiseaza si informatii despre vreme preluate de pe OpenWeather,​ astfel incat utilizatorul primeste mereu datele corecte;   * elementul de noutate al proiectului consta in faptul ca aceasta statie meteo poate fi considerata una flexibila, intrucat este usor de folosit in orice mediu, fiind un dispozitiv de dimensiuni mici. De asemenea, in cazul in care unul dintre senzorii statiei masoara datele eronat sau ajunge sa fie defectuat, statia afiseaza si informatii despre vreme preluate de pe OpenWeather,​ astfel incat utilizatorul primeste mereu datele corecte;
   * functionalitatile pe care le-am folosit in proiect, din cadrul laboratorului,​ sunt legate de utilizarea senzorului de temperatura prin intermediul ADC-ului, al celui de presiune prin I2C, iar al ecranului LCD prin SPI;   * functionalitatile pe care le-am folosit in proiect, din cadrul laboratorului,​ sunt legate de utilizarea senzorului de temperatura prin intermediul ADC-ului, al celui de presiune prin I2C, iar al ecranului LCD prin SPI;
  
-Scheletul proiectului,​ care este organizat în patru componente principale:+==Scheletul proiectului,​ care este organizat în patru componente principale:==
   * Inițializare hardware și conexiuni (WiFi, senzori, ecran TFT) – setup(), unde se configurează:​   * Inițializare hardware și conexiuni (WiFi, senzori, ecran TFT) – setup(), unde se configurează:​
-    * conexiunea la rețeaua WiFi WiFi.begin(...); +    * conexiunea la rețeaua WiFi  <​code>​WiFi.begin(...)</​code>​ 
-    * inițializarea senzorilor, precum DHT22 dht.begin(); +    * inițializarea senzorilor, precum DHT22  <​code>​dht.begin()</​code>​ 
-    * inițializarea ecranului TFT tft.begin(). +    * inițializarea ecranului TFT <​code>​tft.begin()</​code>​ 
-  * Achiziția datelor locale de la senzori – loop(), unde se colectează datele prin următoarele linii: ​ +  * Achiziția datelor locale de la senzori – loop(), unde se colectează datele prin următoarele linii:<​code>​float tempDHT = dht.readTemperature() 
-    * float tempDHT = dht.readTemperature(); +float humDHT = dht.readHumidity() 
-    ​* ​float humDHT = dht.readHumidity(); +float pressureBMP = bmp.readPressure()</​code>​ 
-    ​* ​float pressureBMP = bmp.readPressure(); +  * Preluarea datelor externe de la OpenWeather ​ <​code>​getWeatherData() 
-  * Preluarea datelor externe de la OpenWeather ​– getWeatherData() ​și getUVIndexFromOpenWeather();+getUVIndexFromOpenWeather()</​code>​
   * Transmiterea datelor către platforme externe:   * Transmiterea datelor către platforme externe:
-    * pentru ThingSpeak am utilizat urmatorul cod+    * pentru ThingSpeak am utilizat urmatorul cod<​code> ​ if (WiFi.status() == WL_CONNECTED) { 
 +      WiFiClient client; 
 +      if (client.connect(server,​ 80)) { 
 +          String postStr = apiKey; 
 +          postStr += "&​field1="​ + String(tempDHT);​ 
 +          postStr += "&​field2="​ + String(tempOW);​ 
 +          postStr += "&​field3="​ + String(pressureBMP);​ 
 +          postStr += "&​field4="​ + String(pressureOW);​ 
 +          postStr += "&​field5="​ + String(humDHT);​ 
 +          postStr += "&​field6="​ + String(humidityOW);​ 
 +          postStr += "&​field7="​ + String(uvIndex);​ 
 +          postStr += "&​field8="​ + String(uvIndexOW);​ 
 +          postStr += "​\r\n\r\n";​ 
 + 
 +          client.print("​POST /update HTTP/​1.1\n"​);​ 
 +          client.print("​Host:​ api.thingspeak.com\n"​);​ 
 +          client.print("​Connection:​ close\n"​);​ 
 +          client.print("​X-THINGSPEAKAPIKEY:​ " + apiKey + "​\n"​);​ 
 +          client.print("​Content-Type:​ application/​x-www-form-urlencoded\n"​);​ 
 +          client.print("​Content-Length:​ " + String(postStr.length()) + "​\n\n"​);​ 
 +          client.print(postStr);​ 
 + 
 +          Serial.println("​Date trimise către ThingSpeak:"​);​ 
 +          Serial.println(postStr);​ 
 +      } 
 +      client.stop();​ 
 +  }</​code>​ 
 +   
 +  ==Interacțiunea între funcționalități== 
 +  *În loop(), funcționalitățile interacționează în următorul mod: 
 +    *Se citesc datele locale; 
 +    *Se preiau date externe de pe Internet, exemplu OpenWeather;​ 
 +    *Se afișează toate datele, locale și externe pe ecranul TFT; 
 +    *Se trimit datele către serverele cloud; 
 +    *Se așteaptă 20 de secunde pentru un nou ciclu de actualizare. 
 + 
 +==Validarea funcționării== 
 +  *Validare prin consola serială, sunt afișate în consolă datele citite și URL-urile trimise către servere; 
 +  *Validare vizuală prin ecranul TFT, unde datele locale și cele externe sunt afișate distinct pe ecran; 
 +  *Validare prin platformele externe, accesând contul ThingSpeak sau Weather Underground,​ utilizatorul poate vizualiza graficele actualizate în timp real, ceea ce confirmă că datele au fost transmise cu succes. 
 + 
 +<​html>​ 
 +<iframe width="​800"​ height="​450"​ 
 +        src="​https://​www.youtube.com//​embed/​3CEIe9QNAU0"​ 
 +        frameborder="​0"​ 
 +        allow="​autoplay;​ encrypted-media"​ 
 +        allowfullscreen>​ 
 +</​iframe>​ 
 +</​html>​ 
 + 
 + 
 +===== Rezultate obținute ===== 
 + 
 +În urma implementării și testării proiectului,​ au fost obținute următoarele rezultate:​ 
 +  *Citirea corectă a datelor locale de la senzorii DHT22 (temperatură și umiditate), BMP280 (presiune atmosferică) și senzorul UV analogic; 
 +  *Afișarea pe ecranul TFT a datelor colectate local, alături de datele meteorologice preluate de la serviciul OpenWeather,​ în format lizibil și structurat;​ 
 +  *Obținerea datelor externe prin conexiune WiFi și API-uri HTTP de la OpenWeatherMap;​ 
 +  *Transmiterea cu succes a datelor către ThingSpeak și Weather Underground;​ 
 +  *Valorile UV pot varia brusc din cauza fluctuațiilor de lumină ambientală,​ ceea ce poate necesita un algoritm de stabilizare. 
 + 
 + 
 +===== Concluzii ===== 
 + 
 +În concluzie, proiectul propus demonstrează un sistem funcțional,​ robust și capabil să furnizeze utilizatorului date meteo complete, combinând surse proprii de măsurare cu informații din surse externe. Interacțiunea dintre componente: ESP8266, senzori, ecran TFT, conexiune WiFi și API-uri externe este bine sincronizată și validată prin teste practice. Acest lucru arată că proiectul este complex din punct de vedere tehnic și poate fi utilizat ca bază pentru proiecte mai avansate sau implementări reale. 
 + 
 + 
 +===== Download ===== 
 + 
 +[[https://​github.com/​Mihnea0309/​Statie-Meteo-PM|Repository Github - Stație Meteo]] 
 + 
 + 
 +===== Bibliografie și resurse ===== 
 + 
 +[[https://​thesolaruniverse.wordpress.com/​2021/​05/​02/​wiring-an-ili9341-spi-tft-display-with-esp8266-based-microcontroller-boards-nodemcu-and-wemos-d1-mini/​|Cum se conectează ecranul la ESP8266]] 
 + 
 +[[https://​openweathermap.org/​current|OpenWeather API]] 
  
pm/prj2025/ajipa/mihnea_stefan.voicu.1748164749.txt.gz · Last modified: 2025/05/25 12:19 by mihnea_stefan.voicu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0