PCM5102A I2S DAC Module – Digital-to-Analog Converter with Stereo Output (3.5 mm Jack)
Product details
This PCM5102A DAC audio module is ideal for anyone who needs high-quality conversion from digital signals to analog audio. Using its I2S interface , the chip can convert up to 32-bit audio with high precision and low noise.
It supports sampling rates up to 384 kHz, has a low-noise stereo output via a 3.5 mm audio jack and an excellent signal-to-noise ratio (SNR). Its compact size and simple wiring make it suitable for DIY Hi-Fi systems, wireless speakers, streaming modules and smart audio players.
🔧 Features:
-
Chip: PCM5102A (Texas Instruments)
-
Communication: I2S (DIN, BCK, LCK)
-
Resolution: up to 32-bit / 384 kHz
-
Power supply: 3.3 V – 5 V
-
Output: Stereo audio via 3.5 mm jack (LOUT, ROUT)
-
Output quality: Low-noise outputs with integrated filters
-
Supported formats: I2S, Left Justified
-
Selectable chip modes: PCM5100 / PCM5101 / PCM5102A (jumper)
📦 Package contents:
-
1 × PCM5102A module
-
1 × set of Dupont cables
-
1 × straight pin header
⚙️ Configuring functions with jumpers:
| Function | Pin | HIGH (3.3 V) | LOW (GND) | Description |
|---|---|---|---|---|
| FLT | H1L | Low latency (IIR) | Normal latency (FIR) | Low-latency filter suitable for studio applications; the FIR filter at LOW provides the best audio quality |
| DEMP | H2L | De-emphasis enabled (@ 44,1 kHz) | De-emphasis disabled | Used for older CD recordings; usually disabled (LOW). |
| XSMT | H3L | Soft unmute (smooth startup) | Soft mute (inputs muted) | Soft audio muting at startup; HIGH provides a click-free start. |
| FMT | H4L | Left-justified format | I2S format | Choose the correct format – ESP32 and most microcontrollers require LOW (I2S). |
📌 Note:
On this board, pins H1L–H4L are not configured by default, so they must be manually set for correct operation with ESP32. Without these settings, the PCM5102A module may not work correctly or may produce no audio.
🔧 Recommended settings for ESP32:
-
FLT (H1L) = LOW – normal latency (best quality)
-
DEMP (H2L) = LOW – de-emphasis disabled
-
XSMT (H3L) = HIGH – soft unmute (smooth audio startup)
-
FMT (H4L) = LOW – I2S format (required for ESP32)
| Pin | Function | Status (set for ESP32) | Effect on the chip |
|---|---|---|---|
| H1L | FLT | LOW (connected to GND) | Normal-latency FIR filter |
| H2L | DEMP | LOW (connected to GND) | De-emphasis disabled |
| H3L | XSMT (mute) | HIGH (connected to 3.3 V) | Soft un‑mute – smooth audio startup |
| H4L | FMT | LOW (connected to GND) | I2S audio format (required for ESP32) |
Connect the module exactly as shown in the photograph below:

💻 Test code for ESP32
// Arduino Bluetooth A2DP Sink C++ kód
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
// Callback pre ovládanie hlasitosti
void volume_control_callback(int volume) {
Serial.printf("Current Volume: %d\n", volume);
}
// Callback pre prijímanie metaúdajov médií
void avrc_metadata_callback(uint8_t attribute_id, const uint8_t *value) {
if (value == nullptr) {
return;
}
// Konverzia z uint8_t na char
String metadata = String((const char *)value);
switch (attribute_id) {
case 1: // Názov
Serial.printf("Title: %s\n", metadata.c_str());
break;
case 2: // Interpret
Serial.printf("Artist: %s\n", metadata.c_str());
break;
}
}
void setup() {
Serial.begin(115200);
// I2S konfigurácia
i2s_pin_config_t my_pin_config = {
.bck_io_num = 26, // BCLK
.ws_io_num = 25, // LRC
.data_out_num = 27, // Din
.data_in_num = I2S_PIN_NO_CHANGE
};
a2dp_sink.set_pin_config(my_pin_config);
// Callback funkcie
a2dp_sink.set_on_volumechange(volume_control_callback);
a2dp_sink.set_avrc_metadata_callback(avrc_metadata_callback);
a2dp_sink.start("DENUINO");
Serial.println("Bluetooth A2DP Sink Started");
}
void loop() {
if (Serial.available()) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "volume") {
Serial.println("Enter volume intensity (1-100):");
while (!Serial.available()) {
delay(10); // Čaká, kým prídu dáta
}
int volume = Serial.parseInt();
if (volume >= 1 && volume <= 100) {
a2dp_sink.set_volume(volume);
Serial.printf("Volume set to: %d\n", volume);
} else {
Serial.println("Invalid volume value. Please enter a value between 1 and 100.");
}
} else if (command == "media data") {
Serial.println("Requesting media metadata...");
// Metaúdaje sa automaticky zobrazia pomocou callback funkcie
} else {
Serial.println("Unknown command. Use 'volume' or 'media data'.");
}
}
}
Reviews
No reviews yet.



























































