[ESP32]外部DAC(PCM5102A)とスピーカーで音楽再生 with Arduino IDE

ESP32

外部DAC(PCM5102A)とスピーカーで音楽再生

はじめに

ESP32に評判の良い外部DAC(PCM5102A)を接続して音楽を再生してみます。

内蔵DACに比べると雑音が減少して聞きやすくなります。
PCM5102A は、アンプ機能がないためスピーカー側にアンプ機能が必要になります。

外部DACを使用せず、内蔵DACでの音楽再生した内容についてはこちら👇

開発環境

OS : Windows 11 Pro
ESP32:ESP-WROOM-32
統合開発環境 : Arduino IDE 2.3.2
Arduino core for the ESP32:2.0.17
使用ライブラリ:ESP32-audioI2S(3.0.12)

使用パーツ

ESP32開発ボード(38Pin)

ESP32 Development Board ESP-32S NodeMCU-32S MICRO/TYPE-C Wireless Module WiFi+Bluetooth ESP-WROOM-32 IOT Expansion Board - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

電子工作ステーション https://electronicwork.shop/items/64134541d91711003035a5a6

PCM5102A

I2s pcm5102aデックデコーダーボード,GY-PCM5102 i2sプレーヤーモジュール,パラピカード形式のボード,デジタルpcm5102オーディオボード - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

ダイソー300円ミニスピーカー

ミニスピーカー
原産国(地域):中国 材質:ABS 商品サイズ:6.2cm×5.2cm×7.2cm 内容量:2個入 種類(色、柄、デザイン):アソートなし デスクトップに置けるミニスピーカーです。 スペースを取らず出し入れしやすいです。 左右のチャンネル、...

ジャンパーワイヤー(オスーオス)

電子工作ステーション https://electronicwork.shop/items/637f92415988dc5175f8a9ec

作業内容

機能ピン設定

購入時に機能ピンが設定されていない場合は、半田ごてで設定する必要があります。

中央と左右どちらかを半田ごてを使用して接続させて機能ピンを設定します。
下表と逆になりますが、左がHigh/右がLow になります。

通常は左図のようにしておけば良いと思います。
H3Lのみ逆になります。

NAMETERMINAL
NAME
DESCRIPTION(Low) / (High)
H1LFLTFilter selectNormal latency (Low) / Low latency (High)
H2LDEMPDe-emphasis control for
44.1kHz sampling rate
Off (Low) / On (High)
H3LXMSTSoft mute controlSoft mute (Low) / soft un-mute (High)
H4LFMTAudio format selectionI2S (Low) / Left justified (High)

基盤表面のSCKピンの下にも機能ピンがあります。
ここを接続すると、SCKとGNDが接続されます。
配線でSCKとGNDを接続する場合と同じです。

配線図

PCM5102A とは GPIO 25 GPIO 26 GPIO 27 を使用して接続します。
配線図にはないですが、ダイソー300円ミニスピーカーがあったので、ステレオミニプラグで接続しています。
給電用のUSB付いているスピーカーの場合は、給電用USBもPC等に接続してください。

PCM5102AESP32開発ボード(38Pin)
SCK
BCKGPIO 27
DINGPIO 25
LCKGPIO 26
GNDGND
VIN5V

ライブラリインストール

ESP32-audioI2S

こちらは Arduino IDE のライブラリマネージャーに対応していないため、GitHubからダウンロードして、所定の場所へ配置します。
https://github.com/schreibfaul1/ESP32-audioI2S/

ダウンロードしたファイルを解凍してライブラリフォルダに格納します。

配置場所(「ファイル」→「基本設定」でスケッチブックの場所を確認)

スケッチブックの場所\libraries\ESP32-audioI2S」

スケッチ作成

#include <Audio.h>
#include <SPIFFS.h>

#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

Audio audio;

void setup() {
  Serial.begin(115200);

  SPIFFS.begin();
  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  audio.setVolume(21); // default 0...21

  audio.connecttoFS(SPIFFS, "/kanpai.mp3");
}

void loop()
{
  audio.loop();
}

// optional
void audio_info(const char *info){
    Serial.print("info        "); Serial.println(info);
}
void audio_id3data(const char *info){  //id3 metadata
    Serial.print("id3data     ");Serial.println(info);
}
void audio_eof_mp3(const char *info){  //end of file
    Serial.print("eof_mp3     ");Serial.println(info);
}
void audio_showstation(const char *info){
    Serial.print("station     ");Serial.println(info);
}
void audio_showstreamtitle(const char *info){
    Serial.print("streamtitle ");Serial.println(info);
}
void audio_bitrate(const char *info){
    Serial.print("bitrate     ");Serial.println(info);
}
void audio_commercial(const char *info){  //duration in sec
    Serial.print("commercial  ");Serial.println(info);
}
void audio_icyurl(const char *info){  //homepage
    Serial.print("icyurl      ");Serial.println(info);
}
void audio_lasthost(const char *info){  //stream URL played
    Serial.print("lasthost    ");Serial.println(info);
}
void audio_eof_speech(const char *info){
    Serial.print("eof_speech  ");Serial.println(info);
}
コード説明

使用するライブラリをインクルードします。

#include <Audio.h>
#include <SPIFFS.h>

I2Sで接続するピンを決定します。

#define I2S_DOUT      25
#define I2S_BCLK      27
#define I2S_LRC       26

先ほどのピンを設定し、音量を設定しています。

  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  audio.setVolume(21); // default 0...21

音楽ファイル名を指定して登録しています。

  audio.connecttoFS(SPIFFS, "/kanpai.mp3");

loop() の中でループ関数を呼び出すことにより、再生しています。

  audio.loop();

以降の関数は、各種状態を表示するためのものです。

音楽ファイル用意

再生する音楽ファイル以下のサイトから入手しました。
https://www.ne.jp/asahi/music/myuu/wave/wave.htm
ここにある「ヴェルディ「乾杯の歌」kanpai.mp3」です。

このファイルを SPIFFS へアップロードしておきます。
SPIFFS へアップロードについてこちらを参考にしてください👇

動作確認

起動時に1回再生されると思います。ステレオで再生されており、音も綺麗だと思います。

おわりに

内部DACで再生させた時と比べると、雑音が少なくなりかなり聞きやすくなりました。

コメント

タイトルとURLをコピーしました