Spotify Muziekspeler met Intuïtieve bediening

This post has 1,841 keer bekeken / views

Hoewel ik in veel gevallen een “early adaptor” ben heb ik pas een paar maanden geleden een aantal Amazon Echo’s in huis gehaald.
We gebruiken ze voornamelijk als fotolijst, kookwekker en om muziek af te spelen. Dat laatste gaat helaas niet altijd zonder problemen. Zolang je internationaal bekende artiesten wil afspelen met “Engels klinkende” namen zoals “Oscar Peterson”, “Joe Cocker”, “Diana Krall” of zelfs “Michel Petrucciani” begrijpt Alexa wat je wil. Problemen ontstaan pas als je Nederlandse artiesten of bands wilt horen zoals “De Dijk”, “Louis van Dijk” of “Ilse de Lange”. Alexa maakt daar van alles van, behalve wat je bedoelt. Je kunt de namen nog zo duidelijk of fonetisch uitspreken, het geeft zelden of nooit de gewenste muziek.

Daar moet natuurlijk iets op gevonden worden!

(this clip has no sound!)

Deze oplossing maakt gebruik van een RFID-reader boardje die de, op iedere kant van een kubus geplakte, NFC-tag leest. Door een kubus met de gewenste muziek naar je toe gericht op de houder (de Tray) te plaatsen zal de muziek die aan de NFC-tag gekoppeld is worden afgespeeld op de geselecteerde Amazon Echo (in mijn geval wordt de uitvoer via de jack-out van de Amazon Echo naar mijn QUAD 34/405-2 gestuurd).

Haal je de kubus uit de Tray dan stopt de muziek.

Naast de Tray zijn, aan de binnenkant van de kast, twee stukjes printplaat gelijmd die dienst doen als capacitieve schakelaars. Door je vingers eventjes rechts van de Tray op de kast te leggen (aantikken) wordt naar het volgende nummer in de playlist gesprongen. De blauwe led aan de rechterkant licht even op. Door hetzelfde aan de linkerkant van de Tray te doen wordt (je raadt het al) naar het vorige nummer gesprongen. Je krijgt hierover terugkoppeling doordat de blauwe led aan de linkerkant even oplicht.

Leg je je vingers langer op de kast aan de rechterkant, dan wordt het afspeel volume in stapjes verhoogd tot je je vingers weer van de kast haalt. Houd je je vingers langer aan de linkerkant dan wordt het afspeel volume in stapjes verlaagd.

Leg je tenslotte je vingers een paar seconden aan beide kanten van de Tray, dan wordt de zogenaamde “shuffle mode” getokkeld (van “shuffle” naar “sequentieel” en weer naar “shuffle”). Aan de oranje led kun je zien welke mode actief is (oranje ledje “aan” is shuffle mode, oranje ledje “uit” is sequentiële mode).

Het Idee

Daar kan ik kort over zijn. Ik heb het idee gestolen van Michael Teeuw voor de vorm en de bediening en van Michael Hawkins voor de integratie met de Spotify-API.

Michael Teeuw heeft met zijn MusicCubes project een werkelijk fantastisch mooie oplossing voor het selecteren van muziek ontworpen door zijn Sonos speakers aan te sturen met kubussen. In zijn ontwerp heeft iedere kubus zes plaatjes met soorten muziek of artiesten. Door de kubus zodanig in de voorste standaard te zetten dat het plaatje met de gewenste muziek boven ligt, wordt deze muziek over zijn Sonos installatie afgespeeld.

Michael Hawkins heeft een ontwerp gemaakt waarbij hij al zijn CD’s van een NFC-tag voorziet zodat deze vervolgens via een prachtige houten CD standaard, via Spotify, de muziek van die specifieke CD afspeelt.

Ik heb mijn CD verzameling al jaren geleden weg gegeven en ik zou er ook niet aan moeten denken om al deze CD’s van een NFC-tag te moeten voorzien om vervolgens een database op te bouwen om de juiste tag aan de juiste CD te koppelen.

Ik heb geen Sonos speakers maar luister vooral via mijn QUAD/BOSE installatie met Spotify naar muziek. De combinatie van beide projecten is dus ideaal voor de manier waarop ik graag naar muziek luister.

