This is an old revision of the document!
Spotify Remote Controller
Introducere
Autor: Cosmina Mihoreanu
Grupă: 334CB
În proiectul de față îmi propun implementarea unui controller remote pentru player-ul de muzică de pe Spotify. Dispozitivul se va conecta la internet și va comunica cu Spotify pentru a controla diverse aspecte ale player-ului curent. Controlul se va face printr-o suită de butoane, din care se va putea pune pauză piesei curente, se va putea da play în continuare, skip forward sau backward în playlistul curent, seta starea de shuffle și controla volumul. Se va putea alege și un mod de funcționare în care volumul este ajustat automat în funcție de zgomotul din jur.
Scopul principal al proiectului este de a ușura interacțiunea cu Spotify, reducând-o la câteva butoane cu cele mai importante funcții. Astfel, nu mai este nevoie să accesezi dispozitivul pe care asculți muzică de fiecare dată când vrei să controlezi starea player-ului curent. Ideea provine tocmai din dorința de a avea o astfel de soluție de control centralizată pentru uzul personal, pentru a elimina pe cât posibil nevoia de a tot naviga continuu între ceea ce lucrez și player-ul de muzică. Din aceleași motive consider că proiectul ar fi util pentru persoanele care sunt obișnuite să asculte des muzică în timp ce se ocupă și de alte activități.
Descriere generală
Proiectul va cuprinde modulele reprezentate, la modul general, în schema bloc de mai jos.
Piesa centrală a sistemului este placa de dezvoltare ESP32. Prin pinii GPIO placa va primi input de la o suită de butoane care sunt acționate de utilizator pentru controlul dispozitivului. Acțiunile disponibile vor fi cele de bază pentru controlul unui player de muzică: on/off, pauză, play, skip înainte și înapoi, modificare status shuffle, ajustare volum și activare a modului de ajustare automată a volumului pe baza inputului analog primit de la un senzor de sunet cu microfon, conectat la ESP32.
Placa va comunica prin protocolul SPI cu un ecran LCD spre care va trimite date despre starea curentă a player-ului: vor fi afișate titlul și numele artistului, precum și timpul de redare la care s-a ajuns în orice moment.
Pentru toate informațiile și funcționalitățile implementate pe placă, aceasta se va conecta la o rețea Wi-Fi disponibilă și se va autentifica și comunica prin request-uri HTTP cu API-ul Spotify. Muzica disponibilă este, desigur, cea asociată user-ului pentru care se face autentificarea.
Hardware Design
Piese utilizate:
placă ESP32-WROOM-32D
display LCD TFT ST7789
senzor sunet KY-037
rotary encoder KY-040
5 push buttons
1 buton rotary encoder
Schemă electrică:
Constrângeri cablaj
Pinul de input de la senzorul de sunet este tras la pinul GPIO36 al plăcii, deoarece este nevoie de un pin de tip ADC_1. Pinii de ADC_2 pun probleme de funcționare în cazul activării funcției de WiFI pe ESP32, esențială pentru acest proiect.
Butoanele sunt conectate la placă la pinii GPIO33, 32, 25, 26, 27, aceștia fiind pini pe care există rezistențe interne de pull-up. Pinii 36, 39, 34, 35 nu au legate astfel de rezistențe.
Software Design
WiFI
configurarea WiFi-ului este una manuală: este pornit dispozitivul in mod de Access Point, și se pornește pe el un server cu o rută care întoarce o pagină simplă cu un form de login, unde pot fi introduse datele rețelei dorite. Datele introduse sunt extrase de server și salvate în variabilele globale ssid și pasword;
se trece dispozitivul în modul Station și se conectează la rețeaua dată, după care se oprește serverul; toate funcțiile de inițializare și configurare se găsesc in WiFi.h;
adresele IP și instrucțiunile de accesare sunt afișate pe ecran.
Spotify API
-
se deschide un nou server pe un port diferit (același port poate provoca bind errors în unele cazuri), cu o rută care redirecționează către link-ul de autentificare de la Spotify;
după verificarea identității, Spotify Web
API răspunde prin redirecționarea către un
URL dat de program prin
redirectURI, și care trebuie să fie înregistrat în Dashboard-ul personal de pe Spotify for Developers; redirecționarea include un fragment denotat de
# care conține access token-ul, care va fi extras de un script din pagina întoarsă de ruta de pe server setată pentru această redirectare;
adresele IP și instrucțiunile de accesare sunt afișate pe ecran;
următoarele interacțiuni cu
API-ul se fac prin cereri la
/me/player pentru informații legate de piesa curentă,
/me/player/previous și
/me/player/next pentru schimbarea piesei,
/me/player/shuffle pentru toggle-ul stării de shuffle,
/me/player/pause și
/me/player/play pentru start-stop,
/me/player/volume to set the volume.
Periferice
Timer
Rezultate Obţinute
Concluzii
Download
Jurnal
29 aprilie - creat pagină proiect
1 mai - primit piese (ecran, senzor, placă, expansion board)
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
Bibliografie/Resurse