気の向くままに辿るIT/ICT/IoT
IoT・電子工作

Raspberry Pi/アンプ付きI2S対応DAC MAX98357Aで音源再生

ホーム前へ次へ
Raspberry Piって?

Raspberry Pi/アンプ付きI2S対応DAC MAX98357Aで音源再生

Raspberry Pi/アンプ付きI2S対応DAC MAX98357Aで音源再生

2023/03/24
Raspberry Pi 3B+/MAX98357A/スピーカーで音源再生

 Raspberry Pi 3B+と比較的安価なアンプ付きI2S対応DAC MAX98357A、スピーカーであらゆる音源を再生してみた話。

 当初、ESP32+MAX98357Aの動作確認としてインターネットラジオを選んだら、できなかったのでAliExpressへの受取確認の為の動作確認、また、成功体験するためにラズパイでやってみた次第。

 そのESP32でもネットラジオは、ビデオドアフォンでも作ってみようかという道のりにおける寄り道に過ぎず、SPIFFSやPROGMEM上の音源再生は成功済み。

 3B+でなくともRaspberry Piなら、とは言え、RAMはある程度あった方がと考えると2B/3B/3B+/4Bあたりが良いでしょうが、Raspberry Pi Wやマイクロコンピューターではなく、マイクロコントローラーであるPicoでも実績はあるようです。

概要

 ここでは、Raspberry Pi上のデフォルトのスピーカーをオフにしてI2S DAC(MAX98357A)用の設定をすることでラズパイ上で再生されるあらゆる音源がMAX98357Aを介してスピーカーから出力されるようにします。

 もちろん、逆の手順をとれば、元に戻すことは可能です。

Raspberry Piの設定

 Adafruit MAX98357 I2S Class-D Mono Amp Raspberry Pi Setupに沿って設定していきます。

 リンク先冒頭に「ラズパイがモノラルをサポートしていない」、「Raspbian PIXELにおいてソフトウェアのボリューム設定がない」旨、2点ほど注意事項があります。

 が、前者は、ここではモノラルで動作確認していますが、今日時点、問題なさそう、後者はRaspberry Pi OSと名称は変わったもののPIXELデスクトップのRaspberry Pi 400パソコンで作業した自身も該当するようで確かにalsamixerでの調整ができませんでしたが、MAX98357ボードの配線でハードウェア的には音量変更できます。

 未確認ではありますが、Arduino IDEにおけるスケッチ上でもソフトウェア的に音量調整できそうな気配もあります。

 尚、「Fast Install」と「Detailed Install」がありますが、元に戻す際、わかりやすそうな後者で進めます。

 「存在する場合」という項目がいくつか続きますが、必要なら対処してください(自身は1つも該当しませんでした)。

 それ以外でやることは、/etc/asound.confの作成と/boot/config.txtの編集だけです。

 が、結果、ソフトウェアによる音量調整はできなかったのでPIXELを使っている場合、前者の作成は不要かもしれません。

 /boot/config.txtでは、[dtparam=audio=on]があればコメントアウト、[dtoverlay=hifiberry-dac]と[dtoverlay=i2s-mmap]を追記して保存します。

 ここで一度、ラズパイを再起動します。

Raspberry Piの設定確認

$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: sndrpihifiberry [snd_rpi_hifiberry_dac], デバイス 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
サブデバイス: 0/1
サブデバイス #0: subdevice #0
...
$

 設定後、ラズパイを再起動したら、端末でaplay -lを実行して、このようにカード 0/デバイス 0行に「snd_rpi_hifiberry_dac」があれば、成功です。

 前述の通り、PIXELデスクトップだからなのか、alsamixerを起動、[F6]で当該カードの選択はできるものの、「このカードには制御可能なミキサーがありません」表示され、ソフトウェア的なゲインや音量調整はできませんが。

Raspberry PiとMAX98357Aの配線

ラズパイMAX98357A
VDD*Vin
GNDGND
-SD
-GAIN*
GPIO 21
PCM_DOUT
DIN
GPIO 18
PCM_CLK
BCLK
GPIO 19
PCM_FS
LRC

 Raspberry PiとMAX98357Aの配線は次の、ラズパイのGPIOの位置は、GPIO and the 40-pin Headerの通りです。

 これによれば、MAX98357AのI2S用であるDIN/BCLK/LRCに接続するRaspberry PiのGPIOは、順に21/18/19一択、固定のようです。

 尚、SDは、リンク先参照して頂くとしても内部抵抗を持っている関係で5V以外の入力電源を使いたい場合、SDにその電圧に見合う抵抗をつける必要がある「かも」しれないとのこと。

 よってMAX98357Aの動作電圧が2.2V-5.5VなのでESP32のVDD*は、3.3Vでも5Vでも可ながら、5Vを使うのが簡単かつ無難そうです。

 ここでは、古いデスクトップパソコンSOTEC e-one 500Aから部品取りしたスピーカーを使用して3.3Vでは再生できず、5Vで出力でき、スピーカー仕様だと思っていたのですが、これに起因していた?

音量配線MAX98357A
15db抵抗100kΩを介しGNDGAIN
12dbGND
9db-
6db5V/Vin
3db抵抗100kΩを介し5V/Vin

 SD含め、他の各ピンの説明もありますが、GAIN*については、Pinouts/Adafruit MAX98357 I2S Class-D Mono Ampの[GAIN]の項にあるように配線しないデフォルトの9dbと他4つの配線方法により、次の通り、5段階で音量調整ができるようになっています。

要注意

 MAX98357Aはピンヘッダと端子台が未ハンダの状態で売られていることも珍しくありません。

 その場合、特にMAX98357Aのピンホールをブレッドボード上でジャンパワイヤを挿して動作確認する場合には、接触不良に要注意です。

 これらが適切にハンダ付けされていれば、余程でない限りは、ジャンパワイヤを介しても安定するでしょう。

 自身は、3個購入したMAX98357Aの1つはピンヘッダと端子台をハンダ付け済み、残る2つは未ハンダで動作確認しました。

 結果、後者は、やはり、再生しつつ、音源が適切に再生されるようジャンパワイヤをごにょごにょする必要がありました。

 もしそうなら、ごにょごにょ時間を確保するため、音源は長めにすると良いでしょう。

ホーム前へ次へ