En zo is dit ESPotify-Echo project ontstaan (“ESP” omdat hij rond een ESP32 processor is ontworpen, “SPotify” omdat hij Spotify gebruikt om de muziek af te spelen en “Echo” omdat het afspelen uiteindelijk door een Amazon Echo wordt gedaan).

Beide Michael’s hebben voor hun project prachtige omhulsels van hout gemaakt om hun muziekspeler te herbergen. Ik ben niet erg handig met hout dus mijn versie is 3D geprint.

Op de ESPotify-Echo is plaats voor twee of drie extra kubussen (afhankelijk hoeveel kubussen je wilt gebruiken en hoe groot je 3D printer is) en één standaard (de Tray) voor de kubus die gebruikt wordt om een muzieksoort, artiest of CD af te spelen.

In bovenstaand plaatje bepaalt “de vóórkant” van de kubus die in de Tray staat welke playlist wordt afgespeeld.

De Hardware

Voor de hardware heb ik de volgende onderdelen gebruikt:

  • ESP32 Wrover B/E module
  • MFRC522 breakout board
  • MPR121 breakout board
  • Een aantal LEDjes in verschillende kleuren
  • Een berg NFC-tags (afhankelijk van hoeveel playlists je wilt gebruiken)
  • En natuurlijk een PCB om alle onderdelen te herbergen.

Dit is de eerste keer dat ik een ESP32 Wrover module gebruik in een project en het is werkelijk een fantastische module. De meest gebruikte ESP32’s zijn zogenaamde Wroom modules. Deze hebben twee cores (240MHz) en 4, 6 of 8 MB Flash geheugen voor de firmware en eventueel een bestand systeem (LittleFS) van 1.5MB. Best wel behoorlijke specificaties.
Maar de ESP32-Wrover modules hebben daarnaast ook nog eens 4 of 8 MB PSRAM. Zeker als je met JSON files of grote array’s en structuren wil werken is het heerlijk om (bijna) onbeperkt grote (JSON) structuren en array’s in het PSRAM geheugen te kunnen opslaan!

De Software

Deze bestaat uit 16 bestanden (”tab-bladen” in de Arduino-IDE)

  • ESPotifyEcho.ino:
    Dit is het hoofdprogramma waarin wordt vastgelegd welke bibliotheken gebruikt worden en welke lokale tab-bladen ge-#include moeten worden
  • Debug.h:
    Macro’s met debug informatie om uitvoer en invoer via de Serial Monitor en telnet te laten lopen
  • MFRC522stuff.ino:
    Functies voor het lezen van de NFC-tags
  • Parsers.ino:
    Functies die uitvoer van de SpotifyClient ontleden en verwerken
  • spotifyClient.h en spotifyClient.cpp:
    class om met de Spotify-API te communiceren
  • checkPsram.h:
    Class om gebruik PSRAM geheugen te monitoren (is niet echt nodig maar is handig bij het debuggen)
  • fileStuff.ino:
    Functies om bestanden van- en naar het LittleFS te lezen en te schrijven
  • helperStuff.ino:
    Functies die het leven van de ESPotify-Echo makkelijker maken
  • jsonPSram.h:
    Struct om PSram geheugen te alloceren en te de-alloceren voor ArduinoJson
  • littleFSmanager.ino:
    Functies om het LittleFS via de browser te kunnen benaderen
  • menuStuff.ino:
    Character based menu functies om ESPotify-Echo via de Serial Monitor of telnet te kunnen bedienen
  • mpr121Stuff.ino:
    Functies om het mpr121 breakout board te kunnen gebruiken
  • qsortStuff.ino:
    Sorteer functies om de playlists en device-lists te sorteren
  • timers.h:
    Macro’s om timers te definiëren en uit te lezen
  • webSocketsEvent.ino:
    Functies om de GUI te kunnen bedienen

Je kunt de firmware hier op github vinden.

In de “setup()” functie worden verschillende initiële handelingen verricht. Belangrijk zijn de statements waarmee geheugen in het PSRAM worden geclaimd voor de diverse tabellen en structuren. Vervolgens wordt het LittleFS geïnitieerd en worden twee belangrijke bestanden ingelezen: de setting gegevens (WiFi- en Spotify-credentials) en de gegevens en status van het default device (Amazon echo). Met de WiFi credentials uit het setting bestand wordt vervolgens verbinding gemaakt met het opgegeven WiFi Access Point.

