Eksperimenter
med ESP32 som WIFI radio (netradio)
Bemærk: Espressif har inden for
de seneste måneder, ændret deres system fra version 2 til 3 og dermed
også API, dvs. hvis man skal kunne compile ældre Sketch, skal
Arduino ESP 32 Boards, i Arduino IDE BOARDS MANAGER ændres til 2.0.xx, og ikke opdateres når den tilbyder det.
Hvorfor ændre teknologi:
Raspberrypi
fungere sådan set fint og stabilt, men der er et problem, opstart tiden
er meget høj i forhold hvad man er vandt til i dag, i radions barndom
hvor teknikken baserede sig på radiorør, var det normalt med
opvarmning, før der kom lyd det var vilkårende, men i dag er 30
sekunder lang tid.
Derfor tænkte jeg det ville være en god
ide og prøve med en microcontroler i stedet, og da så pico kom med WIFI,
så skulle den jo være hjemme, men selvom der et lydbibliotek der kan
installeres, gav det en meget ringe lyd. I min
søgning på alternativer fandt jeg så Espressif ESP32 serie af
microcontrolere med WIFI, hvor
wrover fungere fint til WIFI radio, wroom kan også bruges, men lidt
dårligere buffer, nu er der jo ikke noget der er helt uden opstart tid
(boot), og ESP32 bruger en form for simpelt operativsystem, så opstart
som WIFI radio tager ca. 3 sekunder, altså en klar forbedring, desværre
gør det så min hidtil anvendte datalink
styring noget ustabil, jeg har
ændret til interrupt styring og forenklet læsning af seriel signal, men
det kan svigte på den måde at man forsøger program skift, men den
bliver på samme program, når man så prøver igen så skifter den.
Så
det er ikke den helt store succes, men hvis opstart tid er et problem,
så er det nogenlunde brugbart, man kan også lade en Raspberrypi køre
kontinuerligt, men stanby forbrug er jo ikke populært i disse tider, de
gamle radioer har jo også et ret stort standby forbrug, så det er nok
en god ide at slukke helt, når det ikke er i brug.
Hardware:
ESP32
kan købes enten som et lille modul eller development board (devboard),
modulet er ret vanskeligt at montere pga. den meget lille afstand
mellem lodde punkter, og der skal også monteres switche til reset og
programmering, 3,3V forsyning samt tilslutning af usb til seriel, det
kan lade sig gøre
men det er meget nemmere med et devboard, de kan fås forholdsvis
billigt i Kina f.eks Ali hvis man gider vente ca. 1 måned, som DAC kan
et lydkort til Raspberrypi bruges eller dvs. andre løsninger, der skal
forbindes de sædvanlige 5 ledninger: strøm + - og 3 digital signaler,
DIN - GPIO22, LCK - GPIO25 og BCK - GPIO26, det nemmeste er at bruge de
små ledninger med han - hun stik, link
indgangen er meget enkel, jeg bruger GPIO33 den er forbundet med 3,3V
gennem en 10k pullup, og link gennem en diode og en modstand 1k,
dioden med katode mod link, så den spærre for 5V fra link vigtigt,
kan evt.
monteres med små ledninger med stik og kronmuffer hvis man vil undgå at
lodde.

