Skip to content

Future board bench (ESP32-S3 + ESP32)

The bench prototypes the future all-in-one board (robine_board v1.1) on a breadboard, with Dupont wires. GPIO numbers and net names are those of the board, so firmware written on the bench runs unchanged on it — except the amplifier driver (the InnoMaker uses an MA12070P, the board a TAS5825M).

Part Role
ESP32-S3-DevKitC-1 (N16R8) — S3 master: AirPlay, I²S master, LoRa, LED
ESP32-DevKitC (WROOM-32E) — ESP32 Bluetooth A2DP receiver, I²S slave
InnoMaker HiFi AMP Pro Mini (MA12070P) — HAT I²S slave, I²C 0x20, 9–24 V
RFM95W LoRa 868 MHz, 3.3 V only, antenna mandatory
SK6812 one LED, 5 V through a diode
Small parts 2 × 4.7 kΩ, 1 × 330 Ω, 1N4148, 100 nF, 10 µF
Amplifier supply regulated 19–20 V, ≥ 4 A, 5.5 mm jack (never a 24 V adapter: see the Zero W power tolerances)
Speakers 4–8 Ω, bridged (BTL)

Do the figures in this order, powering up and checking after each one: 1 S3 ↔ ESP32, 2 S3 ↔ amplifier, 3 LoRa, 4 LED, 5 power and speakers.

ESP32-S3 DevKitC-1U1 · masterESP32 DevKitCU2 · A2DP sinkIO15 (TX)IO16 (RX)IO47IO48IO6IO7IO40GNDRX (IO3)TX (IO1)ENIO0IO26IO25IO22GNDBT_RXD0 →BT_TXD0 ←BT_ENBT_IO0I2S_BCLK →I2S_LRCLK →I2S_BT_DOUT ←GNDBT_RXD0: unplug it when you use the ESP32's USB serial monitor (its USB chip drives IO3 too).BT_EN / BT_IO0 are open-drain on the S3; the devkit has its own pull-up and capacitor.
UARTSignalI²S audioGround
The S3 generates the I²S clocks, the ESP32 sends the Bluetooth audio back on I2S_BT_DOUT.

I2S_BCLK and I2S_LRCLK also go to the amplifier (next figure): run one wire from the S3 to a breadboard row, then one wire from that row to each destination.

The HAT’s 40-pin connector keeps the Raspberry Pi pin numbers. Odd pins on the left (inner row), even pins on the right; pin 1 is the square pad.

