Differences

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

Link to this comparison view

pm:prj2025:fstancu:viky_andreea.ilie [2025/05/28 07:56]
viky_andreea.ilie [Jurnal]
pm:prj2025:fstancu:viky_andreea.ilie [2025/05/30 19:16] (current)
viky_andreea.ilie [Software Design]
Line 2: Line 2:
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul ​meu constă într-machetă de casă inteligentă (smart house)care integrează o serie de funcționalități moderne menite să imite controlul automatizat al unei locuințe reale.+Proiectul ​"Smart House" implementează un sistem de control și monitorizare a casei inteligente bazat pe un microcontroler ESP32. Sistemul oferă o interfață web accesibilă dintr-un browser, permițând utilizatorilor autentificați să controleze diverse dispozitive ​(luminiușa de garaj) și să vizualizeze date de la senzori (temperatură și umiditate). Comunicația între client (browser) șserver (ESP32) se realizează prin HTTP, cu datele de stare și control transmise adesea în format text simplu sau JSON. 
    
 Utilizatorul va putea interacționa cu macheta prin intermediul unei aplicații, având posibilitatea să: Utilizatorul va putea interacționa cu macheta prin intermediul unei aplicații, având posibilitatea să:
Line 10: Line 11:
 - deschidă sau închidă ușa de la garaj, - deschidă sau închidă ușa de la garaj,
  
-primească notificări ​de tip alarmă în cazul în care este detectată mișcare în locuință în timp ce luminile sunt stinse.+contine un senzor ​de temperatura si umiditate.
  
 Ideea proiectului a pornit de la dorința de a ilustra modul în care tehnologia poate fi integrată într-un mediu domestic pentru a spori confortul, securitatea și eficiența energetică. Ideea proiectului a pornit de la dorința de a ilustra modul în care tehnologia poate fi integrată într-un mediu domestic pentru a spori confortul, securitatea și eficiența energetică.
Line 17: Line 18:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Locuința va fi formată din opt camere, dintre care una va fi destinată garajului. În fiecare cameră, cu excepția garajului, va fi instalat câte un LED care poate fi aprins sau stins direct din aplicația ​mobilă, oferind un control inteligent al iluminatului.+Locuința va fi formată din opt camere, dintre care una va fi destinată garajului. În fiecare cameră, cu excepția garajului, va fi instalat câte un LED care poate fi aprins sau stins direct din aplicația ​web, oferind un control inteligent al iluminatului.
  
 Ușa garajului va putea fi controlată tot prin aplicație, fiind acționată de un servomotor, ceea ce permite deschiderea și închiderea acesteia de la distanță, în mod automatizat. Ușa garajului va putea fi controlată tot prin aplicație, fiind acționată de un servomotor, ceea ce permite deschiderea și închiderea acesteia de la distanță, în mod automatizat.
  
-Pentru un plus de siguranțădacă LED-ul ​de pe hol este stins iar senzorul detectează mișcare, se va declanșa automat ​alertă pe telefon, însoțită de activarea buzzerului. Astfel, sistemul oferă nu doar confort, ci și un nivel crescut de securitate pentru întreaga locuință. +In aplicatia web, de asemenea, se va afla si sectiune in care vei putea vedea umiditatea si temperatura din casa.
 {{:​pm:​prj2025:​fstancu:​diagramabloc.drawio.png?​400|}} {{:​pm:​prj2025:​fstancu:​diagramabloc.drawio.png?​400|}}
  
Line 49: Line 49:
 ===== Software Design ===== ===== Software Design =====
  
-<note tip> +**Mediu de Dezvoltare ​și Tehnologii**
-Mediu de Dezvoltare:+
  
-IDE: PlatformIO IDE (Visual Studio Code).+IDE: PlatformIO IDE (integrat cu Visual Studio Code) 
 +Framework Firmware: Arduino Core pentru ESP32 
 +Limbaj Firmware: C++ 
 +Tehnologii Frontend: HTML5, CSS3, JavaScript 
 +Sistem de Fișiere pe ESP32: LittleFS (pentru stocarea fișierelor web statice)
  
-Framework: Arduino Core pentru ESP32.+**Librării și Surse 3rd-Party**
  