Software:
Til
forskel fra Raspberrypi, der har et SD kort med styresystem og
software, bruger ESP32 indbygget flash hukommelse, den nemmeste måde at
overføre software til ESP32, er efter min mening Arduino's IDE, der kan
tilpasses med en fil, og biblioteket til lydsystemet er nemt at
installere.
Softwaren bygger for størstedelen på en WIFI radio afspiller se: ESP8266:
How To Make Wi-Fi Radio - Hackster.io den
afspiller en URL der er skrevet ind direkte, det samme gælder
netværksnavn og nøgle, dvs. ESP32 skal om programmeres hvis noget skal
ændres, det jeg har tilføjet er et valg mellem 9 URL, ud fra datalink
koden se eksempel: boKontESP32.ino.
ESP32 har også bluetooth, så her er et eksempel: boKontESP32Bt.ino
så den kan bruges til bluetooth adapter sammen med WIFI radio,
betjeningen er lidt anderledes, radioen starter først når man vælger
den indgang den er forbundet til, når bluetooth skal bruges: Tryk stop
så radioen bliver tavs, derefter kan bluetooth pares med f. eks
Telefon, efter brug fjern parring, og radio kan startes, der skal
bruges et ekstra bibliotek downloades fra github
. 06-08-24 bibliotekerne er opdateret, desvære fungere bluetooth ikke
længere. 09-09-24 hvis man bruger ældre biblioteker, og samtidig
skifter til Espressif version 2, se øverst på siden, ser det ud til at fungere.
Grundet den dårlige performance, vil jeg prøve med et andet lyd bibliotek, det er det samme som bruges i MiniWebRadio, der findes en meget enkel version, under eksempler til lyd biblioteket, jeg
har fjernet display delen, og tilpasset den til datalink, den bruger
ikke SD kort til URL, de skrives direkte i ino filen, til at huske
sidst spillet kanal og volume bruges eeprom i ESP32, volume
bruges ikke i denne version, men kan tilpasses i setup (giver ikke
mening sammen med radio), selve de kodning af datalink ligger i IR
biblioteket, jeg har ændret til datalink, i stedet for fjernbetjening se
eksempel her,
hvilket gør
installationen lidt mere besværlig, i biblioteket
ESP32-IR-Remote-Control skal de 2 filer IR.h og IR.cpp skiftes ud, det
nemmeste er at slette indholdet i den gamle fil og derefter kopierer
det nye ind, se
fil indholdet her. Det er også muligt at få bluetooth med, men denne er vanskeligere at installere se eksempel her,
som det første skal ESP32 version i boards manager sættes til 2.xx, partition scheme: Huge APP og
biblioteker skal også være fra før version 3, audio fungere i 2.0.6 og
bluetooth i 1.7.4, IR er vanskeligere, der
er ikke nogle gamle, der skal oprettes en mappe med navnet:
ESP32-IR-Remote-Control i libraries hvor de 2 filer: IR.cpp og IR.h skal placeres se fil indholdet her, så
skulle den compile, skift til bluetooth med stop, og retur til radio
med play, hvis du har monitor på vil du se at der sker et reset, det er
fordi jeg gemmer hvilken funktion der skal bruges eeprom, der
ellers bruges til at huske volume niveau, hvilket jeg ikke anvender,
efter et software reset starter den i den ønskede funktion. Vigtigt husk omsætter 5V til 3,3V på indgangen 33, ESP32 er meget følsom for over spænding.
Arduino IDE kan hentes på deres side
Software
| Arduino tilpasning
til anvendelse med ESP32: Åben File og vælg Preferences, næsten nederst
i winduet, click på det grønne mærke til højre for linjen der stater
med Additional boards, i det nye vindue click på nederste linje der
starter med: Click for a list, i den lange liste vælges ESP32 og
adressen kopieres og tilbage til forrige vindue, hvor adressen
indsættes ,
nu skulle den kende ESP32 og du kan vælge et ESP32 board i stedet for
Arduino, næste trin er installation af biblioteker, start med at
downloade fra github
click
på code og vælg download zip, i IDE åben Sketch og vælg Include Library
derefter Include .ZIP Library, vælg det bibliotek du downloadede, så
skulle den være klar.
ESP32 devboard i Raspberrypi form factor:
Montering af ESP32 modul, kan lettes lidt med adapter print mellem
1,27 mm hulafstand og standard 2,54 mm, des være har dem jeg fandt hos
Kineserne, en ekstra mellemliggende række huller se billede, printet på
tværs hovedformål er at stabilisere de 2 adapter print, det er limet
med 2 komponent lim, samtidig giver det mulighed for at montere en SD
kort holder underneden til evt. fremtidige projekter.

