New ESP32 audio board for ESPuino

Hey folks. I’m a hardware developer, the one behind Sonocotta audio development boards. I’ve created quite a few of them over the last few years, and in most cases I was using 3-rd party software, like ESPHome and squeezelite-esp32. One person pointed me out to this comunity and I thought, this looks brilliant and I can make a hardware that would be a great fit.

In fact I’ve created a very similar board few years back, called loud-esp, that checks few boxes already

  • ESP32 with PSRAM
  • Dual MAX98357 DAC
  • LiPo management and low power operation
  • SD-CARD over SPI
  • Rotary encoder header
  • SPI LCD header, that can easily be used for the RFID module
  • IR reader (not sure if it is very helpful though)
  • WS2812 LED

I think the only part that is missing are few extra buttons, and maybe few more ws2812 LEDs.

So it cross my mind to create a special ESPuino edition of this board, specifically tailored for ESPuino use case. Currently I’m considering switching over to ESP32-S3, since it is much more capable chip and I’m not using Bluetooth that much (it is rubbish on the ESP32, if you ask me).

And second concern, I woudl like this board to be a fit for existing case, Ideally laser cut, not 3d-printed, so it can be produced in volumes without major issues. I’ve obtained this case and couple of speakers to experiment, but ultimately, I’d need to design a variation of it, to fit all the peripherals.

Just wanted to hear potential customer „wish list“, before I set to draw a PCB for it.

1 „Gefällt mir“

Here is the inspiration for the case I’m planning to use

And this is waht I’m testing with

Ok, here we go.

Fine.

Fine, but most people (I guess) would use only one of them. Should be possible to use only one of them while this one plays both channels.

Some users still ask for LiPo, but LiFePO4 is safer. Unfortunately, when it somes to ready-to-use battey packs, we only got one source: EREMIT 3.2V 6Ah LiFePo4 Akku Pack.
„Unfortunately“ because this pack has plug-wise twisted polarity. This makes it somehow impossible to provide a board, that can be used for LiPo + LiFePO4, while this would absolutely be possible with a boost-buck-converter.

SDMMC is the way to to. Needs lees GPIOs and is much faster.

Absolutely necessary.

As of now we don’t use a display. However, keep in mind that especially PN5180 needs a lot of more GPIOs. By the way: PN5180 seems to work better with 5 V on one pin. However, this would make it necessary to have 3,3 + 5 V. Don’t know if it’s worth it.

It’s supported but only used rarely.

Absolutely necessary.

Additional needs:

  • GPIOs / 3.3 V / GND for custom purposes
  • Five button connectors
  • reset connector and/or reset button
  • i2c connector (for possible future purposes)
  • integrated battery handling (e.g. TP5000 supports LiPO + LiFePO4)

Thanks for the feedback.

  • I’ll stick with good old ESP32, since SDIO issue seems to have a reliable fix.
  • Dual MAX98357, you can configure them to work in mono mode with a jumper
  • I’ll stay with 18650 LiPo, they are far easier to find and available with built-in protection. I have worked with them for years, and so far, no incidents. I used TP4056 Ic among others and quite happy with it.
  • SDMMC it is
  • The rotary encoder is okay. Does software need interrupt-enabled pins, or will any inputs do?
  • I think I’ll stick with RC522 for simplicity, at least for now
  • IR reader and a few WS2812 can stay
  • I don’t have buttons now, but since GPIO expander is necessary, it should not be an issue. I’m thinking of using touch sensor buttons, so I don’t have to cut the case open (should be good for audio)
  • FLASH and RESET buttons are there already
  • The rest can be empty headers on the PCB, doesn’t cost me extra

Any feedback regarding the case? Any good examples made by community people?

Interrupted is better. We had a long way in pointing out the right GPIOs. I’d suggest ESPuino/src/settings-lolin_d32_pro_sdmmc_pe.h at bb559de8037d86a3147638435955a54492136591 · biologist79/ESPuino · GitHub as configuration.

We usually work with neopixel rings. Some are working with only one WS2812.

Flash button is not necessary with autoflash design:
https://forum.espuino.de/uploads/short-url/mxbLKs0qIQSgYVJ2tK7kFZkA82K.pdf

I’m missing a neopixel ring and buttons :slight_smile:

Oh wait, there’s one thing I forgot: headphones connector.

Pin 39 is not interrup capable, so I’m assuming it is polled in software. I’ll check if there is enough GPIO to use interrup-capable pin instead.

I usually use WS2812 bar, for ring there is not so much space. Here is the example

Yes, I’m using auto-flash circuitry. Just used to have both of them just in case:)

