
When Spotify pulled the plug on their Car Thing, one maker didn’t just accept the loss—he built something better. Under the handle Electric-Diversions, this creator took our ESP32 Spotify Remote and transformed it into a feature-rich, portable controller using the Color Kit Grande. From cover art caching to multitasking cores, his build is both clever and polished. Naturally, we had to find out more…
Curious what the upgraded Spotify Remote looks like in real use? Watch the video below to see how Electric-Diversions’ custom build brings album art, playback controls, and real-time info to life on the Color Kit Grande. Smooth UI, snappy touch response, and thoughtful design choices—this remote doesn’t just work, it works beautifully.
Background & Motivation
What inspired you to build a Spotify remote using the Color Kit Grande?
Spotify’s decision to discontinue support for their Car Thing product. As of December 2024, the device stopped being operational. I was using it as a desktop companion to view song information, cover art, and control functions. While these things are available within the Spotify app, it is nice having a separate display that doesn’t take up screen real estate or need to be opened or take focus. Plus, in my case, I have multiple devices hooked to my monitor and managing devices to control Spotify playback was a pain.
Shortly after the announcement, I started looking for possible options. I came across an article reviewing the Color Kit Grande and it seemed like a good fit for the project. There are other community efforts to bring the Car Thing back to life; however, they weren’t a good fit for me. The Car Thing hardware is limited and the efforts I saw all required companion desktop software. Beyond my desktop situation, I also have speakers throughout my living space that I directly stream Spotify to using voice control without a display. The Color Kit Grande is portable and can run off a rechargeable battery. Given that, I actually built a second device to use throughout my space to show what is currently playing and to control playback.
Why did you choose to share your work publicly under the name Electric-Diversions?
The name was picked somewhat whimsically. I was already a couple of projects deep when I started building my first Color Kit Grande. I ended up creating a user account for ThingPulse’s support forums and needed a name. I hadn’t really planned to write a Spotify controller and since this started out more as a hardware build and the project was a diversion from the other work I was doing, I went with Electric Diversions. For the GitHub contribution, I decided to continue using that handle.
Project Journey
Can you walk us through the main features of your Spotify Remote Controller?
Sure, I’ll break it down into two parts: general usage and extending it.
As far as general usage, the Home view shows cover art, playback controls, the playing track title, album, and artists. It also includes a progress indicator, the playback time, total song length, and current time. There is also a visual indicator showing network traffic and when album art is being loaded.
Beyond the home view, there are a few more views available out of the box. To see just the cover art in more detail, tap the image and the view will switch to just showing the artwork. This is nice when you already know the songs and want to just see the art. There is also a clock view that shows all the play information but features a large date / time display. To get to the clock view, tap the time from the home view. There is also a pretty cryptic diagnostic view that can be seen by tapping the network indicator. For the views that do not display playback controls, you can tap the top-left corner for the previous track, tap the top-center to pause/play, and tap the top-right for the next track.
Most of the software development time on the project was spent optimizing the speed and extensibility of the project. To maximize responsiveness, the user interface runs on one core and the background Spotify calls happen on the other. It also prioritizes touch events over background updates to minimize delays. To further improve the speed, the project maintains a persistent cache of downloaded images. This means that if you are playing an album, tap previous, or are using a smaller playlist, album art is only downloaded once. The file system has some delay but overall cached art loads twice as fast as downloaded art. Finally, the display only updates what is needed reducing flicker and improving refresh times.
Concerning extensibility, the project includes a simple custom view framework that makes adding, modifying, and deleting views very quick and simple. Views can be created and changed without needing to understand the rest of the project.
What was the most challenging part of the development process?
Hmmm. It was probably the beginning and getting traction. While I do have some soldering experience, my background is in software development and I still make basic mistakes in my electronics work. The first kit I received did not initially work for me. I went back and re-soldered and it came to life and I was able to easily run the Weather App on it; however, when I attached the LCD to the board using the 3M double sided tape it stopped working. I’m not sure what that was, but suspect I grounded the pins to the back of the LCD casing. I tried separating the display, but accidentally cut the display ribbon (they really are fragile!). I ordered a new one and I think I initially had trouble getting it to work. Emboldened that I had the whole thing initially working, I then ordered a second unit telling myself I actually had that second home speaker use case. Finally, I got the new unit working. This gave me the confidence to go back to the first troubled unit and with more care soldering and attaching the ribbon I was able to get that unit running also. The kits were fine. Most likely rookie mistakes.
Once I had the hardware worked out, I turned my sights to the Spotify controller and hoped that would be as easy as the Weather App was; however, it wasn’t meant to be. The project built but I wasn’t able to get it to authenticate. I probably missed this somewhere, but I didn’t realize that I was supposed to open tp-spotify.local on a different device (like a computer) and drive the flow there. I was thinking that defining tp-spotify.local was only local to my device (similar to adding an entry in a host file). This issue actually brought me to a full stop and I put down the project until just before Spotify stopped supporting the Car Thing. The break was good for me though and with fresh eyes I realized how the flow was supposed to work. After that, the certificate in the code was out of date. I refreshed the project’s dependencies and finally, almost five months after I purchased the first kit, was authenticating to Spotify. The next thing I didn’t realize was that the original ESP32 GitHub project stopped there . That project is based on what looks like a fully working esp8266 project. This meant that the project did the initialization and then stopped at a progress bar at 100%. I was new to everything so it took me a little bit to realize that was the end of the road as far as the GitHub project went. After I realized that though things were steady and mostly painless. Between the Spotify Car Thing not working and finally getting data back from Spotify I was heavily motivated to make progress. And in fact, I had a crude working prototype going just ahead of the Car Thing being bricked.
Were there any surprising or unexpected discoveries while working with the ESP32 and the Color Kit Grande?
It is hard to say, because I was on a journey and this was my first ESP32 project. I certainly learned a lot. I didn’t know what I didn’t know in the beginning so many of my surprising and unexpected discoveries were basic things like the Arduino libraries being able to run on top of the ESP-IDF framework, needing to create a custom partition table to access all 8MB of flash memory, and getting a feel for the hardware performance.
Technical Details
How did you handle Spotify authentication, and what were the biggest hurdles?
The original sample code was a big help. While I added and changed a lot in the original project, I largely left the authentication code untouched. I knew going into the build that ThingPulse had spent a bit of effort getting OAuth to work on the ESP8266. I was happy to find out that was available for the ESP32 Color Kit Grande and worked as-is.
What made the Color Kit Grande the right platform choice for this project?
There are many things. For the price point, the hardware provides a lot of value. The ePulse Feather ESP32 development board supports battery charging, has plenty of memory, and is more than fast enough to support this use case. The screen is a 3.5″ 320×480 display with a calibrated capacitive touch interface. This provides plenty of room to display song information and design the UI. It is very convenient using the touch interface and not needing to rely on physical buttons. The ability to pick up a printed case and rechargeable battery provides a nice finish and maximum portability. The fact that all of this has already been designed and tested together makes getting up and running a lot easier than if that all had to be done from scratch.
Beyond the hardware, the Color Kit Grande has a foundation of software available that has already been vetted and lets one get running relatively quickly. It was very helpful having working code that interacted with the TFT ILI9488 display and FT6236 capacitive touch interface. Similarly, the starting sample code to connect to a WiFi network, authenticate with Spotify, and leverage the spotify-api-arduino library saved a lot of time.
Did you integrate any third-party libraries or services that made your life easier?
I did not bring in any additional libraries outside of what the sample code used: TFT_eSPI, TJpg_Decoder, ArduinoJson, OpenFontRender, and spotify-api-arduino. While I did switch to current versions, the libraries did everything I needed without needing to bring in anything else. I did leverage several ESP-IDF capabilities, but these were already available through the ESP-IDF integration.
Were there any design considerations for UI/UX on the display that you think other makers should keep in mind?
The LCD isn’t the fastest to update. The ILI9488 display controller isn’t super fast and enabling the Direct Memory Access (DMA) wasn’t practical due to system limitations. Given this, it is still possible to develop responsive experiences. Minimizing screen redraws and being deliberate in what is updated helps. Driving the UI in its own task and keeping background work on a different thread of execution makes a difference. There are also some RGB color coding challenges mapping between various formats that should be taken into consideration.
Advice & Reflection
What advice would you give to someone wanting to create their own smart remote or IoT controller using a ThingPulse kit?
Use the resources available to you. Search the support forums, take the time to create an account and ask questions as needed. The big one is just stick with it and follow through. You may encounter obstacles or challenges. These are learning opportunities. Make sure you have access to the technical documentation on the hardware you are using and understand the libraries being leveraged. If you really get stuck, don’t be afraid to put it down for a little bit and come back to it with fresh eyes.
If you could redo the project, what would you approach differently?
I might explore working directly with ESP-IDF instead of going through the Arduino-ESP32 core. This was my first ESP32 project and I was pretty deep into it before I understood the underlying architecture. I suspect the project would perform even faster and be more responsive if I had directly used the ESP-IDF framework; however, I don’t know how difficult it would have been to replicate all the functionality I got for free using the existing libraries. There is a good chance it would have still ended up where it did today. Getting a clean and working Spotify controller was the goal and doing even more from scratch to get a nominal speed boost probably isn’t worth it. But maybe if this wasn’t a side project, I would feel different. I do think the hardware is capable of more than I was able to get out of it. Regardless, this implementation is optimized and works well as is.
Are there features or improvements you’re planning to add in the future?
I think it would be really nice to fetch the release year of albums and may add that at some point. This is really a side project so I am not sure how much additional time I will spend on it. Some items I would love to see get added include a more intuitive user experience when initially authenticating with Spotify, adding a UI keyboard for entering the WiFi password, scrolling names that are too long to fit on the display, and minor experience improvements around the album art refreshing.
Creative & Community Angle
Do you see your Spotify Remote as part of a larger smart home setup or more of a standalone art piece?
That’s an interesting question. I see it as a useful device for the desk that can be used to control Spotify and see what is playing without disrupting a work flow. It does have a dedicated Album Cover view to just display album art so it can also serve as a standalone art piece. I also see it as part of a larger smart home setup. As discussed in a previous question, I built two Color Kit Grandes. The one that isn’t permanently on my desk has a rechargeable battery and is used to control and display what is playing throughout my living space. I am on a family Spotify plan and the home speakers are linked to a different account so that music selection doesn’t impact my listening history and recommendations. Because the speakers are essentially voice driven, prior to having the Color Kit Grande / Spotify controller set up it was more inconvenient to get song information and control playback.
Have you thought about building any other projects with ThingPulse products?
A little. I think the Icon64 might be fun to do something with. I would also like to do something with ePaper one day.
What kind of feedback would be most useful or rewarding for you from other makers?
It would be wonderful to get feedback on how people used the project and whether they found it easy to extend. There were also some technical issues I encountered and had to work around so if others find better solutions that would be wonderful to learn about. It would be particularly rewarding if the community continued to extend and grow the controller to be even more robust and useful. 🙂