Der er ikke så meget plads i siderne, men
det går lige, i den ene side er der plads til GPIO konnekter, og i
den anden reset og flash switche samt RX og TX konnekter til USB til
TTL converter, der er ingen grund til at have en fast monteret, den
skal kun bruges til download af program. Forbindelser til GPIO konnekter er som følger:
| PCM 5102 | ESP32 | GPIO CON. PIN |
| LCK | IO 25 | 35 |
| BCK | IO 26 | 12 |
| DIN | IO 22 | 40 |
| VIN | 3,3 V | 2 & 17 |
| GND | GND | 39 |
Pin 2 er 5 V tilslutningen, men denne version har ikke nogen spændings regulator, og tilsluttes til en billig 3 V strømforsyning, den jeg bruger giver ca. 3,2 V, så det passer fint, det nok til VIN på DAC, men giver ikke nogen støjdæmpning på forsyningen.
Reset og flash switch monteres, så de kan trække henholdsvis EN og IO 0 lav, og med en 10 k pull up, og 100 nF over switch.
USB til TTL har 3 tilslutninger GND til GND, TX til RX og RX til TX, bemærk skal indstilles til 3,3 V (meget vigtigt), det er normalt et par loddepunkter der skal kortsluttes.
Super WIFI radio med datalink, display og touch:
Denne
udgave af en ESP32 netradio er baseret på MiniWebRadio, se: GitHub -
schreibfaul1/ESP32-MiniWebRadio
det er en meget veludviklet og
stabil net radio efter min mening, men også et meget stort program, der
er også en del hardware, til datalink styring kan display undværes, der
er
en web-server så indstillinger og betjening kan udføres i browser, den
har også mulighed for fjernbetjening, og det kan bruges til en mere
stabil link betjening, uden at ændre hoved programmet, det kan desværre
kun bruges til program skift, dvs. stream kan kun stoppes ved at slukke
strømmen, det er ikke et begynder projekt, specielt softwaren er
vanskelig, så måske skal du prøve om du kan få software opsætningen til
at fungere, før du investere i hardware, Bemærk: det kan ikke garanteres at softwaren og denne side er tilgængelig i længere tid, så download det du skal bruge mens tid er.