Headphones connector: with MAX98357 it is only possible to do mono, since they use push-pull output drivers. Having another DAC for headphones would be overkill i think

Bar on the bottom or top part will do it i think. Buttons can be a banch of touch sensors on the top

GPIOs 34 => 39 can only used for input and don’t have internal pullups. I’m not aware that IRQs aren’t supported.

I disagree :slight_smile:

  • optional external LED for charging status
  • same for power led
  • switch (in hardware) for power off the electronics but able to charge via USB

I can put external pullups, but I can’t add interrups support :slight_smile:

I know it is possible. Just saying $5+ extra cost just for HP output seems to be an overkill. Alternatively, I would use PCM5100 with a D-class amp like in Amped-ESP32. But again, multiplies the cost. I’m aiming for a solution that can be produced in quantities at a reasonable price.

Yes, this is already a part of loud-esp board. Thanks for noting

Here is the topology I came up with. Will start drawing schematics this week


I’m planning to use latch button that would cut the power altogether. I used that before, and it gives a lot of confidence that board would not draw any unnecessary power while idling

2 „Gefällt mir“

Instead of latch button I prefer momentary button and latch controller IC. It is more elegant solution because all buttons can be the same and standby current is also neglegible.

Hey @Steevie85 thanks for suggestion. Do you have a specific IC in mind? I was thinking doing this in discrete (with a push button), but I’d prefer a ready-to-use IC for a reasonable price

I used this (almost 10 Years ago) and it worked perfect. Probably there are cheaper solutions out there now.

Yeah, this one is crazy expensive (costs the same as ESP32), but I got the idea. Will look it up, there must be a cheaper alternative

Hey folks. I’m a bit slowed down due to the holiday season, but I think I’m mostly finished with the schematics and working on the PCB now
Schematic_2506-loud-esp-g-espuino-edition_2025-07-01.pdf (311,7 KB)

  • Had a lot of Windows users, that had problems with flashing their ESPs. It turned out a capacitor’s value was too low. This being said: I’d strongly recommend to increase C7’s capacity to 1 µF.
  • WROVER-B is deprecated. Use WROVER-E instead.
  • 8 MB Flash is technically fine, but as 8 MB isn’t distributed widely, I initially switched over to 16 Mb. Keep in mind to use the right partition file: ESPuino/custom_8mb_ota.csv at 4474081bdecd1197ad806de2f85d35ac95d8a939 · biologist79/ESPuino · GitHub
  • I’d probably use 4,7 k as i2c-pullups. I do so and it’s fine, but maybe 10 k works, too.

Thanks for taking the time to review

  • I didn’t have issues flashing with 100nf, but doesn’t cost me extra, I’ll replace it
  • You’re right, it is time to switch to E :slight_smile: I was wondering why the B stock is so low :slight_smile:
  • I use 10k usually instead of the recommended 4k7, because I2C devices often have pullups on the device side as well

Another points:

  • IO2 is pulled up via sd module. R5 should be omitted as otherwise ESP32 is not flashable while sd card is inserted. We already discussed it, so I guess it’s there by mistake.
  • Did you already test ws2812b connected to 5 V while signals are at 3,3 V? Cheating At 5V WS2812 Control To Use 3.3V Data | Hackaday. While ws28b’s specification says 5 V are needed, it works fine at 3,3 V.
  • Simply switching off MAX98357a can lead to ugly noises when SD_MODE isn’t pulled down first. That’s why we use PA_EN which means: 3,3 V to SD_MODE are provided by the port expander. I know it’s different in your case as you plan to switch off supply completely (no deep sleep) but maybe it makes sense to have it somehow controllable.
  • If I was you, I’d arrange those two MAX more flexible. Which means: first MAX plays stereo per default but can be changed via solder jumper to play left channel only. Second MAX plays right channel but needs to be enabled first by solder jumper. Can provide details if this is of interest.
  • I’m using naked sd-card connector, so nothing is pulled by default. I put all pullups to indicate reference schematics, but highlighted resistors will not be placed on the board
  • Yes, I did test specifically those LEDs, they work fine with anything between 3 and 5V on power and 3.3v logic levels. I didn’t want to power them from 3V3 line, since 12 LEDs can make the power line quite noisy, causing the ESP32 to run unstable.
  • Good catch, I’ll connect DAC_EN to pin 13, since 4-bit SDIO is not much better than 1-bit anyway. Probably will use another SDIO pin for charger TP4056 charge states
  • I want to use the below case, so I’d prefer to stick to stereo by default, and mono can be optional (I think I even can make it solder-less, you’d cut the wire to turn it to mono)