ラベル MAX98357A の投稿を表示しています。 すべての投稿を表示
ラベル MAX98357A の投稿を表示しています。 すべての投稿を表示

2017年9月1日金曜日

ESP32でI2Sから音を出す

Kickstarterプロジェクトで使ったI2Sに関するメモ

■内蔵DAC, PDM, 外付けI2S■

esp-idfのexample/peripheral/i2sにサンプル入ってますけど、これ動きました?

DAC, PDM, I2S、いずれも苦労しました。DACとI2Sは符号付き整数、PDMだけ符号なし整数でデータの塊を作ってi2s_write_bytesに渡しますが、i2s_driver_installへのパラメータが試行錯誤の山でした。

PDMはやたら音が歪んでしまい、パラメータをいじりまくったのですが改善しないのでギブアップしました。正弦波を出して第二高周波が-10dBも出ているのは辛いです。DACは素直に入れた通りの波形が出てきます(あたりまえですが)。

で、I2Sに関しては、MAX98357Aを接続し、最終的に以下のコードで動きました。なお、MAX98357Aはモノラルなので、データは符号付き16ビット整数をみっちり詰め込んで渡します。




■(追記)続編です■

再生の途中で中断したい場合の処理を追加しました。

2017年5月4日木曜日

ESP32とI2SアンプをつないでWebRadioを受信


■ESP8266のWebRadio未だ成功せず■

以前ESP-WROOM-02で試した時はうんともすんともだったのですが、今回ESP32-DevKitC ESP-WROOM-32開発ボードMAX98357A(I2S 3W D級アンプ)という組み合わせであっさり成功しました。

■ESP32のI2Sはあっさり動いた■

接続はGPIO22とDIN、GPIO25とLRC、GPIO26とBCLK、あとは3v3とVin、Gnd-Gndを接続するだけです。このブレッドボードだと1列しか外に出ないので、IO22, IO25, IO26はモジュール下から直接硬いジャンパーワイヤーで接続しました。赤黒2本のジャンパーはアンプの出力をヘッドホンジャックにつなぐためのものです。

ESP-IDFは事前にインストール済(ESP32開発ボードをMacで)だったので、上記をzipでダウンロードして解凍、一番上のディレクトリでmake menuconfig、Serial flasher configでシリアル関連の情報(/dev/tty.SLAB_USBtoUART、速度921600、detect flash size when flashing bootloader, make monitor boud rateを921600)、Wifi ConfigurationでSSIDとPassword、AudioでGeneric I2Sを選択し、保存します。

make flashであとはコンパイル&ビルド&書き込み。プリセットされた局から明るい音楽が流れてきます…と思ったらバッファーアンダーランでガチャガチャになりますw 

main/include/playconfig.hに局がいくつか設定されていますが、#define PLAY_URL "http://ice1.somafm.com/illstreet-128-mp3"は’それよりだいぶ聞きやすいようです。

いやー。MAX98357AはちっこいのにI2S入力でD級3W出力。すげー音量ですし鳴らしっぱなしでも温まりもしません。最近のD級アンプはすごいなや。

とりあえずESP32 + I2Sが動作するということは確認できたので、Kickstarterのお手伝いプロジェクトは次に進みます;-)