以前の記事で、ダイソーの300円スピーカーをRaspberry Piのイヤホンジャックにつないで音を鳴らしてみました🎶
しかし、例えばRaspberry Piで目覚まし時計を作りたいと思っても、このスピーカーだと大きくて不便ですよね😢
今回は、小さいスピーカーユニットを直接鳴らせる安いI2S DACオーディオアンプをAliExpressで買ってみました。
MAX98357AというオーディオアンプLSIが搭載されています。 見た目的には、Amazon.co.jpで売られているこちらのモジュールと同一のものと思われます。
AliExpressでの私が購入時の値段は、なんと$2.37でした!300円しないのでお買い得ですね。
これはアメリカAdafruitのオープンソースハードウェアAdafruit I2S 3W Class D Amplifier Breakout MAX98357Aをベースにしていると思われ、レイアウトやピン配置等ほぼ同じようです。
これは1ch用でモノラル出力です。Raspberry Piに何かしゃべらせたり、目覚まし時計として使う場合は、モノラル出力で十分でしょう。
探せばステレオ用の同じような商品も見つかります。
I2Sとは?
Raspberry PiとこのオーディオアンプとはI2S(Inter-IC Sound)で音データをやり取りします。 デジタルのインターフェースで、基板上のチップ同士でオーディオデータをやり取りするための規格です。
クロック線(BCLK)とデータ線(SDATA)、それと左右のスピーカを区別する信号を出す線(LRCLK)の3種類を使って通信します。
MAX98357Aとは?
MAX98357Aとはアメリカの半導体メーカーMAXIMが出しているI2S DAC機能を持ったオーディオアンプです。
DACというのはDigital-to-Analog Converterの略で、デジタル信号をアナログ信号に変換する機能です。
このチップはI2Sで受信したデジタルデータをアナログに変換して、アンプで増幅してスピーカーを鳴らす機能を持っています。
Raspberry Piにつないでみよう
MAX98357Aモジュールの準備
私が買ったMAX98357Aモジュールはこちらです👇
マイコンに簡単に繋げられるように、標準ピッチ(2.54mm)のピンヘッダが付属しています。また、スピーカーを接続するための端子台もついてきました。
基板の真ん中に搭載されている黒い四角いチップがMAX98357Aです。
ピンヘッダをはんだ付けしました。はんだ付けが必要なのが少し面倒ですね。
はんだごてがない方は、こちらのICテストクリップケーブルを使って、端子同士を引っかけてつかうこともできます。ピンヘッダにもスルーホールの穴にもクリップできるので便利です。ただし、ショート⚡️させないよう注意してくださいね。
スピーカーの接続
実際に音を鳴らすには、スピーカーユニットを繋がなければなりません。
スピーカーユニットというものはピンキリで、高級品は何千円~何万円もするものもあります。 ふつうは次のような数百円のもので良いでしょう。
私は上👆の商品とは違いますが、大阪・日本橋にある電子部品屋さんで売っていた150円のスピーカーユニットをつなぎました。 ケーブルとコネクタ付きだったので、コネクタ部分をハサミでチョキンと切り落として、芯線を出して接続しました。はんだ付けしなくてよかったので簡単です。
スピーカーユニットは、MAX98357Aモジュールの端子台に接続します。 端子台上部からマイナスドライバーでねじを回して端子台を開け、横から線を差し込んで、ねじを反対に回して締め付けます。 上から押さえつけるように止めます。
Raspberry Piへの接続
Raspberry Piのピンヘッダは上図のように機能が割り当てられています。このモジュールはI2Sで通信するので、次のピンに接続します。
RasPiピン番号 | RasPi 機能 | MAX98357Aモジュール | 説明 |
---|---|---|---|
2 | 5V power | VIN | 電源(5V) |
6 | Ground | GND | グランド (0V基準電圧) |
12 | GPIO 18 (PCM_CLK) | BCLK | I2Sビットクロック |
35 | GPIO 19 (PCM_FS) | LRC | I2S LRクロック |
40 | GPIO 21 (PCM_DOUT) | DIN | I2Sデータ (Raspi→MAX98357A) |
これらをジャンプワイヤーでRaspberry Pi Zero WHに接続すると、次のようになりました。
Raspberry Pi Zero WHの場合、1番ピンはSDカードスロットの横にあたります。
もちろん、Raspberry Pi 3B+や4Bでも同じように使えます。
Raspberry Piの設定
Raspberry Pi側の設定は、以下のAdafruitの記事が参考になります。
これに沿ってセットアップしてみましょう。
I2Sオーディオの有効化
Raspberry Piの/boot/config.txt
でデバイスツリーのオーバーレイを設定します。
Raspberry Piを起動して、vimやnanoなどのエディタで編集します。
$ sudo vim /boot/config.txt
このファイル中に、dtparam=audio=on
という行があると思います。
これはRaspberry Piのイヤホンジャックの内蔵オーディオを有効にしているものです。
ややこしいので、こちらはオフにしておきます。
この行の先頭に#
(シャープ)をつけてコメントアウトしておきます。
そして、次の行にhifiberry-dacを有効にする記述を追加します。
#dtparam=audio=on # コメントアウト dtoverlay=hifiberry-dac # 追加
Adafruitのページにはi2c-mmapも追加するようになっていますが、最近のRaspberry Pi OSではデフォルトで有効になっているので、追加の必要はありません。古いOSを使っている場合は、i2c-mmapも同様に有効にしてください。
ALSA設定ファイルの作成
Adafruitのページでは、ALSA設定ファイル/etc/asound.conf
を作成するようになっています。
スピーカーのポップ音を減らす効果があるとのことですが、私はALSAに詳しくないのでよく分からず、そのままコピペします😅
$ sudo vim /etc/asound.conf
以下の内容でファイルを作成します。
pcm.speakerbonnet { type hw card 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave { pcm "speakerbonnet" period_time 0 period_size 1024 buffer_size 8192 rate 44100 channels 2 } } ctl.dmixer { type hw card 0 } pcm.softvol { type softvol slave.pcm "dmixer" control.name "PCM" control.card 0 } ctl.softvol { type hw card 0 } pcm.!default { type plug slave.pcm "softvol" }
これで保存します。
以上で設定が完了です!Raspberry Piを再起動してデバイスオーバーレイの設定を反映させましょう。
設定の確認
再起動すると、HifiBerry DACというオーディオデバイスが見えるようになっていると思います。
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0
音を鳴らしてみよう
音量調整
音を鳴らす前に、音量を下げておきましょう。
場合によっては爆音が鳴り、スピーカーユニットにも心臓にも悪い可能性もあるので念のため😅
alsamixer
コマンドで調整できます。
$ alsamixer
次のような画面が出ますので、上下キーで音量を調整して、ESCキーで終了します。
スピーカーのテスト
いよいよ音を鳴らしてみましょう。次のコマンドで、ホワイトノイズが出ます。
$ speaker-test -c2
サーーというホワイトノイズが聞こえるでしょうか?
音が出ない場合は、少しずつ音量を上げるなどして調整してみましょう。 それでも出なければ、何かがおかしいかもしれません。手順を一通り見直してみましょう。
音が出れば成功です!🎶
WAVファイルを鳴らす
ALSA付属のaplayコマンドでWAVファイルが再生できます。テスト用の音声を再生してみましょう。
$ aplay /usr/share/sounds/alsa/Front_Center.wav
「Front, Center」という声が聞こえると思います。 他に、好きなWAVファイルを入れて再生もできます。
MP3ファイルを再生する
MP3ファイルを再生するには、オーディオプレーヤーソフトが必要です。 コマンドラインで使えるmpg123を使ってみましょう。
$ sudo apt install mpg123
これで、何か音楽ファイルをダウンロードして再生してみましょう。何でも良いです。
$ wget https://dl.espressif.com/dl/audio/gs-16b-2c-44100hz.mp3 $ mpg123 gs-16b-2c-44100hz.mp3
音楽が聞こえてくれば成功です。
さらに次のステップへ
Pythonから音を鳴らしたり、
日本語をしゃべらせることもできます。
これらを組み合わせれば、目覚まし時計を作ったり、ちょっとしたことを音声で知らせたりと様々な応用が広がりますね。
ぜひ皆様もいろんなところで活用してみてください☺️