WiFi Credentials via Access Point


Bij de eerste keer opstarten heb je de WiFi credentials nog niet in kunnen vullen en daarom start ESPotify-Echo in dat geval een zgn. “open Access Point” op met de naam “ESPotify”.

Maak hier verbinding mee en geef jouw WiFi credentials op. Hierna zal de ESPotify-Echo opnieuw opstarten en verbinding maken met je WiFi netwerk.

Vervolgens wordt de spotify class geïnitieerd met gegevens uit het setting bestand.
Hoe je aan deze Spotify credentials komt wordt verderop in deze post uitgelegd.

Tenslotte worden het capacitieve-sensor board, het RFID-reader board en de webserver geïnitieerd.

Als je mij wil helpen om meer van dit soort posts te kunnen schrijven, overweeg dan om een kleine donatie te geven door op de knop hieronder te klikken.

Muziek Kubussen

Micheal Teeuw heeft zijn ontwerp gebaseerd op deze 5x5cm foto kubussen van Deknudt.

Helaas zijn deze uit productie en worden alleen nog de kubussen van 6x6cm verkocht … maar dáár kwam ik pas achter toen ik mijn 3D ontwerp al gemaakt en geprint had. Ik heb wel op internet deze kubussen gevonden maar ze zijn niet zo mooi als de foto kubussen van Deknudt én ze zijn niet vierkant (er zit een verloop in van 2mm tussen de bovenkant en de onderkant). Helaas, ik moet het er maar mee doen (alternatief zouden de 6x6cm kubussen van Deknudt zijn, maar dan wordt de ESPotify-Echo groter).

Om de plaatjes netjes tegen de binnenkant van de kubus aan te drukken en om een stevig oppervlak voor de NFC-tags te krijgen moet je in de kubus een 3D geprinte kubus plaatsen waar je de NFC-tags op plakt.

Vervolgens print je de inlay met je muziek keuzes en vouw je deze om de 3D geprinte binnen kubus die je vervolgens in de plexiglas kubus plaatst (bij de alternatieve kubussen moet je eerst het deksel los halen voordat je de binnen kubus met inlay plaatst).

Nu moeten we de NFC-tags op de kubus verbinden met playlists in je Spotify account.

Ga met je browser naar “http://ESPotifyEcho.local” (of ga naar het IP-adres van ESPotify-Echo: “http://{ip-adres}/”).

Klik rechts boven op [Playlists]

Deze pagina bestaat uit twee delen. Boven is een drop-down lijst met playlists die nog niet aan een NFC-tag zijn gekoppeld, onderin een drop-down lijst met playlists die al wel aan een NFC-tag zijn gekoppeld.

Selecteer uit de bovenste drop-down lijst een playlist die je aan een plaatje op de kubus wilt koppelen. Plaats nu je muziek kubus met het plaatje van deze muziek in de houder en klik op [Read NFCtag]. Even later verschijnt het NFCtag ID van het plaatje in het scherm. Klik nu op [Link NFCtag].

Deze playlist verdwijnt uit de bovenste drop-down lijst en wordt zichtbaar in de onderste drop-down lijst.

Verbind alle zes de vlakken van een kubus met een playlist en klik op [Save].
Klik rechtsboven in het scherm op de [terug-pijltje] knop om weer in het hoofdscherm te komen.

Mocht je erachter komen dat je een verkeerde playlist aan een plaatje hebt gekoppeld, dan kun de deze playlist in de onderste drop-down lijst selecteren en op [unLink] klikken.

Printplaat

Voor de electronica heb ik een printplaat ontworpen waar alle onderdelen op gesoldeerd moeten worden.

De 3D kast

Deze bestaat uit een aantal onderdelen die allemaal los van elkaar geprint moeten worden en daarna aan elkaar moeten worden gelijmd.

Bij het ontwerpen van de kast heb ik gebruik gemaakt van de YAPPgenerator library.

Zoals eerder geschreven kun je de kast met twee of drie plekken voor “extra” kubussen maken plus de kubus die uitgelezen wordt en vóór in de speciale standaard (de Tray) is geplaatst.

De kast bestaat uit een bovenkant (lid) en een onderkant (base). In het lid moeten zes M2.5 inserts worden geplaatst.

