IdeaPad Duet ChromebookのダミーポインティングデバイスとしてM5StickCを使う

ども、takiponeです。Lenovoの2in1タイプChromebook、IdeaPad Duetはポインティングデバイス接続時にノートPCモードになります。外付けキーボードのみでノートPCモードを使うためにロジクールのSpotlight Presentation Remoteをペアリングさせていたのですが、Spotlightがスリープするたびにワンクリックして起こすのが面倒になったため、別のデバイスを探すことにしました。本ブログではM5StickCをダミーのBluetooth(BLE: Bluetooth Low Energy)マウスとしてIdeaPad Duetに接続する様子をご紹介します。

M5StickCとは

M5StickCはM5Stack社が販売するプロトタイピングデバイスです。ESP32マイコンを内蔵しBLEペリフェラル機能を持つため、今回はこれをBLEマウスとして利用します。マウスの機能自体はユーザーが自分でプログラムを開発する必要がありますが、C++ライクなArduino IDE対応でライブラリやサンプルが広く公開されているため、それらのつぎはぎで簡単に作成することができます。

設定手順

今回は以下のライブラリをインクルードしてスケッチ(Arduinoのプログラムファイルを指す)を作成しました。

スケッチを以下に示します。

#include <M5StickC.h>
#include <BleMouse.h>

BleMouse bleMouse("Dummy Mouse", "Hoge", 100); // <----- *1

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  pinMode(M5_LED, OUTPUT);
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Axp.ScreenBreath(9);

  Wire.begin();
  bleMouse.begin();
}

void loop() {
  // define battery level
  // - above 4.0V : 100%
  // - 3.0V-> 4.0V : 0% -> 100% ( per 0.01V )
  float batteryVolt = M5.Axp.GetBatVoltage(); // <------ *2
  int batteryLevel = 0;
  if ( batteryVolt >= 4.0 ) {
     batteryLevel = 100;
  } else if ( batteryVolt < 3.0 ) {
     batteryLevel = 0;
  } else {
     batteryLevel = ( batteryVolt - 3 ) * 100;
  }
  bleMouse.setBatteryLevel(batteryLevel); // <---------- *3
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(10, 32, 2);
  M5.Lcd.print("Battery Level : ");
  M5.Lcd.print(batteryLevel);
  
  digitalWrite(M5_LED, LOW);
  delay(1000);
  digitalWrite(M5_LED, HIGH);
  delay(10 * 1000);
}

マウスなのでカーソルの移動やクリックイベント用の関数ももちろん用意されているのですが、今回はマウスとして認識されれば目的は達成するので、マウスに関する処理は特に書かずにバッテリー切れが検知できるようバッテリー残量のディスプレイ表示だけを実装しました。注釈部分についてコメントします。

  • *1 : IdeaPad Duetに表示されるデバイス名は "Dummy Mouse" の部分です。好きな名前にカスタマイズできます
  • *2 : バッテリー電圧取得の関数はインターネット上にいくつか見受けられるのですが、こちらの記事を参考に、新しそうなものを選びました。バッテリーレベルの条件式は適当です
  • *3 : 10秒間隔でバッテリーレベルを更新しているのですが、BLEプロファイルのNotifyの動作に問題があるようで、IdeaPad Duetの表示では接続時のバッテリーレベルから更新されません

このスケッチを書き込んで動作させるとこんな感じです。

この状態でIdeaPad DuetのBluetooth設定を開くと ペア設定されていないデバイスDummy Mouse が表示されるのでタップしペアリングします。

ペアリングできました!このタイミングでIdeaPad Duetの表示がノートPCモードに切り替わります。

まとめ

IdeaPad DuetをノートPCモードで使うために、M5StickCをマウスとして認識させる手順をご紹介しました。このブログの編集画面(ghost.org)がタブレットモードだと上手く表示されないので、ブログ執筆のためにノートPCモードが必須なのでした。これでバリバリブログ書くぞ!