Versionen
med display og touch er konstrueret på et hulprint der er monteret på
stikket bag på displayet, ESP32 modulet har jeg monteret ved først at
forbinde de 3 GND, så modulet har en afstand på 4-5 mm til printet,
derefter er det forholdsvis nemt at forbinde resten med tynd monterings
tråd, på adapteren til SD kortet har jeg forbundet de 2 GND og monteret
en 10 k pull up på D0 ellers kan den ikke læse SD kortet og stopper
under opstart, DAC er standard men vær opmærksom på 3,3 eller 5 V, det
samme gælder for display, husk 5 til 3,3 V hvis den forsynes fra 5 V,
forbindelser mellem de enkelte dele se GitHub siden, link tilslutning
til GPIO35 husk diode og modstand, programmering som de tidligere
beskrevne, det fungere med Arduino IDE 2.1.0.
Software opsætning:
På GitHub
siden er der en beskrivelse med Visual Studio Code og PlatformIO IDE som han
anbefaler, og det fungerer fint men er noget omstændeligt. Jeg downloader den
version jeg bruger: 2.40, den fungere til datalink, medens de nyeste er ændret
i fjernbetjenings delen, i src mappen i den ud pakkede download ligger main.cpp
den og de andre filer kopieres til projekt mappe under Arduino giv den navnet
MiniWeRadio, main.cpp omdøbes til MiniWebRadio.ino dobbelt klik på den, så
starter den i Arduino IDE, mappen skulle gerne ligge i dokumenter, i Aduino
mappen er mappen libraries dertil kopieres indholdet af lib mappen fra det
downloadede, i libraries mappen skal ESP32-audioI2S-master og ESP32-IR-Remote-Control
også placeres, henholdsvis lyd og fjernbetjening, audio mappen kan hentes på
GitHub siden du skal et niveau op, se evt. under repositories, fjernbetjening
hentes samme sted, i mappen tftLib skal filerne i src kopieres op i tftLib,
ellers kommer der en fejlmelding, så mangler der Arduino_json og SoapESP32 den
sidste skal være version 1.1.5 den nye fungerer ikke her, de to filer kan installeres library manager, program filen til fjernbetjenings delen
ligger i library mappen til projektet,
ESP32-IR-Remote-Control/src/IR.cpp, denne skal ændres til datalink, se
eksempel her (opdatering 02-04-24 betjening ændret, volume og mute giver ikke rigtigt mening, når det findes på fjernbetjeningen direkte). I filen common.h kan
netværks data skrives, den kan redigeres Arduino IDE, der kan display type også
redigeres hvis det er aktuelt, så skulle det fungere, men der sker jo hele
tiden ændringer og opgraderinger, testet 02-04-24.
SD kort og
adapter:
SD kortet
skal indeholde de filer der ligger i mappen Content_on_SD_Card i det
downloadede, i networks.csv kan SSID og password skrives, som alternativ til common.h
der skal ikke være stjerne først på linjen, i stations.csv er navn og streamURL,
stationer lægges nemmest browser siden, der også mulighed for at søge
stationer, i mappen audiofiles kan f. eks. mp3 filer placeres til afspilning. Adapter
er en af dem det ofte følger med microSD kort, der skal på loddes monterings
tråd eller f. eks. halve jumper kabler, så korte som muligt og de to gnd skal
forbindes, ellers kan den ikke læse kortet og starter ikke, jeg havde ret mange
problemer med den første jeg byggede på et Breadboard, der var ikke for gode forbindelser
og det samme med jumper kablerne, samtidig kunne pull up
modstande ikke undværes, når der bruges jumper kabler, det brugte jeg nogle
timer på.
Betjening
med Beolink 1000 via datalink:
Enkelt
pile:
Program skift, dobbelt pile: højre: OK og skift til ur, venstre: Sleep timer, off: Slukker ikke stream, dvs. den slukker først når
strømmen afbrydes (data forbrug), numeriske taster: program skift, mapping kan ændres
i tabellen (case) i IR.cpp, håber det fungerer, jeg har kun
adgang til en Ouverture, dvs. kun phono indgang, og ingen numerisk.

Version uden display med wrover dev. board:
DAC modul eller lydkort forbindes med jumper kabler, og SD
adapter med halve på loddede se billede, datalink tilslutning til GPIO35 husk diode
og modstand, programmering som de tidligere beskrevne, hvis det fungere skulle
du gerne kunne se: MiniWebRadio et sted i monitor udskriften på Arduino IDE, 115200
baud, den skriver også en server port i ulæseligt format, så det er nemmest at
finde med ip scanner, indsæt adressen i browser så er der en side med betjening.

Konklusion:
Hvis hovedformålet
er at opnå hurtig opstart, så er det i hvert fald en forbedring, selvom tiden
stiger lidt i den sidste version ca. 10 sek. Men prisen er høj, ikke så meget
den direkte pris for hardwaren, hardware er jo utroligt billigt efterhånden, men
kompleksiteten i program og hardvare konstruktion er meget stor i forhold til
de tidligere, strømforbruget er lidt lavere ca. 1,3 W med display, målt på 5 V
indgang, men det er en rigtig lækker WIFI radio.
Bemærk: Det kan ikke
garanteres at softwaren og denne side er tilgængelig i længere tid, så
download det du evt. skal bruge mens tid er.
---------------------------------------------------------------------------------------------------------------------------------------
Kurt Nielsen 15-09-2024
Bemærk: Raspberrypi er et varemærke tilhørende Raspberrypi
Foundation.
Bemærk:
B&O og
datalink er varemærker tilhørende Bang & Olufsen A/S. Denne
side har ingen forbindelse med Bang & Olufsen.
ESP32 er et varemærke tilhørende Espressif
Kilder: Link i ovenstående tekst.