Table of Contents

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:

Schemă electrică:

Constrângeri cablaj

Cablaj final

Software Design

WiFI

Spotify API

Periferice

Timer

Implementare completă disponibilă la:

GitHub Repo

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:

Spotify Remote Controller Demo

Concluzii

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

  • 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
  • 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

Bibliografie/Resurse

Pinout ESP32

Rotary Encoder Datasheet

ST7789 Display Pinout and Tutorial

ESP32 Button Intrerrupts Tutorial

WiFi Connection Tutorial

Spotify Web API Documentation

Export to PDF