Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:alexandru.nehoianu [2026/05/23 16:45]
alexandru.nehoianu
pm:prj2026:ciprian.popescu0411:alexandru.nehoianu [2026/05/23 19:28] (current)
alexandru.nehoianu
Line 89: Line 89:
   * citirea datelor de la senzorul de lumină   * citirea datelor de la senzorul de lumină
  
-<note tip> +În realizarea proiectului am folosit **PlatformIO** și framework-ul **Arduino**. Am ales PlatformIO, deoarece este foarte ușor să adaugi biblioteci externe și, în plus, am lucrat cu el și la laborator. În ceea ce privește framework-ul,​ a fost o decizie destul de grea. Inițial am vrut să lucrez cu framework-ul ESP-IDF, dar mi-am dat seama că va fi prea complicat și că mă voi încurca în detalii în loc să implementez funcționalitățile propriu-zise. În schimb, framework-ul Arduino mi-a dat libertatea să vin cu mai multe idei și să implementez funcționalități mai complexe (precum WiFi sau Bluetooth) care să evidențieze potențialul proiectului. 
-Descrierea codului aplicaţiei ​(firmware): + 
-  * mediu de dezvoltare ​(if any) (e.g. AVR StudioCodeVisionAVR+La implementarea proiectului am folosit mai multe biblioteci externe. O parte din ele sunt complet necesare ​(precum NimBLE sau WiFi), dar pe altele le-am folosit pentru ușurință
-  * librării şi surse 3rd-party (e.gProcyon AVRlib) +  * Arduino.h - Debugging ​(prin Serialși setarea modului pinilor ​(Input/​Output) 
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +  * TFT_eSPI - Realizarea interfeței graficeAm ales această bibliotecădeoarece este foarte ușor de configurat și ocupă puțin spațiu (am încercat și cu LVGL, dar nu aveam spațiu
-  * (etapa 3surse şi funcţii implementate+  * SPI.h - Este folosită de TFT_eSPI pentru gestionarea comunicării prin SPI cu display-ul 
 +  * NimBLEDevice - Realizarea conexiunii BluetoothAm ales să folosesc NimBLE, deoarece este compatibil cu dispozitive Apple 
 +  * time.h - Conversia de la UNIX Timestamp la un format human-readable pentru afișare 
 +  * DHT.h - Citirea datelor de la senzorul de temperatură/​umiditate. Senzorul ​pe care l-am ales (DHT22) trimite datele sub formă de semnal digital șfolosește un protol special, motiv pentru care am decis că e mai ușor să folosesc o bibliotecă 
 +  * Wire.h - Configurare protocolului I2C pentru senzorul de lumină 
 +  * BH1750.h - Citirea datelor de la senzorul de lumină 
 +  * ezBuzzer.h - Acționarea buzzer-ului. Folosesc această bibliotecă,​ deoarece permite rularea asincronă a buzzer-ului ​(fară funcții de delay care să deconecteze Bluetooth-ul) 
 +  * WiFi.h - Realizarea conexiunii WiFi 
 +  * HTTPClient.h - Crearea ștrimiterea cererilor HTTP 
 + 
 +Elementul de noutate al proiectului constă în posibiliățile pe care le oferă. Fiind conectat la WiFi și la Bluetooth înseamnă că poți obține orice fel de informații,​ iar cu ajutorul bilbiotecii TFT_eSPI îți poți crea ușor propria interfață. 
 + 
 +Scheletul codului: 
 +^ Funcție ^ Rol ^ 
 +| batteryStatusCallback | Actualizează variabila //​batteryStatus//​ cu noul nivel al bateriei de la telefon | 
 +| subscribeToBatteryService | Subscribe la serviciul de Bluetooth pentru baterie. Se primesc notificări când se modifică nivelul bateriei și sunt gestionate de funcția batteryStatusCallback | 
 +| amsCallBack | Actualizează informațiile despre melodia redată pe telefon (titlu, artist, durată, stare etc.). Pentru a determina tipul informației primite, am urmărit specificațiile din documentația AMS | 
 +| subscribeToAMS | Subscribe la Apple Media Service | 
 +| printTime | Afișează (pe Serial) data curentă | 
 +| getCurrentTime | Sincronizează ceasul microcontroller-ului cu ceasul de la telefon (prin Bluetooth) | 
 +| printTrack | Afișează informații (pe Serial) despre melodia redată | 
 +| sensorCallback | Citește valorile senzorilor și modifică modul de afișare (Dark Mode / Light Mode) dacă este nevoie. Funcția este un task FreeRTOS care se apelează automat la 2 secunde| 
 +| reminderCallback | Verifică lista cu remindere și semnalează pornirea alarmei. Funcția este un task FreeRTOS care se apelează automat la o secundă | 
 +| httpGETRequest | Creează și trimite cererea HTTP la serverul REST. Întoarce răspunsul de la server | 
 +| WiFiStationDisconnected | Încearcă reconectarea la WiFi | 
 +| parseReminderList | Se parsează răspunsul primit de la server și se actulizează lista cu remindere. Răspunsul conține titlul și timpul reminder-ului | 
 +| drawCustomCentredString | Afișează un text centrat la coordonatele date | 
 +| drawDividers | Desenează liniile orizontale care delimitează secțiunile interfeței grafice | 
 +| updateHeaderView | Afișează pe ecran timpul și informațiile de la senzori | 
 +| updateDateBarView | Afișează pe ecran data curentă | 
 +| drawRemindersList | Desenează pe ecran lista cu remindere | 
 +| updateMediaScrubber | Afișează pe ecran titlul melodiei redate pe telefon și desenează o bară care se actualizează cu progresul melodiei| 
 +| setup | Se inițializează senzorii, display-ul și conexiunea la WiFi și Bluetooth | 
 +| loop | Se actulizează interfața grafică, se acționează buzzer-ul și se fac periodic cereri la serverul HTTP | 
 + 
 +<​note>​ 
 +Videoclip demo: https://​youtube.com/​shorts/​l6caujJPsVg
 </​note>​ </​note>​
  
-===== Rezultate Obţinute =====+Optimizările pe care le-am realizat sunt legate de Bluetooth. Prima optimizare a fost alegerea BLE (Bluetooth Low Energy) în loc de Bluetooth obișnuit. BLE consumă mult mai puțină energie (pe microcontroller,​ dar și pe telefon) și oferă toate serviciile de care am nevoie. A doua optimizare constă în folosirea funcției de //​subscribe//​ la un serviciu Bluetooth. Folosind subscribe, primesc notificări doar atunci când se modifică datele (de exemplu se schimbă melodia) și nu trebuie să fac polling constant. De asemenea, în cadrul funcțiilor de callback (funcții care se apelează automat când primesc o notificare Bluetooth) am evitat instrucțiunile complexe și doar am setat anumite flag-uri, pe care le-am tratat ulterior în loop.
  
-<​note ​tip+<​note>​ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+Link Github: https://​github.com/​neho2245/​proiect_pm
 </​note>​ </​note>​
 +
  
 ===== Concluzii ===== ===== Concluzii =====
Line 111: Line 148:
  
 Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**.
-</​note>​ 
- 
-===== Jurnal ===== 
- 
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
 </​note>​ </​note>​
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +Resurse: 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  https://​developer.apple.com/​library/​archive/​documentation/​CoreBluetooth/​Reference/​AppleMediaService_Reference/​Introduction/​Introduction.html 
-</note>+  ​https://​www.bluetooth.com/​wp-content/​uploads/​Files/​Specification/​HTML/​Assigned_Numbers/​out/​en/​Assigned_Numbers.pdf 
 +  ​https://​github.com/​Bodmer/​TFT_eSPI 
 +  ​https://​github.com/​h2zero/​NimBLE-Arduino 
 +  * https://​esp32.com/​viewtopic.php?​t=9875
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
  
pm/prj2026/ciprian.popescu0411/alexandru.nehoianu.1779543942.txt.gz · Last modified: 2026/05/23 16:45 by alexandru.nehoianu
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