M5StickCでBluetooth keyboardを実装してプレゼン用リモコンを作る

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

M5StickCをBluetooth keyboardにして、パソコンのパワーポイントの操作をするリモコンを作ってみました。

利用ライブラリ

上記のライブラリを利用させていただきました。Arduino IDEからは入れることができないので、手動で追加する必要があります。

スケッチ例 [GitHub]

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

BleKeyboard bleKeyboard("M5StickC BLE Presenter");

// バッテリー更新用
unsigned long nextVbatCheck = 0;

// タイマー用
unsigned long startTimer = 0;

// バッテリー残量取得
int getVlevel() {
  float vbat = M5.Axp.GetBatVoltage();
  int vlevel = ( vbat - 3.2 ) / 0.8 * 100;
  if ( vlevel < 0 ) {
    vlevel = 0;
  }
  if ( 100 < vlevel ) {
    vlevel = 100;
  }

  return vlevel;
}

void setup() {
  M5.begin();
  M5.Axp.ScreenBreath(9);
  setCpuFrequencyMhz(80);
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(0, 16);
  M5.Lcd.println("BLE Presenter");
  M5.Lcd.println(" BtnA :Next");
  M5.Lcd.println(" BtnB :Prev");
  M5.Lcd.println(" BtnP :Reset");

  // 起動時にしかバッテリー残量は設定できない
  bleKeyboard.setBatteryLevel(getVlevel());
  bleKeyboard.begin();
}

void loop() {
  // ボタン状態更新
  M5.update();

  // キー操作
  if (bleKeyboard.isConnected()) {
    if ( M5.BtnA.wasPressed() ) {
      // ホームボタンでスライドを進める
      bleKeyboard.write(KEY_RIGHT_ARROW);
    }
    if ( M5.BtnB.wasPressed() ) {
      // 右ボタンでスライドを戻す
      bleKeyboard.write(KEY_LEFT_ARROW);
    }
    if ( M5.Axp.GetBtnPress() != 0 ) {
      // 電源ボタンでタイマーリセット
      startTimer = millis();
    }
  } else {
    // 接続していない場合にはタイマーを進めない
    startTimer = millis();
  }

  // バッテリー残量更新(1分毎)
  if (nextVbatCheck < millis()) {
    M5.Lcd.setCursor(112, 0);
    M5.Lcd.printf("%3d%%", getVlevel());

    nextVbatCheck = millis() + 60000;
  }

  // タイマー表示
  int min = ( millis() - startTimer ) / 1000 / 60;
  int sec = ( millis() - startTimer ) / 1000 % 60;
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.printf("%5d:%02d", min, sec);

  // Wait
  delay(100);
}

行数は少ないので、理解しやすいと思います。

操作としてはHOMEボタン(BtnA)を押すと、キーボードの右矢印キーを送信。右ボタン(BtnB)を押すと、キーボードの左矢印キーを送信しています。

また、電源ボタンを押すことで、タイマーのリセットをしています。あとは画面上にバッテリー残量が表示しているので、その処理になります。

実行画面

上記のような画面で、上真ん中に経過時間と右上にバッテリー残量が表示されています。

一時間以上は動くと思いますので、通常用途であれば問題ないと思います。

参考サイト

上記にサイトを参考にさせていただきました。

問題点

長い文章を送信すると安定していない気がします。

また、バッテリー残量が起動時にしか設定できないので、Windows側からみるとあまり意味がありません。

ただWindowsだと再接続しても、バッテリー残量が更新されなかったりするので、もともとあまり重要な数値じゃないのかもしれません。

iPhoneにペアリングしても、キーボードとして動いていましたが、バッテリー残量は反映されていませんでした。

あと、接続直後は初期化が終わっていないので、キーボードとして認識していません。カウンターが進んでいない場合には、まだキーボードとして認識していないので注意してください。

まとめ

ボタンの割当は好みがあるので、ロングプレスを組み合わせればもう少し違う操作感にできると思います。

プレゼン開始前に電源ボタンを押して、タイマーをリセットしてからプレゼンを行い、HOMEボタンでスライドを進めていくイメージで作っています。

M5StackユーザーミーティングのLTに申し込んだので、発表用に作ってみました。普段使うんだったらレーザーポインタ付きのリモコンの方がいいな。。。

この手のツールはSD Updaterとかと組み合わせて、必要に応じてロードしたほうがいいのですがバッテリーとか考えると、どうせみなさんM5StickCをたくさん持っているので、機能別に使い分けたほうがシンプルなのかもしれません、、、

コメント