Differences

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

Link to this comparison view

pm:prj2024:azamfir:cosmina.mihoreanu [2024/05/24 15:32]
cosmina.mihoreanu
pm:prj2024:azamfir:cosmina.mihoreanu [2024/05/27 15:44] (current)
cosmina.mihoreanu
Line 43: Line 43:
  
   * Display-ul este conectat la pinii corespunzători protocolului SPI, conform datasheet-ului plăcii (VSPI_MOSI și VSPI_CLK). ​   * Display-ul este conectat la pinii corespunzători protocolului SPI, conform datasheet-ului plăcii (VSPI_MOSI și VSPI_CLK). ​
 +
 +** Cablaj final **
 +
 +{{ :​pm:​prj2024:​azamfir:​cablaj_cm.jpeg?​700 |}}
  
 ===== Software Design ===== ===== Software Design =====
Line 74: Line 78:
  
 **Periferice** **Periferice**
-   * display: conectat prin SPI și acționat prin bibliotecile Adafruit pentru grafică; se configurează inițial culorile și orientarea, după care la fiecare piesa este re-randat întreg ecranul; +   * **display:** conectat prin SPI și acționat prin bibliotecile Adafruit pentru grafică; se configurează inițial culorile și orientarea, după care la fiecare piesa este re-randat întreg ecranul; 
-   * butoane: butoanele sunt setate pe modul INPUT_PULLUP,​ și li se atașează întreruperi care modifică în true flag-urile corespunzătoare,​ care vor fi verificate în main loop; este implementat și un debounce software, prin setarea unui timp minim de apăsare între apăsări succesive valide; +   * **butoane:** butoanele sunt setate pe modul INPUT_PULLUP,​ și li se atașează întreruperi care modifică în true flag-urile corespunzătoare,​ care vor fi verificate în main loop; este implementat și un debounce software, prin setarea unui timp minim de apăsare între apăsări succesive valide; 
-   * rotary encoder: pinii sunt configurați pentru INPUT, respectiv INPUT_PULLUP în cazul pinului de switch care expune funcționalitatea de push-button;​ se atașează o întrerupere pe pinul CLK, care se declanșează atunci cand encoderul este rotit, iar citirea digitală a pinului DT indică direcția de rotire, după care se modifică variabila globală **volume**.+   * **rotary encoder:** pinii sunt configurați pentru INPUT, respectiv INPUT_PULLUP în cazul pinului de switch care expune funcționalitatea de push-button;​ se atașează o întrerupere pe pinul CLK, care se declanșează atunci cand encoderul este rotit, iar citirea digitală a pinului DT indică direcția de rotire, după care se modifică variabila globală **volume**
 +   * **senzor sunet:** atunci câand este activat modul de auto-volume (prin buton), este citită cu o rezoluție de 12 biți valoarea pinul Analog Output a senzorului, si transformată într-o valoare a volumului; astfel, plaja de valori 960 - 1045 este mapată la intervalul 100 - 0 pentru volum; doar atunci cand se detectează variații de volum de minim 10 unități se trasnmite schimbarea către Spotify.
  
 **Timer** **Timer**
    * este folosit timer-ul 0 al plăcii ESP32, cu un interval de declanșare de 1 secundă, și o întrerupere care setează un flag verificar in main loop; astfel, la fiecare secundă este re-randat timestamp-ul în melodie și bara de progres, iar la fiecare 4 secunde se trimite o cerere la Spotify API la **/​me/​player** pentru reactualizarea datelor legate de player-ul curent.    * este folosit timer-ul 0 al plăcii ESP32, cu un interval de declanșare de 1 secundă, și o întrerupere care setează un flag verificar in main loop; astfel, la fiecare secundă este re-randat timestamp-ul în melodie și bara de progres, iar la fiecare 4 secunde se trimite o cerere la Spotify API la **/​me/​player** pentru reactualizarea datelor legate de player-ul curent.
 +
 +
 +Implementare completă disponibilă la:
 +
 +[[https://​github.com/​cos-mih/​spotify-remote-controller|GitHub Repo]]
  
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +
 +Rezultatul proiectului este un mini dispozitiv cât de cât util care poate comunica cu Spotify API și poate controla cu succes starea player-ului curent. Funcționalitatea este cea dorită, putând fi aduse, desigur, și alte îmbunătățiri ulterioare.
 +
 +Există unele limitări ale performanței și responsivității din cauza request-urilor către Spotify care pot lua destul de mult timp, comparativ cu interacțiunile directe cu dispozitivul.
 +
 +Un demo video al flow-ului de funcționare se găsește la adresa:
 +
 +[[https://​www.youtube.com/​watch?​v=7bttivGVqa8|Spotify Remote Controller Demo]]
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+A fost un proiect foarte instructiv, a fost nevoie să mă familiarizez cu multe noțiuni și tehnici practice noi, dar a fost distractiv all in all. Debugging-ul hardware destul de complicat, și autentificarea în mai mulți pași pe API-ul de la Spotify a pus destul de multe probleme care nu au putut fi rezolvate decât prin rute de redirectare și scripturi de JS injectate în pagini HTML.
  
 ===== Jurnal ===== ===== Jurnal =====
Line 95: Line 113:
   * 3 mai - completat documentație milestone 1 + comandat piese noi (butoane noi și rotary encoder)   * 3 mai - completat documentație milestone 1 + comandat piese noi (butoane noi și rotary encoder)
   * 11 mai - completat documentație milestone 2 (hardware) + cablaj inițial pe breadboard si expansion board   * 11 mai - completat documentație milestone 2 (hardware) + cablaj inițial pe breadboard si expansion board
 +  * 24 mai - completat documentație milestone 3 (software) + funcționare parțială
 +  * 26 mai - upload demo + rezultate + github
 +  * 27 mai - GitHub public după git rebase + push --force pentru a scoate client_secret (pentru Spotify API) din commit-uri vechi
 </​note>​ </​note>​
  
Line 100: Line 121:
  
 [[https://​www.electronicshub.org/​wp-content/​uploads/​2021/​02/​ESP32-Pinout-1.jpg|Pinout ESP32]] [[https://​www.electronicshub.org/​wp-content/​uploads/​2021/​02/​ESP32-Pinout-1.jpg|Pinout ESP32]]
 +
 +[[https://​www.epitran.it/​ebayDrive/​datasheet/​25.pdf|Rotary Encoder Datasheet]]
 +
 +[[https://​www.youtube.com/​watch?​v=ZFqVvDtgLLU|ST7789 Display Pinout and Tutorial]]
  
 [[https://​lastminuteengineers.com/​handling-esp32-gpio-interrupts-tutorial/#​google_vignette|ESP32 Button Intrerrupts Tutorial]] [[https://​lastminuteengineers.com/​handling-esp32-gpio-interrupts-tutorial/#​google_vignette|ESP32 Button Intrerrupts Tutorial]]
  
 [[https://​www.upesy.com/​blogs/​tutorials/​how-to-connect-wifi-acces-point-with-esp32|WiFi Connection Tutorial]] [[https://​www.upesy.com/​blogs/​tutorials/​how-to-connect-wifi-acces-point-with-esp32|WiFi Connection Tutorial]]
 +
 +[[https://​developer.spotify.com/​documentation/​web-api|Spotify Web API Documentation]]
  
  
pm/prj2024/azamfir/cosmina.mihoreanu.1716553936.txt.gz · Last modified: 2024/05/24 15:32 by cosmina.mihoreanu
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