LoginSignup
11
3

More than 3 years have passed since last update.

ESP-ADFを使って、計算した音声信号を外部I2S-DACへ出力する方法(1)

Last updated at Posted at 2020-03-25

はじめに

 先日、ESP-IDF(ESP32) v4 で外部I2S DACを使って正弦波を鳴らすという投稿をしました。この記事では、ESP-IDF(IoT Development Framework)を使ってESP32に外部接続したI2S-DACから正弦波を出力しました。しかし、より実用的に使う(例えばPCM音源を再生したり、合成等の信号処理をしたりする)ためには、要素機能毎にタスクを分割し、マルチタスクで同時実行したり、各タスク間で信号を受け渡したりする必要があります。

 通常、こういった機能は自前で実装するものかもしれませんが、ESP32の開発元であるEspressif社の提供しているESP-ADF(Audio Development Framework)というライブラリに、まさにこれらの機能が実装されていることが分かりましたので、これを活用することにしました。このESP-ADFは専用ボード(ESP32-LyraTなど)での使用を想定しているようですが、単体のESP32でも使用可能ですので、本投稿では前回同様にESP32と外部I2S-DACとスピーカを使用して、簡単な正弦波を出力してみます。

 公式サンプルとの違いは、出力する信号波形を自分で(sin関数を使って)計算している点です。公式のサンプルにはmp3やwavファイルを読み取って再生するものがありますが、信号波形を直接触ることはほぼしておらず、ドキュメントにもあまりその方法の説明がありません。そこで今回は、信号波形の生データを自分で生成してI2S出力に渡す処理を、分かりやすく説明できるようなプログラムを作成しました。

 今回の投稿では、まず動作させるまでを説明します。プログラムやライブラリ仕様の説明は、後日投稿します。

準備するもの

  • PC(筆者はMac)
  • ESP32開発ボード(NodeMCU, ESP-WROOM-32等)
  • MAX98357A I2S DACモジュール(Adafruit製や類似品)
  • スピーカユニット(使用するDACに適したもの。0.5~3W程度の小さいもの)

環境構築

ESP-ADFの導入

 公式サイト(Get Started)の説明通りにESP-IDFとESP-ADFを導入します。なお先日の投稿とはESP-IDFのバージョンが異なるため、注意が必要です(前回はv4でしたが、今回はv3.3.1を使います)。私はesp_v3とesp_v4の2つ似フォルダを分けて両立させています(環境変数も切り替えています)が、よく分からなければ既存のespフォルダを削除または退避して、改めて再導入すればOKです。

 新規導入する場合の手順は、以下のようになります。(macの場合)

# 事前に https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz を~/Downloadsへダウンロードしておく。
mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
git clone -b v3.3.1 --recursive https://github.com/espressif/esp-idf.git
git clone --recursive https://github.com/espressif/esp-adf.git

# pipでパッケージをインストールする。(pipが無ければ別途インストール必要)
# また、環境変数$IDF_PATHを設定する必要あり。
python -m pip install --user -r $IDF_PATH/requirements.txt

Githubからプログラムを入手(git clonoe)

 今回もgithubに一式を用意しましたので、git cloneでダウンロードするだけでOKです。

cd ~/esp
git clone https://github.com/moppii-hub/ESPADF_geneSig.git

回路の製作

 先日の投稿の回路と同じです。再掲します。

Wiring

とりあえず動作させる

 まず、make menuconfigを実行し、シリアルポートの設定をします。

cd ~/esp/ESPADF_geneSig/
make menuconfig

 設定方法は公式の説明の通りですが、menuconfigの画面が出たらSerial flasher config > Default serial port と選び、ポート名を入力し、save, exitします。なおポート名は、以下の方法で調べることができます。私の環境(mac)では、/dev/tty.SLAB_USBtoUARTです。

ls /dev/tty.*

 ポートの設定が完了したら、ESP32をPCへ接続し、プログラムを書き込みます。

make flash

 プログラムの書き込みが終わり、スピーカから正弦波が鳴れば成功です。

さいごに

 簡単ですが、今回はここまでとします。次回は、今回動作させたプログラムの説明と、ESP-ADFライブラリの使用方法の説明をします。

11
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3