odd pins · inner roweven pins · outer row13V3 · after check 125V3SDA ← IO1745V5SCL ← IO186GND7GPIO48enable ← IO219GND10mute ← IO4111GPIO1712I²S clock ← IO613GPIO2714GND15GPIO2216error → IO38173V318GPIO2419GPIO10 MOSI20GND21GPIO9 MISO22GPIO2523GPIO11 SCLK24GPIO8 CE025GND26GPIO7 CE127ID_SD28ID_SC29GPIO530GND31GPIO632GPIO1233GPIO1334GND35I²S frame ← IO736GPIO1637GPIO2638GPIO20 PCM DIN39GND40I²S data ← IO8
3.3 VI²CGroundSignalI²S audio
Pins wired on the bench. The 5 V pins (2 and 4) stay unconnected.
ESP32-S3 DevKitC-1U1InnoMaker AMP Pro Mini40-pin connectorIO6IO7IO8IO17IO18IO21IO41IO38GND3V3pin 12 · clockpin 35 · framepin 40 · datapin 3 · SDApin 5 · SCLpin 8 · enablepin 10 · mutepin 16 · errorpin 6 · GNDpin 1 · 3V3I2S_BCLKI2S_LRCLKI2S_DOUTI2C_SDAI2C_SCLAMP_PDNAMP_MUTEAMP_FAULT ←GND3V3 (see check 1)
I²S audioI²CSignalGround3.3 V
I²C: 4.7 kΩ pull-up to 3V3 on SDA and on SCL (the HAT relies on the Pi's pull-ups). Pins 8, 10 and 16 come from the Linux merus-amp overlay: verify them (check 3).
ESP32-S3 DevKitC-1SPIRFM95W868 MHz · 3.3 V onlyIO12IO11IO13IO10IO14IO393V3GNDSCKMOSIMISONSSRESETDIO03.3VGNDSPI_SCK →SPI_MOSI →← SPI_MISOLORA_CS →LORA_RST →← LORA_DIO03V3GND
SPISignal3.3 VGround
3.3 V only. Put 10 µF + 100 nF between 3.3 V and GND at the module (it peaks near 120 mA when transmitting). Antenna first.
ESP32-S3 DevKitC-1In-line partson the breadboardSK6812single LEDIO425VGND330 Ω330 Ω1N4148 anodecathode (band)GND wireGND wireDINVDDGNDSTATUS_LEDLED_VDD
SignalPower (+)Ground
The diode drops the LED supply to about 4.3 V, which lowers the data threshold to about 3 V: the S3's 3.3 V signal is enough, no level shifter. Add 100 nF between VDD and GND at the LED.
Power supplyregulated · ≥ 4 A · not 24 VInnoMaker AMP Pro MiniMA12070PSpeakers4–8 Ω+ (centre)− (sleeve)DC IN +DC IN −LEFT +LEFT −RIGHT +RIGHT −L +L −R +R −+19–20 V DCGNDL +L −R +R −
Power (+)GroundSpeaker
Bridged outputs: the − of a speaker goes to the amplifier's − terminal, never to GND.
  1. Amplifier alone, powered, measure pin 1 of its connector. About 3.3 V: the HAT makes its own 3.3 V, so do not join the S3’s 3V3 (leave the dashed wire out). Nothing there: join it.
  2. Still alone and powered, measure SDA and SCL (pins 3 and 5): 0 V or 3.3 V, never 5 V.
  3. Unpowered, with a continuity tester, check that pins 8, 10 and 16 go to the MA12070P’s enable, mute and error functions. If not, leave those wires out.
  4. Do not connect the HAT’s 5 V pins (2 and 4): it outputs 5 V (it normally feeds a Raspberry Pi) and would fight the devkits’ USB.
  1. All wires in place, grounds first.
  2. Speakers connected (bridged).
  3. Antenna on the RFM95W.
  4. USB on both devkits.
  5. Amplifier jack plugged, then the mains adapter switched on.
  • From its own USB (daily use): unplug BT_RXD0 and leave the S3 idle, its IO47 and IO48 as inputs.
  • Through the S3 (to test the board’s mechanism): plug BT_RXD0 back and close any serial monitor on the ESP32. The S3 pulls IO0 low, resets it via EN and speaks the ROM bootloader protocol on its UART.
Net From To
BT_RXD0 S3 IO15 (TX) ESP32 RX (IO3)
BT_TXD0 ESP32 TX (IO1) S3 IO16 (RX)
BT_EN / BT_IO0 S3 IO47 / IO48 ESP32 EN / IO0
I2S_BCLK S3 IO6 HAT pin 12 + ESP32 IO26
I2S_LRCLK S3 IO7 HAT pin 35 + ESP32 IO25
I2S_DOUT S3 IO8 HAT pin 40
I2S_BT_DOUT ESP32 IO22 S3 IO40
I2C_SDA / SCL S3 IO17 / IO18 HAT pins 3 / 5 (+ 4.7 kΩ to 3V3)
AMP_PDN S3 IO21 HAT pin 8
AMP_MUTE S3 IO41 HAT pin 10
AMP_FAULT HAT pin 16 S3 IO38
SPI_SCK / MOSI / MISO S3 IO12 / IO11 / IO13 RFM95W SCK / MOSI / MISO
LORA_CS / RST / DIO0 S3 IO10 / IO14 / IO39 RFM95W NSS / RESET / DIO0
STATUS_LED S3 IO42 330 Ω → SK6812 DIN
LED_VDD S3 5V 1N4148 → SK6812 VDD
GND common row both devkits, HAT pin 6, RFM95W, LED

Source of truth: hardware/dev_bench and the mainboard README.