harattaMouseの小部屋

組み込みプログラミングが趣味な人のブログ

【M5Stack】ビープ音を鳴らすlibraryを作ってみた!

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

 M5Stackのスピーカーを利用して、ビープ音を作ってみました。案外webを探しても、 タイマーを使ったM5Stackのビープ音の参考記事がなく、今回素人ながらお手軽に使えるビープ関数を作りました。

概要としては、ESP32のタイマー割り込みを利用して ビープ音を生成します。サンプルコード(GitHub)を公開しますので、参考にしてみてください。

Arduino IDE のライブラリマネージャーにも登録されました!(M5Stack_SimpleBeep)

f:id:harattaMouse:20200810231025j:image

 今回作成したビープ音

今回作成したものはこちらになります。

今回は、音量、発振周波数、ビープ時間、が指定できるbeep関数を作成しました。

ダウンロードはこちら↓

Arduino IDE のライブラリマネージャ : "M5Stack_SimpleBeep" で検索.
GitHubhttps://github.com/haratta27/M5Stack_SimpleBeep

 

ESP32のタイマー割り込みについて

今回のビープ関数は、タイマー割り込みを利用します。ESP32のタイマーは4スレッドになりますので、他の処理でタイマーを使う場合は、リソース不足に気を付けましょう。

他の処理で タイマー割り込みを使う際は、同じスレッドを利用しないようにしてください。今回のソースコードでは スレッド0 を使用するように設定してあります。

参考< https://lang-ship.com/blog/work/esp32-timer/ > ESP32のタイマーについて

M5Stackのスピーカー回路

スピーカー回路を説明すると、ESP32のDAC端子がスピーカーアンプに入力されています。また、その入力はコンデンサの直列接続されているので、交流入力が適切だと思います。

f:id:harattaMouse:20200806210701j:image

ESP32のDAC分解能は8bitなので、256の半分 128を中心に振幅を決めれば音量を調節できます。

詳しくはこちらの記事が参考になりました。

参考< https://www.mgo-tec.com/blog-entry-beep-sound-speaker-m5stack.html > M5Stackの内蔵スピーカーからBeep音を出す実験

ビープ関数の使い方

使い方ですが、ビープ音を生成するためにinit関数を実行し、ビープ音を鳴らせたいタイミングでbeep関数を実行させるだけです。

f:id:harattaMouse:20200810112123j:image

ビープ関数の設定項目

beep関数の引数には、音量vol、発振周波数freq[Hz]、ビープ時間duration[ms] が設定できます。

f:id:harattaMouse:20200806203910j:image

音量 vol は 0~127 の範囲になります。目安は 2~8 ぐらいでしょうか? デフォルトで5と設定しています。大きくするとかなりの爆音になりますのでオススメはしません。

サンプルスケッチ

BeepSpeaker.ino

ボタンAを押すと"ド"、ボタンBを押すと"レ"、ボタンCを押すと"ミ"がビープします。なお、ボタン押しの有無はメインループで監視しています。

gist4b5f6ec5f4f0153da2011de417cc22ef

まとめ

ESP32のタイマー割り込みを利用して、 M5Stackでビープ音を鳴らしてみました。手軽に使えるように作ったつもりです。活用してもらえると嬉しいです。

※プログラム作成後に知りましたが、M5Stack Library のBeep関数でもv0.3.0以降のバージョンで音量調節ができるようです。