Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@Nabeshin

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

はじめに

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

IMG_2878D.jpg

用意するもの

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

ESP32-WROOM-32 開発ボード

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

IMG_2503D.jpg

I2S ハードウェアDACボード

IMG_2500D.jpg

(追記)

  • 最近購入した左側の小さいDACボードでもいけました。Amazonで約800円。
  • こっちの方が小さくて良さげ。
  • 基板の左側のピンに接続するだけで使えます。
    • SCKはGNDに接続しておく必要があります。

IMG_3084D.jpg

アンプとスピーカ

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

IMG_2505D.jpg

ハードウェアの接続

IMG_2496D.jpg

  • 今回購入したESP32開発ボードには5V出力が無かったので、電源を別途確保する。
    • (秋月で買えるESP32開発ボードは5V出力があるため、DACボードの電源はそこから取れる。)
ESP32 I2S DACボード 5V電源
GPIO 22 DATA
GPIO 25 LRCK
GPIO 26 BICK
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
  • 接続例その2
    • アンプ付きのスピーカを持ってるなら、お手軽にこんな感じで接続してもOK。

IMG_3082D.jpg

ソフトウェア環境構築

  • 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

基板に実装してコンパクトにしてみる。

  • 見た目、まんま試作品なので、ESP32とアンプ回路を1つの基板に実装し、ボリュームを付けてみた。
  • DACボードにもピンヘッダのまま挿せるようにしたので配線もスッキリした。

IMG_2879D.jpg

  • これをダイソーで売ってる箱にスピーカの穴をくりぬいて作ったスピーカボックスに収納。
  • これで部屋の中、いつでも良い音でラジオが聞ける。

IMG_2880D.jpg

今後やりたい事

  • Bluetoothスピーカモードにもなるようなので、試したい。
  • これまでハードウェアDACしか成功した事がないが、ソフトウェアDACができるなら試したい。
    • 音質が下がるなら却下だが・・・
  • 秋葉原で良さげなスピーカをゲットしたので、これで組んでみる。

9
Help us understand the problem. What is going on with this article?
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
Nabeshin

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?