ArduinoでBLEアプリケーション(2)

144Labの入江田です。 今回はもうちょっと便利なものをBLEデバイスで作ってみます。

Google Meet 省エネミュートボタン

Google Meetは以下のショートカットキーでマイクミュートをON/OFFできます。

この操作だけができるキーボードデバイスArduinoのBLE機能を使って実装してみよう!

以下の実装でミュート操作キーボードとして動作させるBLE-HIDデバイスにできます。

#include <bluefruit.h>

#define button 28 // <- ターゲットに合わせてください。

BLEDis bledis;
BLEHidAdafruit blehid;

bool hasKeyPressed = false;

void callback() {
  uint32_t last = 0;
  hid_keyboard_report_t report;
  varclr(&report);

  // for Windows or Linux
  report.modifier = KEYBOARD_MODIFIER_LEFTCTRL;
  // for macOS
  report.modifier = KEYBOARD_MODIFIER_LEFTGUI;

  report.keycode[0] = HID_KEY_D;
  uint8_t key = digitalRead(button);
  Serial.print("button: ");
  Serial.println(key);
  if (key == 0 && millis() - last > 100) {
    last = millis();
    blehid.keyboardReport(&report);
    blehid.keyRelease();
  }
}

void setup() {
  pinMode(button, INPUT_PULLUP);

  Serial.begin(115200);

  Bluefruit.autoConnLed(false);
  Bluefruit.begin();
  Bluefruit.setTxPower(4);  // Check bluefruit.h for supported values
  Bluefruit.setName("BtnDevice");

  // Configure and Start Device Information Service
  bledis.setManufacturer("144Lab, Inc.");
  bledis.setModel("BT Btn");
  bledis.begin();

  blehid.begin();

  attachInterrupt(button, callback, ISR_DEFERRED | CHANGE);

  startAdv();
}

void startAdv(void) {
  // Advertising packet
  Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
  Bluefruit.Advertising.addTxPower();
  Bluefruit.Advertising.addAppearance(BLE_APPEARANCE_HID_KEYBOARD);

  // Include BLE HID service
  Bluefruit.Advertising.addService(blehid);

  // There is enough room for the dev name in the advertising packet
  Bluefruit.Advertising.addName();

  Bluefruit.Advertising.restartOnDisconnect(true);
  Bluefruit.Advertising.setInterval(32, 244);  // in unit of 0.625 ms
  Bluefruit.Advertising.setFastTimeout(30);    // number of seconds in fast mode
  Bluefruit.Advertising.start(0);  // 0 = Don't stop advertising after n seconds
}

void loop() { delay(20); }

BLEデバイスArduinoによる開発・ビルド・書き込みについてはこちらを参考に。

ペアリング(macOS例)

f:id:irieda:20201211142409p:plain

「キーボードの認識」ダイアログは閉じて構いません。

動作例

まとめ

  • ArduinoベースでHID on BLEデバイスは簡単に作れます
  • 頑張ればBluetoothのフルキーボードの実装も可能かも
  • もちろんマウスにもなれますよ!