logo elektroda
logo elektroda
X
logo elektroda

Internet radio and audio file player on ESP32-S3

MAJSTER XXL 270534 2717

TL;DR

  • Built an ESP32-S3 internet radio with an audio file player and OLED desk display, evolving through v1, v2, and v3.
  • Uses an ESP32-S3-WROOM-1, PCM5102A DAC, rotary encoders, and GitHub-hosted station lists split into banks of up to 100 stations.
  • The prototype uses a 2.42" 128x64px white OLED display, with a PCB made in Poland costing 130zl.
  • v3 adds a colour screen, weather, a calendar, RSS news from Polsat News Polska, and full remote control.
  • The first PCB had a pad-spacing mistake for the ESP32-S3-WROOM-1, so the module pins had to be bent slightly to fit.
Generated by the language model.
ADVERTISEMENT
Treść została przetłumaczona polish » english Zobacz oryginalną wersję tematu
📢 Listen (AI):
  • #2701 21906274
    efi222
    Level 21  
    Posts: 725
    Help: 12
    Rate: 1182
    ESP32-S3 N16R8 WROOM
    sq3evp wrote:
    ESP can probably do as a BT receiver? There is Wifi + BT on the board.

    This model does not support A2DP
  • ADVERTISEMENT
  • #2702 21906306
    sq3evp
    Level 39  
    Posts: 6440
    Help: 212
    Rate: 848
    >>21906274
    Then you need to keep looking. You can always attach a BT module and connect it to the audio output of the DAC.
  • #2703 21906320
    efi222
    Level 21  
    Posts: 725
    Help: 12
    Rate: 1182
    You can employ ESP32 for this and make a nice GUI. A library is available.
    Without the GUI it's a few lines of code. I've got a blob like this under construction for a micro tower with BT audio.
    https://github.com/pschatzmann/ESP32-A2DP
    sq3evp wrote:
    You can always attach the BT module and connect to the audio output of the DAC

    Probably through the selector?
  • #2704 21906338
    sq3evp
    Level 39  
    Posts: 6440
    Help: 212
    Rate: 848
    efi222 wrote:

    Probably via the selector?

    It will probably be safer, to be controlled from the ESP
  • #2705 21906364
    efi222
    Level 21  
    Posts: 725
    Help: 12
    Rate: 1182
    It would be possible to connect these outputs via emitter duplicates together.
    Let perhaps someone from audio comment :)
  • ADVERTISEMENT
  • #2706 21906412
    ejcon
    Level 16  
    Posts: 276
    Help: 3
    Rate: 61
    >>21906270 Only Esp32wrom on this Bt works.

    Added after 27 [minutes]:

    It's not possible to make an eqalizer out of Esp32 wrom either. I'm already thinking about this ADAU1701 DSP solution, as I think it's the right decision, because the rest is not suitable. You can do adc 2 pc audio aux inputs, radio connect I2s and i2S output to dac.
    I did the control of the spectrum styles from the radio with the same SRC key.




  • ADVERTISEMENT
  • #2707 21906822
    robgold
    Level 23  
    Posts: 722
    Help: 10
    Rate: 288
    >>21906412 Looking at what piece of software you need to have for such a DSP to prepare its configuration, it is probably simpler to have an environment from TI for TAS amplifiers. They also all have built-in DSP, but in the Evo configuration, when TAS is switched on, it is deactivated and bypass is made only to the amplifier.
  • #2708 21907010
    ejcon
    Level 16  
    Posts: 276
    Help: 3
    Rate: 61


    robgold wrote:
    >>21906412 Looking at what piece of software you need to have for such a DSP in order to prepare its configuration, it is probably simpler to have an environment from TI for TAS amplifiers. They also all have the DSP built in, but in the Evo configuration when the TAS is switched on, it is deactivated and a bypass is made only to the amplifier.


    And yet it was possible to make an equalizer on ESP32C6 EQ 16 +-12dB

    Internet radio and audio file player on ESP32-S3
  • #2710 21908871
    pawel_1980
    Level 12  
    Posts: 16
    Brilliant!

    I bought a Waveshare 5 inch 1024×600 at a bargain price and had a problem how to solve the connection with the PCM5102.
    I read what you are doing now with the VU, and added a second ESP32. I did the communication between them over UDP.
    I already thought I would have to cut paths.

    P.S. Congratulations

    Screen showing RMF FM interface with song title and two L/R level meters in green-to-red segments Touchscreen with VU meter bars and two ESP32 boards with wiring on a wooden work surface
  • #2711 21909894
    ejcon
    Level 16  
    Posts: 276
    Help: 3
    Rate: 61
    robgold wrote:
    >>21881513 Yes, I have a 22uF/10V MLCC doped in ( could be 10uF just left over from a Dell laptop repair).
    I have replaced the inverter with a TPS61040DBVR and supply it with 5V instead of 3V. For the large OLED (the 5.5 one) I bumped its voltage up to 15V and it works stably. I will probably still bump it up to 16V.

    Internet radio and audio file player on ESP32-S3

    And here is a picture of the display PCB from Ali, where the layout is much better designed and the inverter is powered from 5V. Microscope photo:
    Internet radio and audio file player on ESP32-S3

    Here the appearance of the whole PCB:
    Internet radio and audio file player on ESP32-S3

    @kula350 you made something like a "shield" out of UTP cable - question why when there are dedicated shielded audio cables? Good, inexpensive and looks nice.



    Internet radio and audio file player on ESP32-S3
    Soldering a capacitor in this location like this reduces the amplifier interference less can be heard in the speakers is this a good idea?


    @ElektrodaBot
  • ADVERTISEMENT
  • #2712 21909897
    ElektrodaBot
    AI OpenAI ChatGPT4
    Posts: 8774
    Help: 353
    Rate: 930
    ejcon wrote:
    https://obrazki.elektroda.pl/6259966300_1779724264.jpg
    Soldering a capacitor into this location like this reduces amp interference less heard in the speakers is this a good idea?


    @ElectrodB...
    Short answer

    If this capacitor is soldered parallel to the power supply of the display module / ESP / logic , i.e. between VCC and GND , and there is less interference in the amplifier when it is added, then the direction is good. This means that interference is most likely entering the audio path via common supply or common ground .

    On the other hand, I would treat the capacitor 1500 µF in such a location as an auxiliary, not a target solution. It may help, but it is still worth improving the filtering and ground routing, as a large electrolyte alone will not remove all interference from the ESP32, Wi-Fi, display and inverter.

    ---

    What you probably did

    From the photo it looks like you want to add a large electrolytic capacitor at the display module, most likely on its power supply.

    If it is connected like this:

    Code: text
    Log in, to see the code


    then it is a power supply buffer capacitor. It acts as a local energy store and reduces voltage collapses and ripples caused by the display, ESP32 or other digital modules.

    In circuit with:

    - ESP32,
    - tFT/OLED display,
    - PCM5102A DAC,
    - audio amplifier,
    - wi-Fi/UDP communication,

    interference very often comes precisely from the pulsed current consumption of the digital part. Then such a capacitor can realistically help.

    ---

    Is 1500 µF a good value?

    It may work, but it is quite a large capacitance for adding directly onto a small module board.

    Benefits

    - reduces momentary voltage drops,
    - suppresses slower power supply ripple,
    - can reduce "chirps", squeaks and interference from display refresh,
    - helps with pulsed current draw of the ESP32/Wi-Fi.

    Disadvantages and risks

    - causes a large charging pulse when switched on,
    - can overload the USB port, the stabiliser or the inverter,
    - the electrolyte itself poorly filters very fast interference,
    - if it is soldered far from the source of interference, its efficiency decreases,
    - if the polarity is wrong, the electrolyte can become damaged.

    If you leave 1500 µF, definitely check:

    - the capacitor's operating voltage: minimum 6.3 V for 5 V, better 10 V or 16 V,
    - correct polarity,
    - that the 5 V / 3.3 V stabiliser does not heat up more,
    - that the circuit starts correctly after power-up.

    ---

    Better solution than 1500 µF alone

    The large electrolyte is worth supplementing with small ceramic capacitors. A typical filtration set up looks like this:

    Place Recommended capacitors
    At ESP32 100 nF + 10 µF + 470-1000 µF on bus power supply
    At the display 100 nF + 10-47 µF, possibly an additional 470-1500 µF electrolyte
    At PCM5102A DAC 100 nF + 10 µF possibly close to the module
    At the amplifier 100 nF + 470-2200 µF depending on power
    On the power input of the whole circuit 1000-2200 µF + 100 nF
    [/table:b2224b3b44] [/tr:b2224b3b44] [/tr:b2224b3b44] [/tr:b2224b3b44]

    The 1500 µF capacitor alone filters mainly the lower frequencies. Interference from ESP32, SPI, I2S, Wi-Fi and the display often have much higher frequencies, so there should be a ceramic capacitor in parallel:

    Code: text
    Log in, to see the code


    Preferably ceramic X7R/X5R, connected as short as possible to ground.

    ---

    Where such a capacitor makes the most sense

    The best places are:

    1. At the display power input
    If the display is causing interference, the capacitor should be close to its VCC/GND pins.

    2. At ESP32
    The ESP32 can draw pulsed current during Wi-Fi. Here, 470-1000 µF + 100 nF works well.

    3. When powering the DAC PCM5102A
    Particularly important if the DAC and ESP are powered from the same 5 V/3.3 V line.

    4. At the amplifier
    The power amplifier should have its own electrolytic capacitor close to the power supply pins.

    It is less advantageous to solder a large capacitor in a random place on the module, where the tracks are thin and it is not clear if this is actually the main power rail.

    ---

    Very important: do not give a large capacitor in the audio path

    If the capacitor is connected to the power supply - fine.

    But if it would be plugged in between the audio signal and ground, for example:

    Code: text
    Log in, to see the code


    then you have to be careful. Then you create a low-pass filter. It may be quieter because the noise is attenuated, but along with it the treble may be clipped.

    For the capacitor to ground at the input of the amplifier you have to count the cut-off frequency:

    Code: text
    Log in, to see the code


    Example for a 10 kΩ amplifier input:

    Capacitor to ground Limit frequency
    100 pF
    100 pF about 159 kHz
    470 pF
    470 pF about 34 kHz
    1 nF about 16 kHz
    10 nF about 1,6 kHz


    That is, 470 pF-1 nF may still make sense as a noise filter, but higher values may already spoil the audio bandwidth.

    ---

    What I would improve in your circuit

    With a design like the one in the pictures - ESP32, modules, Dupont wires, display, DAC/amplifier - interference is practically expected. I suggest:

    1. Separate the power supply for the digital and audio parts

    Best:

    Code: text
    Log in, to see the code


    For the DAC branch you can give:

    Code: text
    Log in, to see the code


    And behind the ferrite:

    Code: text
    Log in, to see the code


    2. Mass in star topology

    Do not route the mass like this:

    Code: text
    Log in, to see the code


    Better is:

    Code: text
    Log in, to see the code


    One common point of mass, not a chain.

    3. Short audio cables

    The wires between the PCM5102A and the amplifier should be:

    - short,
    - shielded or twisted to ground,
    - away from the display ribbons and SPI/I2S wires,
    - routed away from the ESP32 Wi-Fi antenna.

    4. Move DAC away from ESP and display

    The DAC and amplifier input are the most sensitive. They should not lie directly next to the LCD tape, backlight inverter or Wi-Fi module.

    5. Give a filter on the DAC power supply

    Practical layout:

    Code: text
    Log in, to see the code


    Instead of a ferrite you can test give a 1-4.7 Ω resistor, but only if the current consumption of the DAC is small. For an ESP or amplifier a resistor is unlikely to be used.

    ---

    Should I leave this capacitor in place?

    If it is between power and ground, works and nothing heats up -- you can leave .

    But ultimately I would do it like this:

    1. I would leave 1500 µF rather at the power input of the module/display or the whole circuit.
    2. I would add a 100 nF ceramic directly in parallel to it.
    3. At the DAC PCM5102A I would give separately 100 nF + 10-47 µF.
    4. At the amplifier separately 470-2200 µF + 100 nF.
    5. I would separate the ground and power wires of the digital and audio parts.

    ---

    My rating

    Yes, that's a good clue, but I wouldn't take that as a complete solution to the problem.
    If there is less interference after adding the capacitor, this confirms that the problem sits in the power supply/bass. It is now worth sorting out the filtering and grounds rather than just increasing capacitance.

    The most likely set up to help:

    Code: text
    Log in, to see the code


    And necessarily a short, shielded DAC → amplifier audio connection.

    If you can, still show exactly between which two points you soldered this capacitor: plus/minus, VCC/GND or some signal point. Then it will be possible to say unequivocally whether it is in the ideal place or just accidentally masks the problem.
    You can call me in any topic by writing @ElektrodaBot. Disclaimer: Some answers provided by the ElektrodaBot may be inaccurate. Elektroda not responsible for accuracy, reliability or completeness of the information presented. All ElektrodaBot responses should be verified by the user. OpenAI can monitor and save information entered after calling ElektrodaBot.
  • #2713 21910027
    ejcon
    Level 16  
    Posts: 276
    Help: 3
    Rate: 61
    Internet radio and audio file player on ESP32-S3 Internet radio and audio file player on ESP32-S3 Internet radio and audio file player on ESP32-S3
    >>21909897 Thanks fetites I have put on the display cable and on the power supply of the amplifier and the radio but the beads did not give anything, only this capacitor slightly eased the operation of the inverter but it is still not perfect.
  • #2714 21910036
    ElektrodaBot
    AI OpenAI ChatGPT4
    Posts: 8774
    Help: 353
    Rate: 930
    ejcon wrote:
    Conclusion after your tests

    That the ferrites/corridors did nothing , and the large capacitor improved the situation only partially , is very typical. The problem most likely does not go mainly "along the cable as an antenna", but through:

    - a common power line,
    - common ground impedance,
    - ripple and current pulses of the inverters,
    - interference from the display / OLED / backlight,
    - interference from ESP32/Wi-Fi,
    - possible ground loop between DAC, radio and amplifier.

    So a capacitor is a good lead, but a capacitor alone won't completely take care of the issue.

    ---

    Why the ferrites didn't help

    If you have put a clamping ferrite on the whole power cable , i.e. plus and minus passes through the core at the same time, such a ferrite acts mainly as an interference suppressor common .

    For differential interference:

    Code: text
    Log in, to see the code


    such a ferrite across the cable often has little or no effect.

    A filter type is needed to suppress the junk from the inverter on the audio supply:

    Code: text
    Log in, to see the code


    i.e. a choke/ferrite in series with one power supply wire , usually with plus, followed by capacitors to ground. A clamp-on ferrite on the cable alone is not enough.

    ---

    Capacitor at display - leave, but carefully

    If this 1500 µF capacitor is indeed plugged in between:

    Code: text
    Log in, to see the code


    then you can leave it in. This improves the local current buffering and therefore "softens" the operation of the OLED inverter/inverter or backlight.

    But an important note: do not give such a large capacitor in place of the charge pump capacitor/high voltage OLED inverter if this is not the module's power input. The large electrolyte should sit on the module power input, not on a random node of the internal inverter.

    Safest arrangement at the display:

    Code: text
    Log in, to see the code


    Capacitors should be as close as possible to the module power pins.

    ---

    Most important: separate the "dirty digital" from the audio

    You can see from the photos that you have in one enclosure:

    - 12 V switching power supply,
    - dC/DC converters,
    - ESP32,
    - display,
    - dAC / radio module,
    - amplifier,
    - lots of cables and ferrites.

    This is a circuit where interference penetration is very easy. Ultimately I would make the power supply like this:

    Code: text
    Log in, to see the code


    Don't power the DAC and the audio path from the same point from which the current pulses go to the display and ESP.

    ---

    Concrete filtration proposal

    1. At the amplifier

    If the amplifier is powered from 12 V, give directly at its power input:

    Code: text
    Log in, to see the code


    Keep the amplifier's power supply wires short and fairly thick. Do not route the amplifier ground through the ESP board or the display.

    If you want to give a filter in the amplifier power supply, the choke must be for the right current, e.g. a few amps. A small 100 µH / 200 mA choke will saturate and do nothing.

    ---

    2. For the PCM5102A DAC / radio

    Here the filter can be much more effective as the currents are small.

    Example for a 5 V DAC/radio supply:

    Code: text
    Log in, to see the code


    Even better:

    Code: text
    Log in, to see the code


    For the DAC itself, a good linear stabiliser usually gives a better result than adding more large electrolytics.

    ---

    3. For the display

    I would leave the display on the "dirty" digital branch, but with its own filter:

    Code: text
    Log in, to see the code


    Plus 100 nF and 10 µF at the module itself.

    If the interference changes with the brightness of the screen, it is very likely that the backlight inverter or the OLED inverter is seeding.

    ---

    Mass - probably a big part of the problem here

    Don't lead the masses that way:

    Code: text
    Log in, to see the code


    This is asking for interference, because the display and ESP currents then flow through the same ground that the audio track sees.

    A better arrangement:

    Code: text
    Log in, to see the code


    That is, one central ground point, preferably at the main power supply capacitor / power input to the unit. From this point separate wires to:

    - amplifier,
    - DAC/radio,
    - ESP32,
    - display.

    The audio path should not be current return from the display.

    ---

    Filter on amplifier audio input

    If some of the rubbish enters through the amplifier input, a mild RF filter can be added. For each channel:

    Code: text
    Log in, to see the code


    Such a filter cuts off high-frequency rubbish, and should not move the audio band if the values are reasonable.

    Don't put large capacitors like 10 nF, 100 nF to ground in there, as you might start clipping the highs.

    ---

    Diagnostic tests worth doing

    Test 1 - short circuit the amplifier input

    Disconnect the audio signal from the amplifier and short its input to ground via a short cable.

    - If the interference is still in the speakers - the problem goes through the amplifier power supply.
    - If the interference disappears - the problem goes in through the DAC, the radio, the signal ground or the audio cables.

    Test 2 - separate amplifier power supply

    Power the amplifier for the test from a separate 12 V power supply or battery.

    - If it gets quiet - the current power supply/inverters are sowing after the power supply.
    - If it continues to hum/squeak - look for ground and audio input.

    Test 3 - disconnect the display

    Briefly disconnect the power supply to the display or reduce the brightness.

    - If the nature of the interference changes - the display or its inverter is to blame.
    - If no change - more suspicious is the 12 V power supply, the DAC or the ground routing.

    Test 4 - power the ESP/DAC from the powerbank

    For the test, power the digital/DAC part from a separate USB powerbank.

    - If the interference drops sharply - you have confirmation of a common power supply/powerbank problem.

    ---

    Note about the 230 volt power supply

    The photo shows an open 230 V/12 V switching power supply module inside the housing. Caution here:

    - maintain clearance between the mains side and the low voltage side,
    - protect the 230 V side from touching,
    - the mains cables must have mechanical strain relief,
    - the power supply should be mounted on spacers,
    - it would be good to give a fuse on the 230 V side.

    From an interference point of view, it is often better to use a decent external 12 V power supply, e.g. from a laptop or a branded module, than to fight with a cheap open power supply in the same enclosure as the audio.

    ---

    What I would do in your circuit as the next step

    I would not add any more random capacitors. I would do consecutively:

    1. Short-circuit the amplifier input to ground and see if the interference stays.
    2. Power up the amplifier for a test.
    3. Separate power branch for DAC/radio via LC filter or RC + LDO.
    4. Ground to star - separate GND wires for amplifier, DAC/radio, ESP and display.
    5. Capacitors at amplifier and DAC , not just at display.
    6. Short, shielded audio cable between DAC/radio and amplifier.
    7. Only at the end possibly ferrites, but already as an add-on, not the main means of fighting.

    ---

    Summary

    The capacitor you added, makes sense since it improved the situation. This confirms that the problem is power supply/pulse currents. But ferrites on cables will not solve this type of interference if the main problem sits in the ground and power supply.

    The biggest improvement should give:

    Code: text
    Log in, to see the code


    If you throw in a simple sketch of exactly where the 12 volts goes from, where you do the 5 volts, where the ground is for the amplifier, DAC, ESP and display, you can point specifically to "this wire rewire here, give a choke here, a capacitor here, and disconnect this ground from the chain".
    You can call me in any topic by writing @ElektrodaBot. Disclaimer: Some answers provided by the ElektrodaBot may be inaccurate. Elektroda not responsible for accuracy, reliability or completeness of the information presented. All ElektrodaBot responses should be verified by the user. OpenAI can monitor and save information entered after calling ElektrodaBot.
  • #2715 21910044
    ejcon
    Level 16  
    Posts: 276
    Help: 3
    Rate: 61
    If I disconnect the cable from the OLEDA, the interference disappears completely.
    It's the inverter that's sowing the seeds. Do you have any way of embracing this problem too?
  • #2716 21910049
    DJCheester
    Level 28  
    Posts: 2071
    Help: 75
    Rate: 951
    Power the 5v and gnd from a separate 5v charger i.e. the radio from one power supply and the OLED from the other, connecting the grounds only for the OLED signals.

    Greetings...
  • #2717 21910317
    sq3evp
    Level 39  
    Posts: 6440
    Help: 212
    Rate: 848
    ejcon wrote:
    When I disconnect the cable from the OLED, the interference disappears completely.
    It's the inverter that's sowing. Do you have any way of embracing this problem too?

    Maybe not the inverter but the OLED, i.e. the pixel control? It's probably a muliplex installation and the power supply interference is probably adding to it.
  • #2718 21910331
    robgold
    Level 23  
    Posts: 722
    Help: 10
    Rate: 288
    >>21910317 I have already described this topic. In my opinion, the layout of the OLED inverter is wrong. Powering the OLED from a linear 14-17V source removes any interference. Correct layout to the coil, filtering also solves this problem.

    In Denon/Marantz equipment it is organised in such a way that the main inverter generates several voltages including one +18V for the OLED and on the main board itself there is additionally a linear LDO stabiliser creating +16V and this is how the pixel system is powered.

    These most popular 3.12 inch OLED displays additionally have, as it were, a "by force" inverter supply from 3.3V instead of 5V because this inverter is so "shoddy" that it cannot withstand a 5V supply. You have to replace it with the original MCP, do a good filtering, power it from 5V and the problems disappear.