M2.5 Insert aanbrengen

Twee zijn er voor de bevestiging van het PCB, de andere vier voor het vastzetten van de base aan het lid. Alle overige onderdelen van ESPotify-Echo worden met lijm aan het lid bevestigd.

De standaard (“Tray”) bestaat uit het middenstuk en twee zijkanten.

Deze moeten aan elkaar worden gelijmd (secondelijm is prima geschikt). In de achterwand van de tray is ruimte om de RFID-reader in te schuiven.

åIk heb de RFID-reader gefixeerd met een stukje schuimfolie (1 à 2mm dik). Het geheel moet in het deksel van de kast worden gelijmd.

Daarna moeten de bodemplaatjes voor de extra kubussen aan het lid worden gelijmd.

Het resultaat ziet er dan zo uit:

Het PCB moet met de middelste twee schroeven aan het lid worden vastgeschroefd.

Tenslotte moeten de capacitieve platen en de verschillende LED’s aan het lid worden gelijmd.

Spotify gegevens opvragen

ESPotify-Echo maakt gebruik van de Spotify-API en om daar toegang toe te krijgen heb je drie belangrijke gegevens nodig waarvan je er twee via het Developers Dashboard van Spotify kunt verkrijgen (clientId en clientSecret) door in te loggen met je Spotify account gegevens (gebruikersnaam en wachtwoord) en een applicatie aan te maken.

Log in als je al een account hebt, maak anders eerst een account aan.

Klik op [CREATE AN APP] en vul een “Application name” en een “Application description” voor deze “app” in (het maakt niet uit wat je invult. Bedenk iets leuks).

Het belangrijkste wat je moet invullen is de “Redirect URL’s“. Hier moet je dit:

https://getyourspotifyrefreshtoken.herokuapp.com/callback

invullen. Klik op [ADD].

Sla deze gegevens ergens op want je hebt ze nodig om de ESPotify-Echo aan jouw Spotify account te kunnen koppelen.

Het derde gegeven (refreshToken) moet je via een omweg bemachtigen door, na het aanmaken van je applicatie het clientId en het clientSecret op deze site in te voeren. Vink “Select all” aan en klik op [Submit]. Onderin het scherm verschijnt nu jouw refreshToken. Vergeet ook niet het refreshToken ergens op te slaan.

Deze gegevens moet je vervolgens in de ESPotify-Echo GUI invoeren bij [Settings].

Klik nu op [Save] en vervolgens op [reStart].

Printplaat Rev 1.0 (18-08-2022)

Helaas zijn bij deze versie van het ontwerpen een paar dingen fout gegaan.

  1. Er is geen ruimte op het PCB voor de LED-weerstanden. Deze moeten daarom op de LED-strips gesoldeerd worden.
  2. Ik had het data-sheet van de CH340C niet goed gelezen.
    Zoals de PCB nu is zijn de TX- en RX-lijnen van de CH340C 5 volt terwijl deze lijnen van de ESP32 natuurlijk 3v3 zijn. Dit is waarschijnlijk geen probleem omdat de CH340C een maximale stroom van 3mA levert. Daar kan de ESP32 wel tegen. Vind je dit toch bezwaarlijk dan moet je een print spoortje onderbreken (rood omcirkeld op onderstaande afbeelding) tussen de 5 Volt voedingslijn en pin 16 van de CH340C en deze pin 16 vervolgens verbinden met de 3v3 voedingslijn (onderkant R6).
  3. De oriëntatie van het MPR121 board is niet goed. Deze moet daarom “op zijn kop” (dus met de onderdelen aan de onderkant) op de PCB gesoldeerd worden. Je kunt vervolgens de firmware aanpassen (de #define _CAP_SW_DOWN en _CAP_SW_UP) zodat niet switch 0 en 1 gebruikt worden maar switch 10 en 11 óf je kunt, zoals ik in onderstaande afbeelding heb gedaan, geen pin header voor de twee meest rechtse switches solderen en een draadje leggen tussen de twee meest linkse switches.
This entry was posted in 3D printing, ESP32, Hardware, KiCAD, WiFi and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

The maximum upload file size: 4 MB. You can upload: image, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here

This site uses Akismet to reduce spam. Learn how your comment data is processed.