M5Stackでできること 〜内蔵スピーカーで音を鳴らす

M5Stackに関する書籍やネット上の記事を読んでいると、M5Stackの内蔵スピーカーの音量を調整する「M5.Speaker.setVolume()」関数では、「M5.Speaker.tone()」関数などの音量を変えることはできないと書かれています。

しかし、2020年4月にリリースされたM5StackライブラリのV0.3.0以降では、「M5.Speaker.tone()」関数の音量を、「M5.Speaker.setVolume()」関数で変えることができるようです。

今回は、「M5.Speaker.tone()」関数を使って音を鳴らしてみようと思います。


まずは、「M5.Speaker.setVolume()」関数で、実際に音量が変わることを確認します。

#include <M5Stack.h>

int volume = 1;

void playTone() {
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.print("Volume : ");
  M5.Lcd.println(volume);
  M5.Speaker.setVolume(volume);
  M5.Speaker.tone(440, 200);
}

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(3);
}

void loop() {
  M5.update();
  if(M5.BtnA.wasPressed()) {
    volume--;
    playTone();
  }
  if(M5.BtnC.wasPressed()) {
    volume++;
    playTone();
  }
}

Aボタンを押すと、音量を 1 だけ小さくして、「プッ」と音を鳴らします。
Cボタンを押すと、音量を 1 だけ大きくして、「プッ」と音を鳴らします。

音量が 0 では音が鳴らず、音量を大きくしていくと、だんだん音が大きくなります。
ただし、音量を 11 にすると、音が鳴らなくなります。
つまり、「M5.Speaker.setVolume()」関数では、音量を 0 〜 10 の間で調整できることになります(数値が大きいほど音量も大きい)。

次に、複数のトーン音を、順番に鳴らしてみます。

#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(3);
  M5.Speaker.setVolume(3);
}

void loop() {
  M5.update();
  if(M5.BtnA.wasPressed()) {
    M5.Speaker.tone(659, 200);
    delay(200);
    M5.Speaker.tone(523, 200);
  }
  if(M5.BtnC.wasPressed()) {
    M5.Speaker.tone(440, 100);
    delay(100);
    M5.Speaker.mute();
    delay(100);
    M5.Speaker.tone(440, 100);
    delay(100);
    M5.Speaker.mute();
    delay(100);
    M5.Speaker.tone(440, 100);
  }
}

Aボタンを押すと「ピンポン」と鳴ります。何らかの処理がOKとなったときに鳴らす音をイメージしています。
Cボタンを押すと「プップップ」と鳴ります。何らかの処理がNGとなったときに鳴らす音をイメージしています。

M5Stackのスピーカーは扱いにくいという印象があり、これまであまり活用してきませんでしたが、このぐらいお気軽に使えるのであれば、色々と使い道が広がりそうです。

なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。