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

M5Stack Beep Arduino LibraryArduino IDE

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

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

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

 今回作成したビープ音

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

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

ダウンロードはこちら↓
GitHubhttps://github.com/haratta27/M5Stack_SimpleBeep
もしくは
Arduino IDE のライブラリマネージャにて “M5Stack_SimpleBeep” で検索。

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

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

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

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

M5Stackのスピーカー回路

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

Fig. スピーカー接続図 (M5Stack Basic 回路図 から引用)

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

詳しくはこちらの記事が参考になりました。
参考< https://www.mgo-tec.com/blog-entry-beep-sound-speaker-m5stack.html > M5Stackの内蔵スピーカーからBeep音を出す実験

ビープ関数の使い方

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

Fig. Beep関数の使い方

ビープ関数の出力波形と設定項目

ビープ関数の出力波形は下図の通りになります。
beep関数の引数(設定項目)には、音量vol、発振周波数freq[Hz]、ビープ時間duration[ms] が設定できます。

Fig. Beep関数の生成する出力波形

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

サンプルスケッチ

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

gist4b5f6ec5f4f0153da2011de417cc22ef

まとめ

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

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

コメント

タイトルとURLをコピーしました