Help us understand the problem. What is going on with this article?

ESP-WROOM-32(ESP32)でWebラジオ

はじめに

  • 昨年、ESP32を購入したての時にESP32 Web Radioを作って毎日使っている。
  • AM/FMと違ってノイズが無く、PCやスマホが無くても手軽に使えてとても良い。
  • 当時、Qiitaを初めてなかったので記事が無いため、2019年度で最新環境で作り直して見た。

IMG_2496D.jpg

用意するもの

  • ESP32
  • I2S ハードウェアDACボード
  • アンプとスピーカ
  • (5V電源)

ESP32-WROOM-32 開発ボード

  • 前回は秋月で購入できるもので組んだので、今回は別バージョン2個セットで1600円の新型を新たに購入。
    • 今回使うのは右のボード。中国語が書いてあって渋い。
    • 真ん中は昨年秋月で購入したもの。左はESP8266。
    • それぞれピンの位置や幅が異なるので、販売元の資料を見てピン配置を確認して対応すればOK。
    • (最近買った右のボードにはアンプに食わせる5V出力が無かったりする。。。)

IMG_2503D.jpg

I2S ハードウェアDACボード

IMG_2500D.jpg

アンプとスピーカ

  • 今回、アンプは上の自作した奴を使用したけど、手前の安いアンプでも何でも良い。
  • 右の方がボリュームも付いてて使いやすいかも。

IMG_2505D.jpg

ハードウェアの接続

  • 今回購入したESP32開発ボードには5V出力が無かったので、電源を別途確保する。
    • (秋月で買えるESP32開発ボードは5V出力があるため、DACボードの電源はそこから取れる。)
ESP32 I2S DACボード 5V電源
GPIO 22 DATA
GPIO 25 LRCK
GPIO 26 BCLK
MCLK GND
GND GND GND
VCC 5V OUT
  • 今回は実験なのでスピーカはL側だけ接続。
    • (こっちも、ESP32開発ボードに5V出力があれば、アンプの電源はそこから取れる。)
I2S DACボード 5V電源 アンプ スピーカ
L OUT R IN
R OUT L IN
L + +
L - -
GND GND GND
VCC 5V OUT VCC

ソフトウェア環境構築

  • Espressif の資料「Get Started」に沿って環境を構築する。
  • ざっくりこんな感じの手順。
    1. ToolChainのセットアップ
    2. GitHubからESP-IDFを入手
    3. プロジェクトのコンフィグレーションをする
    4. プロジェクトのコンパイル&リンク
    5. ESP32にプロジェクトをアップロード(Flash)
    6. アプリの実行(モニタリング、デバッグ)

toolchainのセットアップ

> mkdir -p ~/esp
> cd ~/esp
> tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
> export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH

ESP-IDF のセットアップ

  • GitHubからESP-IDFをゲットし、パスを張る。
> pwd
/Users/nabeshin/esp
> git clone https://github.com/espressif/esp-idf.git
> cd esp-idf/
> git submodule update --init --recursive
> ./tools/set-submodules-to-github.sh
> export IDF_PATH=/Users/nabeshin/esp/esp-idf
  • ファームウェアの書込み等に使用するPythonパッケージを入手。
> python -m pip install --user -r $IDF_PATH/requirements.txt

ESP32_MP3_Decoder

GitHubからコードを入手

> pwd
/Users/nabeshin/esp
> git clone https://github.com/MrBuddyCasino/ESP32_MP3_Decoder.git
> cd ESP32_MP3_Decoder/
> git submodule init && git submodule update

ESP32_MP3_Decoderプロジェクトのコンフィグレーション

> pwd
/Users/nabeshin/esp/ESP32_MP3_Decoder
> make menuconfig
  • 上記コマンドを打つと以下のコンフィグレーション画面が出てくる。

スクリーンショット 2019-12-06 20.55.36.png

ここで以下の設定を編集。

  • Serial flasher config
    • ここは自分の環境に合わせる。いつもArduino IDEで接続する時のポートを指定する。
    • 自分の場合、/dev/cu.SLAB_USBtoUART に変更
    • 後段の make flash が失敗する場合、大抵この設定が間違ってる。

スクリーンショット 2019-12-06 21.44.54.png

  • Web Radio / Bluetooth Speaker
    • wifi configrations: 自分の環境のSSID/Passwordを入力
    • audio output: I2S DACボードを使うのでそのまま(Generic I2S)

スクリーンショット 2019-12-06 21.01.01.png

Webラジオ局のリストファイルを編集

  • /main/playlist.pls
    • Webラジオ局のリストファイルを編集したい場合はこれを編集。とりあえずそのまま。
    • お気に入りのWebラジオ局のストリーミングURLは自力で特定する必要がある。
    • (どっかにまとまった情報がないかしら・・・)

