[ESP32]内蔵DACとスピーカーで音楽再生 with Arduino IDE

ESP32

内蔵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)

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

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

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

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

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

作業内容

配線図

スピーカー とは GPIO 25 を使用して接続します。
ダイソー300円ミニスピーカーがあったので、使用しています。
給電用のUSB付いているスピーカーの場合は、給電用USBもPC等に接続してください。

※写真では音が鳴るかの確認のみのため、左にしか接続していません。

スピーカーESP32開発ボード(38Pin)
GNDGND
GPIO 25
GPIO 25

ライブラリインストール

ESP32-audioI2S

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

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

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

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

スケッチ作成

#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が必要かなと思います。

コメント

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