{"id":2660,"date":"2020-01-11T10:59:00","date_gmt":"2020-01-11T08:59:00","guid":{"rendered":"https:\/\/buznik.net\/j\/?p=2660"},"modified":"2023-02-28T11:05:20","modified_gmt":"2023-02-28T09:05:20","slug":"diplayer-raspberry-pi-based-player-for-di-fm","status":"publish","type":"post","link":"https:\/\/buznik.net\/j\/2660-diplayer-raspberry-pi-based-player-for-di-fm\/","title":{"rendered":"diPlayer \u2013 Raspberry Pi-based player for DI.FM"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This is a&nbsp;desktop player for&nbsp;DI.FM that I made for&nbsp;the&nbsp;20-year anniversary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I gathered a&nbsp;lof of&nbsp;experience during this proejct:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>learned how to&nbsp;solder (again)<\/li>\n\n\n\n<li>familliarised myself with Python<\/li>\n\n\n\n<li>wrote and&nbsp;debugged firmware for&nbsp;an&nbsp;Arduino Nano<\/li>\n\n\n\n<li>learned to&nbsp;model in&nbsp;Fusion 360<\/li>\n\n\n\n<li>found out that 3-d printing don\u2019t happen right on&nbsp;the&nbsp;first time<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Details<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Desktop player based on&nbsp;Raspberry Pi, that can play DI.FM channels (IceCast streams to&nbsp;be exact).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is controlled with photoslides frames that have NFC-stickers on&nbsp;them, the&nbsp;stickers point to&nbsp;certain channels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;player can also play other sources like Spotify, Google Play Music, Soma.fm thanks to&nbsp;MusicBox software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It has a&nbsp;physical Play\/Pause button, volume knob and&nbsp;a&nbsp;small screen that displays current track. Sound output is through audiojack or&nbsp;HDMI (Raspberry Pi standard).<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Inspiration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Last year I saw these tweets:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/Jude_Pullen\/status\/1078368701370511360\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And&nbsp;some comments had a&nbsp;link to&nbsp;the&nbsp;<a href=\"http:\/\/www.brendandawes.com\/projects\/plasticplayer2\" class=\"\">PlasticPlayer<\/a>&nbsp;project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s a&nbsp;small device based on&nbsp;Espruino with NFC-sensor and&nbsp;a&nbsp;screen. Upon detecting NFC-chip it gets its reference track from the&nbsp;database and&nbsp;sends the&nbsp;link to&nbsp;it to&nbsp;the&nbsp;Raspberry Pi that sits on&nbsp;the&nbsp;same network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;author, Brendan Dawes, released all the&nbsp;source code and&nbsp;models for&nbsp;3-d printing on&nbsp;<a href=\"https:\/\/github.com\/brendandawes\/PlasticPlayer\">Github<\/a>, which helped me a&nbsp;lot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">My Attempt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I started to&nbsp;work on&nbsp;the&nbsp;project in&nbsp;June 2019.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was around the&nbsp;time I just received a&nbsp;couple fresh ESP32 from China. I did reflashed one of&nbsp;them with Espruino, but&nbsp;even simplified code from the&nbsp;Brendan\u2019s repo didn\u2019t run.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also I didn\u2019t like that in&nbsp;such a&nbsp;simple project there will be two separate wi-fi connected devices, and&nbsp;I deemed suboptimal Arduino getting track data from the&nbsp;remote server in&nbsp;the&nbsp;face of&nbsp;Raspberry Pi power and&nbsp;possibilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I rewrote and&nbsp;remodeled everything from scratch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I just&nbsp;<a href=\"https:\/\/github.com\/beshur\/PlasticPlayer\" class=\"\">forked the&nbsp;repo<\/a>&nbsp;and&nbsp;dove into unraveling all the&nbsp;upcoming issues.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mistakes and\u00a0Experience<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"769\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323-800x769.jpg\" alt=\"\" class=\"wp-image-2457\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323-800x769.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323-300x288.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323-768x738.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323-620x596.jpg 620w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_182323.jpg 1200w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">\u041c\u0430\u043a\u0435\u0442<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">NFC PN532<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is a&nbsp;very popular Arduino NFC-module. It took me only one a&nbsp;half months of&nbsp;unstable work (!) for&nbsp;me to&nbsp;read to&nbsp;the&nbsp;original manual.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One of&nbsp;the&nbsp;keys issues here was that the&nbsp;wire management&nbsp;\u2013 the&nbsp;wires should go under the&nbsp;antenna turning in&nbsp;90\u00b0.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"800\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q-600x800.jpg\" alt=\"\u041f\u0440\u043e\u0432\u043e\u0434\u0430 \u043a PN532 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0434 \u0430\u043d\u0442\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c 90\u00b0\" class=\"wp-image-2453\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q-600x800.jpg 600w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q-225x300.jpg 225w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q-768x1024.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q-620x826.jpg 620w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/YUf8q.jpg 1000w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">NFC-module is very susceptible to\u00a0electromagnetic noise from other devices and\u00a0wires.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Encoder<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I also decided to&nbsp;replace the&nbsp;\u201cNext Track\u201d button with the&nbsp;volume knob.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On&nbsp;the&nbsp;first iteration I tried to&nbsp;use encoder with Arduino.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Encoder is a&nbsp;knob you must be familiar with from a&nbsp;wide range of&nbsp;electronics. It uses two rings inside and&nbsp;a&nbsp;cursor to&nbsp;determine if it goes forward or&nbsp;backward.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On&nbsp;a&nbsp;separate breadboard and&nbsp;an&nbsp;Arduino with only the&nbsp;encoder connected everything worked smoothly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But&nbsp;whenever I tried to&nbsp;use it with my main board, together with NFC-module, screen and&nbsp;a&nbsp;couple of&nbsp;buttons, the&nbsp;volume was unstable at&nbsp;all, and&nbsp;I couldn\u2019t use it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I couldn\u2019t discover why it happened. Maybe it was due to&nbsp;some regular voltage spikes that I could measure. Some tutorials stated that encoder needed hardware interruptions to&nbsp;work, and&nbsp;so maybe I used the&nbsp;wrong Arduino pins.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After some struggling, I almost gave up on&nbsp;the&nbsp;project and&nbsp;decided to&nbsp;try potentiometer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Potentiometer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s a&nbsp;more traditional knob, based on&nbsp;the&nbsp;resistance change inside itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It didn\u2019t come out easily as&nbsp;well. Looked like the&nbsp;NFC-module emitted a&nbsp;lot of&nbsp;noise, and&nbsp;potentiometer readings bounced by&nbsp;10% either side all the&nbsp;time. 10% is quite a&nbsp;span, which is to&nbsp;easy to&nbsp;smooth out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At&nbsp;some point, I got an&nbsp;advice on&nbsp;an&nbsp;Arduino forum, to&nbsp;connect the&nbsp;potentiometer physically closer to&nbsp;the&nbsp;power source. It did help, just until the&nbsp;final assembly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Case<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In&nbsp;the&nbsp;original Brendan\u2019s repo (above) there is a&nbsp;case 3-d model. But&nbsp;it appeared I need more height due to&nbsp;the&nbsp;fact that I wanted to&nbsp;squeeze both Raspberry and&nbsp;Arduino inside, and&nbsp;also I wanted a&nbsp;different type of&nbsp;wiring on&nbsp;the&nbsp;back side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I tried to&nbsp;model it at&nbsp;first in&nbsp;Blender&nbsp;\u2013 from my knowledge it was a&nbsp;popular program to&nbsp;make Counter-Strike skins 15 years ago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I did a&nbsp;case model from scratch using the&nbsp;relative units. In&nbsp;a&nbsp;day the&nbsp;printing guys sent me a&nbsp;picture of&nbsp;a&nbsp;bottom lid with the&nbsp;Raspberry mounting holes spaced apart too much. They suggested me redoing the&nbsp;model in&nbsp;Fusion 360.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I never tried parametric modeling before and&nbsp;it worked like a&nbsp;charm. Fusion is an&nbsp;awesome and&nbsp;fast peace of&nbsp;software, and&nbsp;it took me only a&nbsp;complete Sunday to&nbsp;learn the&nbsp;program and&nbsp;model the&nbsp;case with exact measurements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This time printing went smoothly in&nbsp;terms of&nbsp;dimensions. However the&nbsp;surface quality appeared to&nbsp;be poor in&nbsp;some places, and&nbsp;I couldn\u2019t fix it afterwards.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_215501-800x600.jpg\" alt=\"\" class=\"wp-image-2456\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_215501-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_215501-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_215501-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190903_215501-620x465.jpg 620w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">The case before sanding and painting<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I tried to\u00a0sand it and\u00a0apply different Dremmel rigs, but\u00a0it didn\u2019t really help. In\u00a0the\u00a0end I coated it multiple times with acrylic paint which made it look a\u00a0little better.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final Assembly<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I had only two weeks left to&nbsp;the&nbsp;deadline (a&nbsp;trip to&nbsp;Croatia to&nbsp;meet my colleagues), so I was calm thinking that I have a&nbsp;lot of&nbsp;time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By&nbsp;this time I got desperate a&nbsp;couple of&nbsp;times and&nbsp;was close to&nbsp;abandoning the&nbsp;project due to&nbsp;unexpected issues. Now, remembering those moments, I can\u2019t understand why it scared me that much. My wife really helped in&nbsp;those moments, encouraging me to&nbsp;continue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One of&nbsp;the&nbsp;first surprises was the&nbsp;fact that the&nbsp;USB-cable that I used to&nbsp;connect Raspberry Pi and&nbsp;Arduino did not&nbsp;fit into the&nbsp;case. So I soldered a&nbsp;shorter version of&nbsp;USB-A \u2014 mini-USB.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836-800x600.jpg\" alt=\"\" class=\"wp-image-2458\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836-620x465.jpg 620w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190904_182836.jpg 1200w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Soldering mini-USB plug<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Then I soldered all the&nbsp;components and&nbsp;headers onto the&nbsp;circuit board, and&nbsp;potentiometer started to&nbsp;report incorrect readings again. I got some more advices on&nbsp;the&nbsp;forum, tried to&nbsp;put a&nbsp;capacitor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In&nbsp;the&nbsp;end I replaced the&nbsp;potentiometer with the&nbsp;encoder, but&nbsp;this time plugged it into the&nbsp;Raspberry Pi. I added another small class to&nbsp;read the&nbsp;encoder readings in&nbsp;my Python program and&nbsp;it was good.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE-800x600.jpg\" alt=\"\" class=\"wp-image-2459\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE-620x465.jpg 620w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190906_004338-COLLAGE.jpg 2046w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">One of the intermediate versions of my Raspberry Pi hat<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It was only three days before the&nbsp;flight, and&nbsp;I had more plans for&nbsp;the&nbsp;firmware updates, Raspberry Pi suddenly stopped working.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It looked very strange&nbsp;\u2013 I could connect via ssh, but&nbsp;the&nbsp;Musicbox web-interface was not&nbsp;available. The&nbsp;solution was too straightforward&nbsp;\u2013 reinstalling Raspberry Pi. Later I discovered the&nbsp;sd-card got corrupted due to&nbsp;multiple hard power-offs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At&nbsp;some point it all worked together, but&nbsp;I didn\u2019t have any emotions left to&nbsp;rejoice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It took me about two months of&nbsp;almost every evening (after my main work), which came with some exhaustion.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343-800x600.jpg\" alt=\"\" class=\"wp-image-2460\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343-620x465.jpg 620w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190911_125343.jpg 1200w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Final look of the internals<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I still did some programming right until the\u00a0flight, and\u00a0also had to\u00a0make Python program autostart when I was in\u00a0Croatia.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190915_195251-800x600.jpg\" alt=\"\" class=\"wp-image-2461\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190915_195251-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190915_195251-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190915_195251-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/20190915_195251-620x465.jpg 620w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Cutting covers for NFC in the night before flight <\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Presentation<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/img_20190918_093220-800x600.jpg\" alt=\"\" class=\"wp-image-2462\" srcset=\"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/img_20190918_093220-800x600.jpg 800w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/img_20190918_093220-300x225.jpg 300w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/img_20190918_093220-768x576.jpg 768w, https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/img_20190918_093220-620x465.jpg 620w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Ari, Andrew, me, Mich<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It was a\u00a0good one, despite the\u00a0device looks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Links<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/www.brendandawes.com\/projects\/plasticplayer2\" class=\"\">Brendan Dawes\u2019 Plastic Player<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/beshur\/PlasticPlayer\/tree\/diPlayer\/Arduino-Raspberry\" class=\"\">my verison with Arudino C and&nbsp;Python code<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">P.S. Want to&nbsp;say thanks to&nbsp;my wife who cheered me up many times during this project, helping me to&nbsp;go forward. Thank you &#x1f618;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P.S.S. I had a&nbsp;couple people asking me when I\u2019m going to&nbsp;make the&nbsp;ones for&nbsp;sale and&nbsp;I started thinking about it. Let me know using&nbsp;<a href=\"https:\/\/forms.gle\/kcLi4iFTAU3F6GVA9\">this form<\/a>&nbsp;if you are interested.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a&nbsp;desktop player for&nbsp;DI.FM that I made for&nbsp;the&nbsp;20-year anniversary. I gathered a&nbsp;lof of&nbsp;experience during this proejct: Details Desktop player based on&nbsp;Raspberry Pi, that can play DI.FM channels (IceCast streams to&nbsp;be exact). It is controlled with photoslides frames that have NFC-stickers on&nbsp;them, the&nbsp;stickers point to&nbsp;certain channels. The&nbsp;player can also play other sources like Spotify, Google [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":2448,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[766,760,768],"tags":[774,778,780],"class_list":["post-2660","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding-en","category-design-en","category-projects-en","tag-3dprinting","tag-di","tag-raspberry-pi"],"acf":[],"jetpack_featured_media_url":"https:\/\/buznik.net\/j\/wp-content\/uploads\/2019\/09\/IMG_20190918_093624.jpg","_links":{"self":[{"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/posts\/2660","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/comments?post=2660"}],"version-history":[{"count":1,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/posts\/2660\/revisions"}],"predecessor-version":[{"id":2661,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/posts\/2660\/revisions\/2661"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/media\/2448"}],"wp:attachment":[{"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/media?parent=2660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/categories?post=2660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buznik.net\/j\/wp-json\/wp\/v2\/tags?post=2660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}