ESP32 Multi-Feature Handheld Device - Multiple Issues
Posted: Sun Jul 12, 2026 12:09 pm
About the Project:
I am building a handheld multi-purpose ESP32 device with the following features:
2.4" ILI9341 TFT display
DFPlayer Mini MP3 player with 8Ω speaker
MAX98306 stereo amplifier for internet radio streaming
SD card via TFT module built-in slot
WiFi for NTP clock, internet radio and Project Gutenberg books
Bluetooth audio output
3 tactile buttons and 10kΩ potentiometer for navigation
Auto color changing LED for music visualization
18650 battery with TP4056 Type C charging and MT3608 boost converter
Features: Pomodoro timer, Snake/Pong/Tetris/Flappy Bird/Space Invaders, MP3 player, internet radio, book reader, screensavers
Pin Assignment:
TFT CS → GPIO 15
TFT RESET → GPIO 4
TFT DC → GPIO 2
TFT MOSI → GPIO 23
TFT SCK → GPIO 18
TFT MISO → GPIO 19
SD CS → GPIO 5
DFPlayer RX → GPIO 17
DFPlayer TX → GPIO 16
MAX98306 LRC → GPIO 25
MAX98306 BCLK → GPIO 26
MAX98306 DIN → GPIO 22
LEFT button → GPIO 27
RIGHT button → GPIO 14
SELECT button → GPIO 12
Potentiometer → GPIO 34
Music LED → GPIO 13
Problem 1 - DFPlayer Mini overheating:
When I connected the DFPlayer Mini it got very hot immediately and started smelling burnt without even initializing. No error message appeared in Serial Monitor before overheating.
Connections used:
Pin 1 (VCC) → 5V
Pin 2 (RX) → GPIO 17
Pin 3 (TX) → GPIO 16
Pin 6 (GND) → GND
Pin 5 (SPK1) → Speaker +
Pin 7 (SPK2) → Speaker -
Questions:
What could cause DFPlayer to overheat immediately?
Is a 1kΩ resistor needed between ESP32 TX and DFPlayer RX?
Could reversed VCC/GND cause this?
Is the module likely damaged now?
Problem 2 - TFT Display not working:
Using TFT_eSPI library with ILI9341 driver. Configured User_Setup.h with correct pins. Display backlight comes on but no image appears on screen.
Connections:
VCC → 3.3V
GND → GND
CS → GPIO 15
RESET → GPIO 4
DC → GPIO 2
SDI → GPIO 23
SCK → GPIO 18
LED → 3.3V
SCO → GPIO 19
Test code used:
cpp
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_RED);
delay(1000);
tft.fillScreen(TFT_GREEN);
delay(1000);
tft.fillScreen(TFT_BLUE);
}
void loop() {}
Questions:
Is User_Setup.h configuration correct for ILI9341?
Could there be a pin conflict somewhere?
Any common mistakes with this display on ESP32?
Problem 3 - Power system not working:
Using TP4056 Type C → 18650 battery → MT3608 boost → ESP32 VIN.
Issues:
TP4056 seems to pass current directly to ESP32 without properly charging battery
MT3608 booster output unstable
18650 battery may be dead
Connections:
TP4056 IN+ → Type C +
TP4056 IN- → Type C -
TP4056 BAT+ → 18650 +
TP4056 BAT- → 18650 -
TP4056 OUT+ → MT3608 IN+
TP4056 OUT- → MT3608 IN-
MT3608 OUT+ → ESP32 VIN
MT3608 OUT- → ESP32 GND
Questions:
Is this wiring correct?
How to check if 18650 battery is dead using multimeter?
Is it safe to power ESP32 directly from TP4056 OUT without MT3608?
Problem 4 - MAX98306 amplifier:
Not sure if MAX98306 supports I2S audio directly from ESP32.
Current connections:
VDD → 5V
GND → GND
SDWN → 3.3V
L+ → GPIO 22
L- → GND
R+ → GPIO 22
R- → GND
LOUT+ → Speaker +
LOUT- → Speaker -
Questions:
Does MAX98306 support I2S or only analog input?
Is this wiring correct for mono speaker?
What changes are needed for ESP32 I2S audio?
Libraries used:
TFT_eSPI by Bodmer
DFRobotDFPlayerMini
ESP32-audioI2S by schreibfaul1
NTPClient
BluetoothA2DPSource
Board: ESP32 DevKit V1
Arduino IDE: 2.x
Any help appreciated! Thank you! :folded_hands:
I am building a handheld multi-purpose ESP32 device with the following features:
2.4" ILI9341 TFT display
DFPlayer Mini MP3 player with 8Ω speaker
MAX98306 stereo amplifier for internet radio streaming
SD card via TFT module built-in slot
WiFi for NTP clock, internet radio and Project Gutenberg books
Bluetooth audio output
3 tactile buttons and 10kΩ potentiometer for navigation
Auto color changing LED for music visualization
18650 battery with TP4056 Type C charging and MT3608 boost converter
Features: Pomodoro timer, Snake/Pong/Tetris/Flappy Bird/Space Invaders, MP3 player, internet radio, book reader, screensavers
Pin Assignment:
TFT CS → GPIO 15
TFT RESET → GPIO 4
TFT DC → GPIO 2
TFT MOSI → GPIO 23
TFT SCK → GPIO 18
TFT MISO → GPIO 19
SD CS → GPIO 5
DFPlayer RX → GPIO 17
DFPlayer TX → GPIO 16
MAX98306 LRC → GPIO 25
MAX98306 BCLK → GPIO 26
MAX98306 DIN → GPIO 22
LEFT button → GPIO 27
RIGHT button → GPIO 14
SELECT button → GPIO 12
Potentiometer → GPIO 34
Music LED → GPIO 13
Problem 1 - DFPlayer Mini overheating:
When I connected the DFPlayer Mini it got very hot immediately and started smelling burnt without even initializing. No error message appeared in Serial Monitor before overheating.
Connections used:
Pin 1 (VCC) → 5V
Pin 2 (RX) → GPIO 17
Pin 3 (TX) → GPIO 16
Pin 6 (GND) → GND
Pin 5 (SPK1) → Speaker +
Pin 7 (SPK2) → Speaker -
Questions:
What could cause DFPlayer to overheat immediately?
Is a 1kΩ resistor needed between ESP32 TX and DFPlayer RX?
Could reversed VCC/GND cause this?
Is the module likely damaged now?
Problem 2 - TFT Display not working:
Using TFT_eSPI library with ILI9341 driver. Configured User_Setup.h with correct pins. Display backlight comes on but no image appears on screen.
Connections:
VCC → 3.3V
GND → GND
CS → GPIO 15
RESET → GPIO 4
DC → GPIO 2
SDI → GPIO 23
SCK → GPIO 18
LED → 3.3V
SCO → GPIO 19
Test code used:
cpp
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_RED);
delay(1000);
tft.fillScreen(TFT_GREEN);
delay(1000);
tft.fillScreen(TFT_BLUE);
}
void loop() {}
Questions:
Is User_Setup.h configuration correct for ILI9341?
Could there be a pin conflict somewhere?
Any common mistakes with this display on ESP32?
Problem 3 - Power system not working:
Using TP4056 Type C → 18650 battery → MT3608 boost → ESP32 VIN.
Issues:
TP4056 seems to pass current directly to ESP32 without properly charging battery
MT3608 booster output unstable
18650 battery may be dead
Connections:
TP4056 IN+ → Type C +
TP4056 IN- → Type C -
TP4056 BAT+ → 18650 +
TP4056 BAT- → 18650 -
TP4056 OUT+ → MT3608 IN+
TP4056 OUT- → MT3608 IN-
MT3608 OUT+ → ESP32 VIN
MT3608 OUT- → ESP32 GND
Questions:
Is this wiring correct?
How to check if 18650 battery is dead using multimeter?
Is it safe to power ESP32 directly from TP4056 OUT without MT3608?
Problem 4 - MAX98306 amplifier:
Not sure if MAX98306 supports I2S audio directly from ESP32.
Current connections:
VDD → 5V
GND → GND
SDWN → 3.3V
L+ → GPIO 22
L- → GND
R+ → GPIO 22
R- → GND
LOUT+ → Speaker +
LOUT- → Speaker -
Questions:
Does MAX98306 support I2S or only analog input?
Is this wiring correct for mono speaker?
What changes are needed for ESP32 I2S audio?
Libraries used:
TFT_eSPI by Bodmer
DFRobotDFPlayerMini
ESP32-audioI2S by schreibfaul1
NTPClient
BluetoothA2DPSource
Board: ESP32 DevKit V1
Arduino IDE: 2.x
Any help appreciated! Thank you! :folded_hands: