内蔵DACとスピーカーで音楽再生
はじめに
ESP32にはDAC(Digital To Analog Converter)が内蔵されています。
2つの8ビット DAC チャネルがあり、GPIO25 (チャネル 1) と GPIO26 (チャネル 2) に接続されています。
外部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)
電子工作ステーション https://electronicwork.shop/items/64134541d91711003035a5a6
ダイソー300円ミニスピーカー
ジャンパーワイヤー(オスーオス)
電子工作ステーション https://electronicwork.shop/items/637f92415988dc5175f8a9ec
作業内容
配線図
スピーカー とは GPIO 25 を使用して接続します。
ダイソー300円ミニスピーカーがあったので、使用しています。
給電用のUSB付いているスピーカーの場合は、給電用USBもPC等に接続してください。
※写真では音が鳴るかの確認のみのため、左にしか接続していません。
スピーカー | ESP32開発ボード(38Pin) |
GND | GND |
右 | GPIO 25 |
左 | GPIO 25 |
ライブラリインストール
ESP32-audioI2S
こちらは Arduino IDE のライブラリマネージャーに対応していないため、GitHubからダウンロードして、所定の場所へ配置します。
ダウンロードしたファイルを解凍してライブラリフォルダに格納します。
スケッチ作成
#include <Audio.h>
#include <SPIFFS.h>
Audio audio(true, I2S_DAC_CHANNEL_RIGHT_EN);
void setup() {
Serial.begin(115200);
SPIFFS.begin();
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>
内蔵DACを使用することと、どちらのピンを使用するかを指定します。
Audio audio(true, I2S_DAC_CHANNEL_RIGHT_EN);
// I2S_DAC_CHANNEL_RIGHT_EN:GPIO 25
// I2S_DAC_CHANNEL_LEFT_EN :GPIO 26
モノラルに設定し、音量を設定しています。
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回再生される思います。
アンプがなければ音量が物足りないですが、ダイソー300円ミニスピーカーにはアンプ機能があるため、そこそこ鳴らせていると思います。若干雑音が鳴るのは仕方ないですね。
おわりに
手軽に試せて色々試行錯誤できるので良いですね。綺麗に音を出すにはやはり外部DACが必要かなと思います。
コメント