プロジェクトのコンパイル&リンク

  • コンパイル&ビルド
> git submodule init && git submodule update
> make

ESP32にプロジェクトをアップロード(Flash)

  • ESP32 への書き込み
> make flash

ESP32を書込みモードにする

App "mp3_decoder" version: 9f3e28f
Flashing binaries to serial port /dev/cu.SLAB_USBtoUART (app at offset 0x10000)...
esptool.py v2.9-dev
Serial port /dev/cu.SLAB_USBtoUART
Connecting........_____....._____....._____....._____.....___
  • 上記表示から先に進まずにタイムアウトする場合、ESP32側のボタンを押して書き込みモードにさせる必要がある。
    • BOOT ボタンを押しっぱなしにした状態で、EN ボタンを1回押す。

アプリの実行(モニタリング、デバッグ)

  • シリアルモニターの立ち上げ
    • make monitor でESP-IDFのコンソールモニタを起動する。
    • 終了する場合は、 ctrl + ] 。
> make monitor

....(省略)

MONITOR
--- idf_monitor on /dev/cu.SLAB_USBtoUART 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
  • Wifiに繋がり、うまくストリーミングを受信出来るとこんなログが出続ける。
I (25208) audio_player: Buffer fill 94%, 30230 bytes
I (26148) audio_player: Buffer fill 97%, 31257 bytes
I (27238) audio_player: Buffer fill 92%, 29728 bytes
I (28188) audio_player: Buffer fill 96%, 30786 bytes
I (29128) audio_player: Buffer fill 99%, 31815 bytes
I (30218) audio_player: Buffer fill 94%, 30360 bytes
I (31198) audio_player: Buffer fill 97%, 31283 bytes
I (32258) audio_player: Buffer fill 93%, 29798 bytes
I (33198) audio_player: Buffer fill 96%, 30879 bytes
I (34148) audio_player: Buffer fill 99%, 31914 bytes
I (35238) audio_player: Buffer fill 94%, 30392 bytes
I (36178) audio_player: Buffer fill 98%, 31472 bytes
I (37278) audio_player: Buffer fill 93%, 30046 bytes

失敗例

  • esptools(pythonパッケージ)がインストールできてない。
iMac-nabeshin:ESP32_MP3_Decoder nabeshin$ make menuconfig
mconf-idf is not required on this platform
mconf-idf is not required on this platform
The following Python requirements are not satisfied:
setuptools>=21
click>=5.0
future>=0.15.2
cryptography>=2.1.4
pyparsing>=2.0.3,<2.4.0
pyelftools>=0.22
esp-windows-curses; sys_platform == 'win32'
Please follow the instructions found in the "Set up the tools" section of ESP-IDF Getting Started Guide
  • Wifi のパスワードを間違えた
I (910) wifi: received wifi event 2
I (910) wifi: connected successfully
I (1870) wifi: new:<8,0>, old:<1,0>, ap:<255,255>, sta:<8,0>, prof:1
I (1880) wifi: state: init -> auth (b0)
I (1890) wifi: state: auth -> assoc (0)
I (1910) wifi: state: assoc -> run (10)
I (5000) wifi: state: run -> init (fc0)
I (5000) wifi: new:<8,0>, old:<8,0>, ap:<255,255>, sta:<8,0>, prof:1
I (5000) wifi: new:<8,0>, old:<8,0>, ap:<255,255>, sta:<8,0>, prof:1
I (5010) wifi: received wifi event 5
I (7060) wifi: received wifi event 5
I (7190) wifi: new:<8,0>, old:<8,0>, ap:<255,255>, sta:<8,0>, prof:1
I (7190) wifi: state: init -> auth (b0)
I (7200) wifi: state: auth -> assoc (0)
I (7220) wifi: state: assoc -> run (10)
I (10320) wifi: state: run -> init (fc0)
I (10320) wifi: new:<8,0>, old:<8,0>, ap:<255,255>, sta:<8,0>, prof:1
I (10320) wifi: new:<8,0>, old:<8,0>, ap:<255,255>, sta:<8,0>, prof:1
I (10320) wifi: received wifi event 5
I (12380) wifi: received wifi event 5

今後やりたい事

  • 見た目、まんま試作品なので、基板に実装したり、ボリュームを付けたり、ラジオ局を液晶に表示して完成度を高めたい。
  • Bluetoothスピーカモードにもなるようなので、試したい。
  • これまでハードウェアDACしか成功した事がないが、ソフトウェアDACができるなら試したい。
    • 音質が下がるなら却下だが・・・
  • 秋葉原で良さげなスピーカをゲットしたので、これで組んでみる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away