{"id":202,"date":"2022-05-03T08:03:47","date_gmt":"2022-05-03T06:03:47","guid":{"rendered":"http:\/\/unwx.de\/blog1\/?p=202"},"modified":"2022-05-11T10:30:54","modified_gmt":"2022-05-11T08:30:54","slug":"esp32-internetradio","status":"publish","type":"post","link":"https:\/\/unwx.de\/blog1\/2022\/05\/03\/esp32-internetradio\/","title":{"rendered":"ESP32-Internetradio"},"content":{"rendered":"\n<p>Nach meinem Toasterumbau sind nun schon mehrere Umbauten vorhandener UKW Radios als WLAN-Radio erfolgt. Diese Methode hat den Charme, dass man sich nicht um ein Geh\u00e4use, die Kn\u00f6pfe und den Lautsprecher k\u00fcmmern muss, sondern es ist alles schon da. Sogar die Stromversorgung kann nicht selten noch benutzt werden.<\/p>\n\n\n\n<p>Bei der Recherche nach Vorhandenem, kommt man an KaRadio32 und die Software von Edzelf&#8217;s kaum vorbei. Im Radiobastler-forum habe ich von &#8217;saarfranzose&#8216; eine Platine bekommen, die in Zusammenarbeit mit Edzelf super funktioniert und im Grunde noch diverse Freiheitsgrade bietet. Mit Hilfe dieser Platine sind dann auch schon 2 Radioumbauten entstanden. Leider kann diese Platine nicht zusammen mit der KaRadio32-Software benutzt werden &#8230; zumindest habe ich es nicht hinbekommen, das Pin-mapping entsprechend umzustellen . Aber das nur am Rande.<\/p>\n\n\n\n<p>Mein Hobby hat sich im Bekanntenkreis rumgesprochen, so dass eines Tages ein kleines K\u00fcchenradio von Rossmann oder Tchibo zum Umbau bei mir landete. Die Platine von saarfranzose ist leider zu gross. Kurzerhand wurde also google bem\u00fcht, und ich habe eine Platine passend zu KaRadio32 gefunden, die die selben Ausma\u00dfe wie das VS1053-Modul hat. Nach dem Download kam ich dann auf die Idee, dass ich auch auf dieser Platine den PAM8403-Verst\u00e4rker unterbringen k\u00f6nnte. Mit KiCad hab ich dann also diese Platine umgestaltet und sogar noch weitere Pin&#8217;s rausgelegt. (Dazu sp\u00e4ter) Mir war auch klar, dass ich mit dieser Platine nun KaRadio32 oder Edzelf nutzen kann, was ich im Grunde aber nicht brauche &#8211; ich nehme derzeit fast nur Edzelf. (wg. meiner eigenen Erweiterungen)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-1024x485.jpg\" alt=\"\" class=\"wp-image-205\" width=\"838\" height=\"396\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-1024x485.jpg 1024w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-300x142.jpg 300w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-768x363.jpg 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-1536x727.jpg 1536w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-2048x969.jpg 2048w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184400-1200x568.jpg 1200w\" sizes=\"(max-width: 838px) 100vw, 838px\" \/><figcaption>Platine mit drunterliegendem VS1053-Modul und PAM8403 auf der Oberseite.<\/figcaption><\/figure>\n\n\n\n<p>Ich verwende nun aus Platzgr\u00fcnden kein Entwicklerboard mit ESP32, sondern l\u00f6te hier den ESP32S selbst auf &#8211; was erstaunlich gut funktioniert und doch recht einfach ist. Im Bild rechts oben sieht man die Anschlussleisten (v.o.n.u :  RXTX-Prog., ADC-Pins, IR-Pin, Encoder-pins.) Das Flachbandkabel f\u00fchrt noch zu den i2c Pins f\u00fcr ein Display.<\/p>\n\n\n\n<p>An der Unterseite der Platine ist zudem noch Platz f\u00fcr ein DC\/DC-Buck Modul, was ich bisher aber immer extern betrieben habe.<\/p>\n\n\n\n<div class=\"is-layout-flex wp-container-5 wp-block-columns\">\n<div class=\"is-layout-flow wp-block-column\" style=\"flex-basis:100%\">\n<div class=\"is-layout-flex wp-container-3 wp-block-columns\">\n<div class=\"is-layout-flow wp-block-column\">\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184427-485x1024.jpg\" alt=\"\" class=\"wp-image-206\" width=\"249\" height=\"524\"\/><figcaption>Hier nochmal ein anderer Winkel mit Display. Zudem sieht man auch die Buchse f\u00fcr den Lautsprecher, die von der originalen Platine &#8218;geklaut&#8216; wurde.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"is-layout-flow wp-block-column\">\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-rotated.jpg\" alt=\"\" class=\"wp-image-217\" width=\"298\" height=\"531\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-rotated.jpg 1072w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-169x300.jpg 169w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-575x1024.jpg 575w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-768x1367.jpg 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220320_152014-edited-3-863x1536.jpg 863w\" sizes=\"(max-width: 298px) 100vw, 298px\" \/><figcaption>Hier eine Version &#8211; direkt als Sandwich gel\u00f6tet. Daf\u00fcr m\u00fcssen ein paar Teile vom VS1053 entfernt werden.<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Nun zu den ADC-pins. Um mittels normalen Drehwiderst\u00e4nden die Lautst\u00e4rke und Senderwahl durchf\u00fchren zu k\u00f6nnen, werden adc-f\u00e4hige Pins ben\u00f6tigt. Hierf\u00fcr eignen sich am besten ADC0-Pins, wobei ich mich f\u00fcr 36 und 39 entschieden habe. Der Voltpegel 0..3.3V wird also in eine entsprechende Lautst\u00e4rke umgerechnet &#8211; genau wie es bei der Senderwahl erfolgen kann. Hierf\u00fcr waren kleine Anpassungen der Edzelf-Software notwendig, da im Original alles nur mittels Drehencoder bedient wird. &#8211; Ich wollte aber die originale Handhabung des Radios m\u00f6glichst erhalten.<\/p>\n\n\n\n<p>Auch das 128&#215;32 OLED hat ein paar Anpassungen ben\u00f6tigt. Inzwischen kann meine Edzelf-Version auch ein HT1621-Display sowie eine TM1637-7-Segement-Anzeige (als Zusatzdisplays) bedienen. Das hat sich ergeben, weil ich bei anderen Radios die vorhandenen originalen LCD-Glass-Anzeigen weiter nutzen wollte (siehe Beitrag Denver-Tr36).<\/p>\n\n\n\n<p>Nun aber weiter &#8230; Als Erstes schau ich mir also die vorhandene Platine an, wo eventuell Spannungen abgegriffen werden k\u00f6nnen. Oft lege ich im Nachgang die nicht notwendigen Teile auf der Platine lahm &#8211; damit sie nicht unn\u00f6tig st\u00f6ren k\u00f6nnen oder Strom verbrauchen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"485\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-1024x485.jpg\" alt=\"\" class=\"wp-image-207\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-1024x485.jpg 1024w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-300x142.jpg 300w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-768x363.jpg 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-1536x727.jpg 1536w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-2048x969.jpg 2048w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_184514-1200x568.jpg 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Bei diesem Radio ist der untere Poti (Lautst\u00e4rke) nicht im 0..3V3-Bereich, so dass ich ihn von der Aussenwelt getrennt habe und den Zugang mit 3.3Volt belegen konnte. Sehr viel mehr Umbauten sind hier nicht notwendig gewesen.<\/p>\n\n\n\n<p>Oft findet man bei solch einfachen Radios Drehkondensator zur Sendereinstellung. Diese ersetze ich dann durch einen einfachen Encoder (ohne Button). Im Edzelf-Code habe ich wahlweise vorgesehen, dass der Encoder direct den Sender ohne weitere Best\u00e4tigung umschaltet. (auch dass nur nebenbei \ud83d\ude42 )<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"923\" height=\"1024\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-923x1024.jpg\" alt=\"\" class=\"wp-image-210\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-923x1024.jpg 923w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-270x300.jpg 270w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-768x852.jpg 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-1384x1536.jpg 1384w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-1846x2048.jpg 1846w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x-1200x1331.jpg 1200w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/04\/20220426_185505_x.jpg 1908w\" sizes=\"(max-width: 923px) 100vw, 923px\" \/><figcaption>Der Kondensator (mit den Kleberesten) war urspr\u00fcnglich auf der Unterseite der Platine. Um Platz f\u00fcr das Display zu haben, musste er auf die Oberseite wechseln. Das d\u00fcnne gelbe Kabel (rechts) ist die Zufuhr von 3.3Volt f\u00fcr das Lautst\u00e4rkepoti.<\/figcaption><\/figure>\n\n\n\n<p>F\u00fcr das SSD1306-Display mit 128&#215;32 musste ein Loch ins Geh\u00e4use geschnitten werden. Die Fixierung mit Hei\u00dfklebe sieht etwas wild aus &#8211; aber es ging. Im Grunde braucht man keine Anzeige, ich fand es aber sch\u00f6ner, wenn man auch mal den gespielten Titel sieht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-485x1024.jpg\" alt=\"\" class=\"wp-image-218\" width=\"419\" height=\"885\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-485x1024.jpg 485w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-142x300.jpg 142w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-768x1623.jpg 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-727x1536.jpg 727w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-969x2048.jpg 969w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-1200x2536.jpg 1200w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/20220430_125959-scaled.jpg 1211w\" sizes=\"(max-width: 419px) 100vw, 419px\" \/><figcaption>Und so ist es dann fertig. Das ausgeschnittene Fenster kann beim n\u00e4chsten Mal etwas besser werden \ud83d\ude42 .<\/figcaption><\/figure>\n\n\n\n<p>Sollte Bedarf an der Platine bestehen &#8230; hier die Gerber-files ( <a href=\"https:\/\/unwx.de\/blog1\/downloads\/Gerber-ESP32radio-V7.zip\" data-type=\"URL\">Gerber-ESP32radio-V7.zip<\/a> ).<\/p>\n\n\n\n<div class=\"is-layout-flex wp-container-8 wp-block-columns\">\n<div class=\"is-layout-flow wp-block-column\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"699\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-top-1-1024x699.png\" alt=\"\" class=\"wp-image-229\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-top-1-1024x699.png 1024w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-top-1-300x205.png 300w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-top-1-768x524.png 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-top-1.png 1092w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>per default wird das PAM im Mono-Betrieb benutzt. F\u00fcr stereo muss eine Bahn an der rot markierten Stelle getrennt werden.<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"is-layout-flow wp-block-column\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"699\" src=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-bottom-1024x699.png\" alt=\"\" class=\"wp-image-227\" srcset=\"https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-bottom-1024x699.png 1024w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-bottom-300x205.png 300w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-bottom-768x524.png 768w, https:\/\/unwx.de\/blog1\/wp-content\/uploads\/2022\/05\/ESP32-bottom.png 1092w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>G-L-R (oben rechts) sind die Zug\u00e4nge vom VS1053 Audio-Jack.<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Sonstiges \/ Best\u00fcckung \/ Vorgehensweise &#8230;<\/p>\n\n\n\n<p>Die Platine ist bereits mit den einzusetzenden Werten beschriftet. Ich beginne oft mit dem ESP32-Chip. Daf\u00fcr nutze ich eine Klammer (thingiverse 1718197), die den chip gut auf einer Position h\u00e4lt. Nach dem fixieren mit 3 Pins, kann die Klammer weg und die restlichen Pins werden angel\u00f6tet. Als n\u00e4chstes folgen der 10k\u03a9-Widerstand und der 1nF-Kondensator auf der Oberseite (rechts-oben). Da ich mir die Microtaster sparen will, l\u00f6te ich nun eine Br\u00fccke (abgeschnittener Anschluss eines Elko) \u00fcber die beiden &#8218;prog&#8216;-Pads. Als n\u00e4chstes ben\u00f6tigen wir den AMS1117-3.3V auf der Unterseite der Platine.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">Nun k\u00f6nnen wir schonmal initial programmieren. Dazu nutze ich die Pin-leiste &#8218;TX-RX-Gnd-5V&#8216; und einen \u00fcblichen USB-TTL-Adapter (FT232RL). Es reicht, wenn man die 4 Enden per Stiftleiste (1reihig) mit dem Daumen fixiert, so dass Kontakt besteht (<strong>Achte auf Verpolung &#8211; 5V sitzt au\u00dfen!<\/strong>). Nun den USB-Adapter einstecken und mit der Arduino-Oberfl\u00e4che programmieren. Durch unsere Br\u00fccke \u00fcber die prog-Pads wird der ESP nicht starten, aber bei Power sofort in der Programmiermodus gehen. Nach der Programmierung : abstecken, prog-Br\u00fccke entfernen und den Rest best\u00fccken.<\/p>\n\n\n\n<p>Wenn kein PAM-Modul benutzt werden soll, k\u00f6nnen auf der Oberseite (oben links) folgende Komponenten weggelasen werden: 100nF, 2x 100k\u03a9, 47\u00b5F.<\/p>\n\n\n\n<p>F\u00fcr stereo-Betrieb muss eine Bahn getrennt werden. (Die beiden Pads daneben sind dann f\u00fcr den eventuellen R\u00fcckbau auf Mono gedacht).<\/p>\n\n\n\n<p>Auf der Unterseite der Platine muss ein 470\u03a9 Widerstand eingel\u00f6tet werden, wenn man die LED einsetzen m\u00f6chte. Als Powermodul (Unterseite) wurde dieses eingeplant (<a href=\"https:\/\/www.pcboard.ca\/tiny-step-down-adjustable-power-module\">DC\/DC-Buck<\/a>) , welches mittels L\u00f6tbr\u00fccke fest auf 5V gestellt werden kann.<\/p>\n\n\n\n<p>Einstellungen (Beispiel):<\/p>\n\n\n\n<p class=\"has-cyan-bluish-gray-background-color has-background\">flag_00 = autoplay = true        # start playing if STOP detected <br>flag_01 = adc_vol_reverse = false <br>flag_02 = enc_direct_switch = true   # no click for channel change<br># more possible flags : <br># dsp_brightness = 1..15 <br># rotate_screen = true\/false    # for OLED <br># dsp_show_ip = true\/false      # show ip on oled\/tm1637 at boot <br># adc_delog_vol = true\/false    # little bit more linear <br># oled_128x32 = true\/false      # only 4 line ssd1306 <br># <br>pin_ir = -1              # GPIO Pin number for IR receiver VS1838B <br>pin_enc_clk = 16 # fx2-pcb : rotary encoder &#8222;CLK&#8220; <br>pin_enc_dt = 17  # fx2-pcb : rotary encoder &#8222;DT&#8220; <br>pin_enc_sw = 5   # fx2-pcb : rotary encoder &#8222;SW&#8220; <br># <br>pin_tft_scl = -1   # Pin for TFT &#8222;SCL&#8220; fx2-pcb : 14 <br>pin_tft_sda = -1 # Pin for TFT &#8222;SDA&#8220; fx2-pcb : 13 <br># <br>pin_sd_cs = -1   # Pin for SD card &#8222;CS&#8220; <br># <br>pin_vs_cs = 32    # fx2-pcb : Pin for VS1053 &#8222;CS&#8220; <br>pin_vs_dcs = 33   # fx2-pcb : Pin for VS1053 &#8222;DCS&#8220; <br>pin_vs_dreq = 34  # fx2-pcb : Pin for VS1053 &#8222;DREQ&#8220; <br>pin_shutdownx = 4 # fx2-pcb : LED <br>pin_fixed_12 = 1  # fx2-pcb : RST-pin need HIGH <br># <br>pin_tm1637_clk = -1 <br>pin_tm1637_dio = -1 <\/p>\n\n\n\n<p>Zum Schluss noch einmal meinen Dank an die Vorversion von gvoigtlaender(github) und die n\u00fctzlichen Hinweise von saarfranzose (radio-bastler.de)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nach meinem Toasterumbau sind nun schon mehrere Umbauten vorhandener UKW Radios als WLAN-Radio erfolgt. Diese Methode hat den Charme, dass man sich nicht um ein Geh\u00e4use, die Kn\u00f6pfe und den Lautsprecher k\u00fcmmern muss, sondern es ist alles schon da. Sogar die Stromversorgung kann nicht selten noch benutzt werden. Bei der Recherche nach Vorhandenem, kommt man &hellip; <a href=\"https:\/\/unwx.de\/blog1\/2022\/05\/03\/esp32-internetradio\/\" class=\"more-link\"><span class=\"screen-reader-text\">ESP32-Internetradio<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[4,5],"_links":{"self":[{"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/posts\/202"}],"collection":[{"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":25,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/posts\/202\/revisions\/267"}],"wp:attachment":[{"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unwx.de\/blog1\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}