M5StickCを使ってTeamsのミュートボタンをつくろう!


はじめに

在宅勤務が普通となった今、ビデオチャットは欠かせません。
みなさんは、ビデオチャット中にこんな経験はないでしょうか?

  • ビデオチャット中に家族から突然話しかけられる。
  • 家族(子供)が急に膝の上に登ってきてカメラの視界に入ってしまう。

筆者は上記の様な事がしばしばあります。
ミュートボタンやカメラのOn/Offボタンを押して事なきを得ていますが、焦っている状況だとマウスからの入力や、キーボードのショートカットでは押しそびれてしまう場合もあるかもしれません。物理ボタンに置き換えられれば、咄嗟の状況でもすぐにミュートのOn/Offを切り替えられそうです。
そこで、M5StickCの入門を兼ねて、筆者が現在使用しているMicrosoft Teamsの、物理ミュートボタンを作りたいと思います。

M5StickCとは?

ESP32を搭載した小型のM5Stackです。ポータブルで使いやすいオープンソースのIoT開発基板で、プロトタイプを素早く作ることができます。
https://www.switch-science.com/catalog/5517/ より引用

引用元のページを見ると、小さい筐体に沢山の機能が搭載されていることがわかります。ディスプレイやバッテリーも搭載されており、アイディア次第でいろいろなことができそうです。
今回はM5StickCをBLE接続のキーボードとして、ボタン(正面のM5と書いてある部分)を押した際に特定のキーを送信させます。

環境

  • Windows10
  • M5StickC

環境構築

各種インストール

M5Stackのチュートリアルより
https://docs.m5stack.com/#/ja/quick_start/m5stickc/m5stickc_quick_start_with_arduino_Windows
1. Arduino IDE
2. ESP32ボードマネージャ
3. M5StickCライブラリをインストールします。

※M5StickCの開発には統合開発環境のArduino IDEを使用します。Arduino IDEを使用すると、プログラムの開発、転送などが一元管理できます。
https://ja.wikipedia.org/wiki/Arduino#Arduino_IDE

インストール後、M5StickCをPCに接続します。

サンプルプログラム実行

Arduino IDEからサンプルプログラム(Arduinoでは「スケッチ」と呼ばれています)を実行してみましょう。
ツールバー > ファイル > スケッチ例 > M5StickC > Game > Dices を選択してください。

新規ウィンドウが立ち上がるので、ツールバー > スケッチ > マイコンボードに書き込む をクリックすると、M5StickCに書き込まれます。(5分ほどかかります)
書き込みが完了すると、画像の様にさいころゲームが起動します。他にもサンプルスケッチは沢山あるので、実行してみると楽しいです。

実装

ライブラリの追加

ツールバー > ファイル > 新規ファイル で、プログラムを作成していきます。
M5StackCをBLEキーボードとして振舞えるよう、簡単に実装できるライブラリが公開されているので、今回はこちらを使用します。ZIP形式でダウンロードします。
https://github.com/T-vK/ESP32-BLE-Keyboard

ツールバー > スケッチ > ライブラリのインクルード > .ZIP形式のライブラリをインストール で、ライブラリを取り込みます。

プログラム

ライブラリのサンプルを参照しながら実装していきます。今回はミュートボタンに加え、ビデオ切り替えも追加してみました。btnAが正面にあるボタン、btnBが側面のボタンです。
それぞれのボタン押下時に、ショートカットキーを送信しています。


#include <M5StickC.h>
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

void showstate(char *txt) {
    M5.Lcd.setCursor(0, 120);
    M5.Lcd.fillRect(0, 120, 320, 20, BLACK);
    M5.Lcd.printf(txt);
}

void setup() {
  M5.begin();
  bleKeyboard.begin();
}

void loop() {
  M5.update();

  if (bleKeyboard.isConnected()) {
    // ミュートの切り替え
    if (M5.BtnA.wasPressed() ) {
      showstate("Sending Mute key...");
      bleKeyboard.press(KEY_LEFT_CTRL);
      bleKeyboard.press(KEY_LEFT_SHIFT);
      bleKeyboard.print("m");
      delay(100);
      bleKeyboard.releaseAll();
    }
    // ビデオの切り替え
    if (M5.BtnB.wasPressed() ) {
      showstate("Sending Video key...");
      bleKeyboard.press(KEY_LEFT_CTRL);
      bleKeyboard.press(KEY_LEFT_SHIFT);
      bleKeyboard.print("o");
      delay(100);
      bleKeyboard.releaseAll();
    }
  }
  // ボタンのチャタリング(物理ノイズ)防止の為、Waitする
  delay(100);
  showstate("");
}

実行

ツールバー > スケッチ > マイコンボードに書き込む をクリックすると、M5StickCに書き込みます。
書き込み後、PCとBLE接続します。
Windowsの設定 > デバイス > Bluetoothとその他デバイスより「ESP32 BLE Keyboard」を追加します。

ボタン押下後

実行の様子

以上でM5StickCを使ってMicrosoft Teamsのミュートボタンを作成できました!
M5StickCは内蔵の機能だけでなく、拡張キットも豊富なので、もっともっと遊んでみようと思います。