ESP32単体で音を出力する(ESP8266Audio)

前にDFPlayerを使って音の再生をしました。しかし、この方法はでは、あらかじめ決められた固定のmp3・wavファイルの再生しかできないです。

  • ネットからダウンロードしてmp3を再生する
  • ネットから直接ストリーミング再生する

これをするにはESP8266Audioというライブラリを用いてESP32に再生させる必要があります。ESP8266AudioではI2Sを用いて外部のアンプモジュールで再生することを勧めています

I2Sアンプモジュールでよく売っているのが上の商品です。意外に高めです(Aliでも500円ぐらい)。また、これを使わないでデータピンに直接スピーカーを接続する方法(ESPの内臓DAC利用)があります。両方やってみましたが、音質は圧倒的に外部アンプを用いたほうがノイズレスでクリアです。

あとでコードを全部載せますが出力するクラスは共通(AudioOutputI2SNoDACはAudioOutputI2Sのサブクラス)なので、出力の切り替えは上のコードにあるようにoutのインスタンスごと変えてしまえば、他はいじらなくていいです。便利です!!

AudioOutputI2SNoDACでやってみて本チャンでAudioOutputI2Sにするような感じでもいいですね。ただしGainの設定は注意です。外部アンプにSetGain(2.0)とか渡すとダイソーのスピーカーは壊れそうな爆音になります。ご注意を…


直でスピーカーを接続(AudioOutputI2SNoDAC)

上のブログを参考にして、2SC1815トランジスタをスピーカーに接続して再生してみました。音量が小さいのでsetGainで3.999を与えています。ちなみにコードを見ると有効設定値は4.0未満のようです。

上のブログでも指摘されていますが、230mA程度の電流が流れている(自分は計測してませんがw)ようです。

2SC1815の最大定格って150mAじゃなかったでした?

確かに再生し続けていると2SC1815がキンキンに熱くなります。常用は避けた方がよさそうです。でもESP8266Audio公式で勧めている2N3904もIc定格が200mAですので足りない気も…。自分で計測していないので深堀りはしません・・・


I2Sアンプを接続(AudioOutputI2S)

AudioOutputI2Sを初期化してSetPinout(26,25,15)を与えます。bclkPin = 26、wclkPin(LRC) = 25、doutPin(DIN) = 15、の通りにつなげます。あとはVin=3.3v、GNDを接続すればいいだけ。あーあと、「+」「-」にはスピーカーをつなげます。これだけで素晴らしい音が鳴ります。

 


ストリーミングの準備をする

素晴らしいことに、ESP8266Audioにはストリーミングを再生するサンプルがすでに用意されています。

長いですが、書き換えたのはoutの部分の切り替えだけです。あとssidとpassを入れれば、英語のラジオが流れるはずです。

下の動画はDAC-I2Sを用いてストリーミングさせています。コードがごちゃごちゃしてますが、TFT液晶をつないでいるためです。必要なのはI2Sラインと電源・GNDだけです。

次の記事では実際にTTSで話させてみます。

投稿者 まる

とりあえず、興味を持ったことを疲れない程度でやってみるブログ。飽きたら、違うことをやって気分転換!!

“[ESP32] ESP32に発話(TextToSpeech[TTS])させる 接続編” に1件のフィードバックがあります

コメントは受け付けていません。

Amazon プライム対象