📢 Listen (AI):

Topic summary

✨ The discussion centers on the development of an internet radio and audio file player based on the ESP32-S3-WROOM-1 module, featuring a custom-designed prototype PCB with OLED display and user controls including rotary encoders and buttons. Key challenges addressed include pin spacing discrepancies in the ESP32-S3 module footprint, integration of Wi-Fi connectivity with dynamic station list updates, and handling of Polish character encoding on the OLED display. The project uses Arduino IDE (version 2.3.2) with ESP-IDF support and requires enabling PSRAM. Audio playback supports MP3, AAC, and FLAC streams, with the ESP32-audioI2S library recommended over the incompatible Audio library. Users reported issues with SPI MISO pin assignment causing bootloader conflicts, resolved by reassigning MISO to pin 35. The project incorporates WiFiManager for network configuration, EEPROM and SD card storage for saving last played station and settings, and includes plans for tone control via an external KA2107 equalizer and a CS8673 amplifier module. Problems with encoder input stability and memory limitations for Bluetooth A2DP on ESP32-S3 were noted. The community suggested alternatives like KaRadio and ESP32-MiniWebRadio projects. Debugging tips include serial terminal logs for HTTP errors and flash memory erasure to resolve boot loops. The project is open-source on GitHub, encouraging forks and modifications. Additional features under development include browser-based updates, directory navigation, and potential audio recording to SD card.
Generated by the language model.
ADVERTISEMENT