-Limbaj ​de ProgramareC++.+<​Arduino.h>:​ Librăria ​de bază Arduino. 
 +<​WiFi.h>​Pentru conectivitate Wi-Fi a ESP32. 
 +<​WebServer.h>:​ Pentru crearea serverului HTTP pe ESP32. 
 +<​LittleFS.h>:​ Pentru gestionarea sistemului de fișiere LittleFS. 
 +<​ArduinoJson.h>:​ Pentru parsarea și generarea eficientă a obiectelor JSON (utilizată pentru răspunsurile la cererile privind ușa garajului și senzorul DHT). 
 +<​DHT.h>​ & <​DHT_U.h>:​ Pentru interfațarea cu senzorul de temperatură și umiditate DHT22. 
 +<​ESP32Servo.h>:​ Pentru controlul servomotorului ușii de garaj.
  
-Librării și Surse 3rd-Party+**Arhitectura Software** 
-<​Arduino.h>​Librăria de bază Arduino, oferind funcționalități fundamentale+ 
-<​WiFi.h>:​ Librărie standard ESP32 pentru managementul conexiunii ​Wi-Fi. +Sistemul este construit pe o arhitectură client-server
-<​WebServer.h>:​ Librărie standard ESP32 pentru crearea unui server ​web HTTP. +Server: 
-<​LittleFS.h>:​ Librărie pentru ​gestionarea sistemului ​de fișiere LittleFS, utilizat pentru stocarea paginilor ​web (HTML, CSS, JS). +Rulează pe ESP32
-<​ArduinoJson.h>​O librărie populară pentru parsarea ​și generarea eficientă a obiectelor JSON, utilizată pentru comunicarea datelor structurate cu clientul web (ex: starea senzorilorstarea ușii de garaj). +Gestionează conexiunea ​Wi-Fi. 
-<​DHT.h> ​și <DHT_U.h>: Librării pentru ​interfațarea cu senzorul de temperatură și umiditate DHT22 (probabil ​de la Adafruit)+Rulează un server HTTP care ascultă cereri de la clienți
-<​ESP32Servo.h>Librărie specifică ESP32 pentru ​controlul precis al servomotoarelor,​ utilizată pentru ​ușa garajului. +Implementează logica de control ​pentru ​dispozitivele fizice (LED-uri, servomotor). 
-"​credentials.hpp": ​Fișier header customizat, parte a proiectului,​ care conține datele de autentificare ​pentru rețeaua Wi-Fi și pentru interfața web (nu este o librărie 3rd-partyci o componentă a proiectului).+Citește date de la senzorul DHT22. 
 +Gestionează autentificarea utilizatorilor. 
 +Servește ​fișierele statice ale interfeței ​web (HTML, CSS, JS) din LittleFS
 + 
 +Client (Interfața Web): 
 +Rulează în browser-ul utilizatorului. 
 +Este compusă din fișiere HTML (index.htmllogin.html), CSS (style.css) și JavaScript (script.js). 
 +Prezintă interfața grafică pentru control ​și vizualizare. 
 +Trimite cereri HTTP (GET, POST) către serverul ESP32 pentru a efectua acțiuni sau a obține date. 
 +Actualizează dinamic interfața pe baza răspunsurilor ​de la server
 + 
 +Comunicare:​ 
 +Protocol: HTTP/HTTPS (în acest caz, HTTP pe portul 80). 
 +Format de DateText simplu (pentru ​stările ON/OFF ale luminilor) și JSON (pentru ​datele senzorului DHT și starea complexă ​a garajului)
 + 
 +**Componentele Software Detaliate** 
 + 
 +Fișierul de Configurare ​conține datele ​private: WIFI_SSID, WEB_USERNAME,​ WEB_PASSWORD. 
 + 
 +Inițializare (setup()):​ 
 +Inițializează comunicarea serială pentru debugging. 
 +Configurează pinii GPIO pentru LED-uri ca ieșiri (OUTPUT) și setează starea inițială (OFF). 
 +Inițializează și atașează servomotorul la pinul SERVO_PIN, setând poziția inițială la închis (SERVO_CLOSED_POS). 
 +Inițializează senzorul DHT22. 
 +Montează sistemul ​de fișiere LittleFS. Afișează fișierele din rădăcină ​pentru ​diagnosticare. 
 +Se conectează la rețeaua Wi-Fi utilizând credențialele din credentials.hpp. 
 +Definește rutele HTTP și funcțiile handler asociate pentru: 
 +Autentificare (/​login.html,​ /login, /logout). 
 +Servirea paginii principale (/) și resurselor statice (/​style.css,​ /​script.js). 
 +Controlul individual al luminilor (ex: /​toggleBedroom1,​ /​stateBedroom1). 
 +Controlul ușii de garaj (/​openGarageDoor,​ /​closeGarageDoor,​ /​garageDoorState). 
 +Citirea datelor de la senzorul DHT (/​dhtdata). 
 +Gestionarea paginilor negăsite (handleNotFound). 
 +Pornește serverul ​web
 + 
 +Bucla Principală ​(loop()): 
 +Apelează continuu server.handleClient() pentru a procesa cererile HTTP primitedoar dacă ESP32 este conectat la Wi-Fi.
  
