This shows you the differences between two versions of the page.
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]] | ||