アンプ内蔵外部DAC(MAX98357A)とスピーカーで音楽再生
はじめに
MAX98357A は、アンプが内蔵されているモノラルDACです。これとスピーカーを接続して音楽を再生してみます。
内蔵DACに比べると雑音が減少して聞きやすくなります。
PCM5102A は、アンプ機能がないためスピーカー側にアンプ機能が必要になります。
開発環境
OS : Windows 11 Pro
ESP32:ESP-WROOM-32
統合開発環境 : Arduino IDE 2.3.4
Arduino core for the ESP32:2.0.17
使用ライブラリ:ESP32-audioI2S(3.0.12)
使用パーツ
ESP32開発ボード(38Pin)
MAX98357A
ダイソー300円ミニスピーカー
ジャンパーワイヤー(オスーオス)
作業内容
配線図
MAX98357A とは GPIO 25 GPIO 26 GPIO 27 を使用して接続します。
配線図にはないですが、ダイソー300円ミニスピーカーを分解してスピーカー部分のみを取り出して接続しています。
MAX98357A | ESP32開発ボード(38Pin) |
LRC | GPIO 26 |
BCLK | GPIO 27 |
DIN | GPIO 25 |
GAIN | ー |
SD | ー |
GND | GND |
VIN | 5V |
今回、GAIN と SD は接続していません。音量の制御や出力制御を変更することができますので、必要であれば接続してください。
GAIN
GAIN端子とVIN/GNDを接続することで、音量を調節することができます。
・3dB(GAIN→100KΩ→VIN)
・6dB(GAIN→VIN)
・9dB(未接続:default)
・12dB(GAIN→GND)
・15dB(GAIN→100KΩ→GND)
SD
SD端子にかける電圧により出力制御を調整することができます。
・アンプ停止(SD→GND)
・ステレオ音源左右の平均をモノラル出力(Vin→(0.16V~0.77V)→SD)
・右チャンネルのみを出力(Vin→(0.77V~1.4V)→SD)
・左チャンネルのみを出力(Vin→(1.4V~)→SD)
ライブラリインストール
ESP32-audioI2S
こちらは Arduino IDE のライブラリマネージャーに対応していないため、GitHubからダウンロードして、所定の場所へ配置します。
ダウンロードしたファイルを解凍してライブラリフォルダに格納します。
スケッチ作成
#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.forceMono(true);
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.forceMono(true);
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回再生されると思います。アンプなしのスピーカーで再生されており、音も綺麗だと思います。
おわりに
十分な音量もあり、アンプなしのスピーカーを鳴らすことができるのは好印象です。
ステレオではなくモノラルなので、使用用途が合えば良いですね。
コメント