-Algoritmi și Structuri Planificate/​Implementate:​ 
-Arhitectură Generală: 
-Sistemul funcționează ca un server web pe ESP32, accesibil printr-o interfață web dintr-un browser. 
-Evenimentele sunt declanșate de cereri HTTP de la client (browser). 
-Starea dispozitivelor (LED-uri, ușă garaj) este menținută în variabile globale și reflectată pe pinii GPIO. 
 Managementul Autentificării:​ Managementul Autentificării:​
-Un mecanism simplu de autentificare bazat pe username și parolă (definite în credentials.hpp). +Variabila ​isAuthenticated urmărește starea ​autentificării
-O variabilă booleană (isAuthenticatedurmărește starea ​sesiunii+handleLoginHTML()Servește pagina login.html
-Accesul la paginile protejate ​(exindex.html, rutele de controleste permis doar după autentificareUtilizatorii neautentificați sunt redirecționați către ​pagina de login (login.html)+handleLogin(): Procesează cererea POST de la login.html. Verifică username-ul șparola cu cele din credentials.hpp. Dacă sunt corecte, setează isAuthenticated = true și redirecționează către /. Altfel, returnează eroare 401 (Unauthorized) sau 400 (Bad Request). 
-Logout-ul resetează starea ​de autentificare+handleLogout():​ Setează isAuthenticated = false șredirecționează ​către login.html. 
-Controlul Dispozitivelor ​(Lumini și Ușă Garaj):+checkAuth():​ Funcție helper apelată de majoritatea handler-elor pentru a verifica autentificarea înainte de a permite accesul la resurse. 
 + 
 +Controlul Dispozitivelor:​
 Lumini: Lumini:
-Fiecare lumină este asociată cu un pin GPIO și o variabilă booleană ​de stare (ex: ledStateBedroom1)+Variabile ​de stare (ex: ledStateBedroom1) ​memorează starea fiecărei lumini
-Comutarea stării se face prin cereri HTTP GET către rute dedicate (ex: /​toggleBedroom1)+processToggleRequest(pin, stateVariable,​ ledName): Funcție centralizată pentru ​comutarea stării unui LED. Include ​logică de debounce ​(toggleDebounceDelay) pentru a preveni ​comutări multiple ​la cereri rapide. ​Actualizează pinul GPIO și variabila ​de stareTrimite noua stare ("​ON"​ sau "​OFF"​) ca răspuns
-O funcție generică ​processToggleRequest() ​centralizează logica de comutare și debounce pentru a preveni acționări multiple la apăsări rapide. +Handler-e ​specifice ​(ex: handleToggleBedroom1,​ handleStateBedroom1):​ Apelează processToggleRequest sau returnează starea curentă.
-Starea curentă poate fi interogată prin rute dedicate (ex: /​stateBedroom1). +
-Ușă Garaj: +
-Controlată de un servomotor (garageServo). Pozițiile "​închis"​ și "​deschis"​ sunt definite prin constante (SERVO_CLOSED_POS,​ SERVO_OPEN_POS). +
-Acționarea se face prin cereri HTTP POST (/​openGarageDoor,​ /​closeGarageDoor). +
-Include un mecanism de debounce (garageDoorDebounceDelay) ​pentru ​a preveni suprasolicitarea servomotorului. +
-La deschiderea ușii, lumina din garaj este aprinsă automat dacă era stinsă. +
-Starea ușii și a luminii din garaj este returnată în format JSON. +
-Citirea Senzorilor (DHT22): +
-Datele de temperatură și umiditate sunt citite la cerere printr-un endpoint HTTP GET (/​dhtdata). +
-Datele sunt returnate în format JSON. +
-Include ​gestionarea erorilor în cazul în care citirea de la senzor eșuează (returnează null pentru valori). +
-Servirea Fișierelor Statice: +
-Paginile HTML (index.html,​ login.html),​ fișierele CSS (style.css) și JavaScript (script.js) sunt stocate în sistemul ​de fișiere LittleFS. +
-Funcția readFile() este utilizată pentru a citi conținutul acestor fișiere și a le trimite clientului. +
-Debounce: +
-Implementat ​pentru a preveni ​acționări multiple ​și nedorite cauzate de cereri rapide. +
-toggleDebounceDelay pentru comutarea luminilor. +
-garageDoorDebounceDelay pentru acționarea ușii garajului. +
-Se bazează pe compararea timpului curent (millis()) cu timpul ultimei acționări. +
-Structuri de Date: +
-Variabile booleene simple pentru stările LED-urilor ​și ale ușii de garaj. +
-Obiecte StaticJsonDocument (din ArduinoJson) pentru construirea răspunsurilor JSON. +
-Array-uri de pini și pointeri la stări pentru inițializarea facilă a LED-urilor în setup(). +
-Surse și Funcții Implementate (Etapa 3): +
-Fișierul Principal (implicit .cpp): +
-Variabile Globale: Definirea pinilor, constantelor pentru servo, variabilelor de stare pentru LED-uri, ușa garajului, autentificare,​ instanțe pentru DHT, Servo, WebServer. +
-setup()+
-Inițializare comunicație serială. +
-Configurare pini LED ca OUTPUT și setare stare inițială+
-Inițializare și atașare servomotor la pinul specificat, setare poziție inițială (închis). +
-Inițializare senzor DHT. +
-Montare sistem de fișiere LittleFS. +
-Listare fișiere din LittleFS (pentru debugging). +
-Conectare la rețeaua Wi-Fi folosind credențialele din credentials.hpp. +
-Definirea handler-elor pentru rutele HTTP ale serverului web: +
-Login: /login.html (GET), /login (POST). +
-Logout: /logout (POST). +
-Pagina principală:​ / (GET). +
-Resurse statice: /style.css, /​script.js. +
-Control lumini: /​toggle<​RoomName>,​ /​state<​RoomName>​ pentru fiecare cameră. +
-Control ușă garaj: /​openGarageDoor (POST), /​closeGarageDoor (POST), /​garageDoorState (GET). +
-Date senzor: /dhtdata (GET). +
-Gestionare NotFound: server.onNotFound(). +
-Pornire server web. +
-loop(): +
-Apel continuu server.handleClient() pentru a procesa cererile HTTP primite, doar dacă ESP32 este conectat la Wi-Fi. +
-Funcții Utilitare:​ +
-readFile(fs::​FS &fs, const char * path): Citește și returnează conținutul unui fișier din sistemul de fișiere specificat. +
-checkAuth():​ Verifică dacă utilizatorul este autentificat. Returnează true dacă este autentificat,​ false altfel+
-Handler-e ​Web (Funcții de Gestiune a Rutelor): +
-Autentificare:​ handleLoginHTML(),​ handleLogin(),​ handleLogout(). +
-Interfață Principală:​ handleRoot(),​ handleCSS(),​ handleJS(). +
-Control Lumini: +
-processToggleRequest(int pin, bool &​stateVariable,​ const String& ledName): Logica centralizată pentru comutarea și debounce-ul luminilor. +
-handleToggleBedroom1(), handleStateBedroom1(), etc. (câte o pereche pentru fiecare lumină configurată): Apelează processToggleRequest sau returnează starea curentă+
-Control Ușă Garaj: handleOpenGarageDoor(),​ handleCloseGarageDoor(),​ handleGarageDoorState(). Implementează logica de acționare, debounce și returnare a stării în format JSON. +
-Senzor DHT: handleDHTData(). Citește datele de la senzor și le returnează în format JSON, cu gestionarea erorilor. +
-handleNotFound():​ Gestionează cererile către rute inexistente,​ redirecționând la login dacă se încearcă accesul la / fără autentificare.+
  
-</​note>​+Ușa Garajului:​ 
 +garageServo:​ Obiect Servo pentru controlul motorului. 
 +isGarageDoorOpen:​ Variabilă booleană pentru starea ușii. 
 +handleOpenGarageDoor(),​ handleCloseGarageDoor():​ Apelează garageServo.write() cu poziția corespunzătoare. Implementează debounce (garageDoorDebounceDelay). La deschidere, aprinde automat lumina din garaj dacă era stinsă. Returnează un obiect JSON cu doorStatus și garageLightStatus. handleGarageDoorState():​ Returnează starea curentă a ușii și a luminii din garaj în format JSON.
  
-===== Rezultate Obţinute =====+Citirea Senzorilor (handleDHTData()):​ 
 +Citește temperatura și umiditatea de la senzorul DHT22. 
 +Returnează datele într-un obiect JSON. Include gestionarea erorilor (returnează null pentru valori dacă citirea eșuează).
  
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+**Interfața Web (Frontend)**
  
-===== Concluzii =====+login.html:​ 
 +Un formular HTML simplu cu câmpuri pentru "​username"​ și "​password"​ și un buton de submit. 
 +La submit, trimite o cerere POST către /login pe serverul ESP32.
  
 +index.html (Pagina Principală):​
 +Structura: Definește layout-ul general al dashboard-ului.
 +Buton de Logout.
 +Legături: Include fișierul style.css pentru stilizare și script.js pentru funcționalitate.
 +
 +Identificatori:​ Elementele interactive și de afișare au ID-uri unice (ex: toggleBedroom1,​ stateBedroom1,​ garageDoorStatusText,​ temperatureValue) pentru a fi manipulate de JavaScript.
 +
 +style.css:
 +Definește aspectul vizual al paginii index.html.
 +Stilizează containerele principale, secțiunile,​ butoanele, textul.
 +Implementează stilurile pentru switch-urile customizate (slider-ul ON/OFF pentru lumini).
 +Utilizează Flexbox pentru aranjarea elementelor.
 +
 +script.js (Logica Client-Side):​
 +Inițializare (DOMContentLoaded):​ Așteaptă ca întregul DOM să fie încărcat înainte de a executa codul.
 +Referințe Elemente DOM: Obține referințe la elementele HTML relevante folosind document.getElementById().
 +
 +**Flow-ul aplicatiei**
 +
 +Autentificare:​
 +Utilizator accesează / -> Server ESP32 verifică isAuthenticated. Dacă e false, redirect la /​login.html.
 +Utilizator introduce credențiale în login.html și submit -> Browser trimite POST la /login cu datele.
 +Server ESP32 (handleLogin) validează. Dacă OK, isAuthenticated = true, redirect la /.
 +Browser încarcă /index.html și script.js.
 +
 +Comutare Lumină:
 +Utilizator apasă un switch în index.html.
 +script.js trimite GET la /​toggle<​LightName>​.
 +Server ESP32 (handleToggle<​LightName>​ -> processToggleRequest) comută LED-ul, actualizează starea internă, aplică debounce.
 +Server ESP32 răspunde cu noua stare ("​ON"​ / "​OFF"​).
 +script.js (updateSpecificLightUI) actualizează UI-ul.
 +
 +Deschidere Ușă Garaj:
 +Utilizator apasă "Open Door" în index.html.
 +script.js trimite POST la /​openGarageDoor.
 +Server ESP32 (handleOpenGarageDoor) mișcă servomotorul,​ aprinde lumina garajului (dacă e cazul), actualizează stările interne, aplică debounce.
 +Server ESP32 răspunde cu JSON { "​doorStatus":​ "​OPEN",​ "​garageLightStatus":​ "​ON/​OFF"​ }.
 +script.js (handleGarageDoorActionResponse) actualizează UI-ul.
 +
 +Afișare Date Senzor:
 +script.js (la încărcare și setInterval) trimite GET la /dhtdata.
 +Server ESP32 (handleDHTData) citește senzorul.
 +Server ESP32 răspunde cu JSON { "​temperature":​ T, "​humidity":​ H }.
 +script.js actualizează valorile în UI.
 +
 +**Concluzii și Puncte Cheie**
 +
 +Modularitate:​ Codul este împărțit logic în backend (ESP32) și frontend (HTML/​CSS/​JS). În cadrul backend-ului,​ funcțiile handler sunt dedicate pentru fiecare rută/​acțiune.
 +
 +Securitate: Implementează o autentificare simplă bazată pe username/​parolă pentru a proteja accesul la funcționalitățile de control. Credențialele sunt stocate extern în credentials.hpp.
 +
 +Interfață Utilizator: Oferă o interfață web intuitivă pentru control și monitorizare,​ cu actualizări dinamice fără reîncărcarea paginii.
 +
 +Debounce: Mecanismele de debounce previn acționări multiple nedorite și protejează componentele hardware.
 +
 +https://​github.com/​Vikyyz/​ProiectPM/​tree/​main
  
 ===== Jurnal ===== ===== Jurnal =====
Line 160: Line 207:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</a></html>+https://​hackaday.com/​2017/​01/​20/​cheating-at-5v-ws2812-control-to-use-a-3-3v-data-line/​ 
 + 
 +https://​www.amazon.com/​Development-Bluetooth-Microcontroller-ESP-WROOM-32-Consumption/​dp/B0BM5RNMZM
  
 +https://​daumemo.com/​lm317-voltage-regulator-calculator-voltage-source/​
pm/prj2025/fstancu/viky_andreea.ilie.1748408183.txt.gz · Last modified: 2025/05/28 07:56 by viky_andreea.ilie
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