こんなものを作りました。
Teams のミーティング中にマウス操作せずにショートカットを実行できるような、左手デバイスです。
Wio Terminalで作ったTeamsのMeeting Tool
— Hiro (@mofumofu_dance) April 21, 2021
スクリーンシェア
フルスクリーン切り替え
マイクオンオフ
スピーカー音量操作
になりました。便利 pic.twitter.com/lbZk7YXLWi
ここで使っているのは Wio Terminal というマイクロコントローラ (IoTデバイス) です。
画面がついてて、4方向+押し込みのスティックと、3つのボタンがあり、さらにベーシックなセンサー類もついています。
セットアップに関しては Seeedさんのウィキ を参考にしました。
設計図的なもの
できることを考えずに、まずは設定したいものを考えてみました。
結果的には大成功。ということでスケッチを残しておきます。
※ボリューム上げ下げとかで少し躓きました。
書いたもの
スケッチは以下の通りです。
#include <HID-Project.h> #include <HID-Settings.h> #include "TFT_eSPI.h" //TFT LCD library //Initializations TFT_eSPI tft; //initialize TFT LCD TFT_eSprite spr = TFT_eSprite(&tft); //initialize buffer void setup() { //set button and switch pins as inputs pinMode(WIO_KEY_A, INPUT); pinMode(WIO_KEY_B, INPUT); pinMode(WIO_KEY_C, INPUT); pinMode(WIO_5S_UP, INPUT); pinMode(WIO_5S_DOWN, INPUT); pinMode(WIO_5S_PRESS, INPUT); Keyboard.begin(); //start keyboard communication Consumer.begin(); tft.begin(); //start TFT LCD tft.setRotation(1); //set TFT LCD rotation } void loop() { //Drawing UI on TFT LCD spr.createSprite(TFT_HEIGHT,TFT_WIDTH); //create buffer spr.fillSprite(TFT_WHITE); //set background color //Draw header title spr.fillRect(0,0,320,50,TFT_PURPLE); //draw rectangle with fill color spr.setTextSize(2); //set text size spr.setTextColor(TFT_WHITE); //set text color spr.drawString("Teams Meeting Controls",15,18); //draw a text string //draw shapes spr.drawCircle(60,150,40,TFT_DARKGREEN); //draw circle with border spr.drawCircle(160,150,40,TFT_RED); spr.drawCircle(260,150,40,TFT_PURPLE); //draw text spr.setTextSize(2); spr.setTextColor(TFT_BLACK); spr.drawString("SHARE",33,145); spr.drawString("FULL",140,145); spr.drawString("MIC",245,145); spr.pushSprite(0,0); //push to LCD //mute/unmute sound if (digitalRead(WIO_5S_PRESS) == LOW) { //detect button press Consumer.write(MEDIA_VOLUME_MUTE); delay(200); Keyboard.releaseAll(); } //volume down if (digitalRead(WIO_5S_UP) == LOW) { //detect button press Consumer.write(MEDIA_VOLUME_DOWN); delay(200); Keyboard.releaseAll(); } //volume up if (digitalRead(WIO_5S_DOWN) == LOW) { //detect button press Consumer.write(MEDIA_VOLUME_UP); delay(200); Keyboard.releaseAll(); } //screen share if (digitalRead(WIO_KEY_A) == LOW) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('e'); //single key is pressed (character) spr.createSprite(TFT_HEIGHT,TFT_WIDTH); spr.fillCircle(60,150,40,TFT_RED); spr.setTextColor(TFT_WHITE); spr.drawString("SHARE",33,145); spr.pushSprite(0,0); delay(200); Keyboard.releaseAll(); } //toggle full screen if (digitalRead(WIO_KEY_B) == LOW) { Keyboard.write(KEY_F11); spr.createSprite(TFT_HEIGHT,TFT_WIDTH); spr.fillCircle(160,150,40,TFT_PURPLE); spr.setTextColor(TFT_WHITE); spr.drawString("FULL",140,145); spr.pushSprite(0,0); delay(200); } //toggle mic if (digitalRead(WIO_KEY_C) == LOW) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('m'); spr.createSprite(TFT_HEIGHT,TFT_WIDTH); spr.fillCircle(260,150,40,TFT_PURPLE); spr.setTextColor(TFT_WHITE); spr.drawString("MIC",245,145); spr.pushSprite(0,0); delay(200); Keyboard.releaseAll(); } }
躓いたところ
スピーカーボリュームを上げ下げって、キーボードだとFn+F11とかでできるんですが、Fnを押すための定数がKeyboardライブラリに見つからなくてですね。。
他のショートカット系は、全部キーボード操作をそのまま書くだけだったので簡単だったんですが、ここだけ時間がかかりました。
結局はこの"HID-Project"というライブラリに行き当たったので、最初に使ったKeyboardライブラリを外して、HID-Projectライブラリを導入しました。
USB HID Keyboard scan codes · GitHub
操作としては GithubからZipをダウンロードして、そのままZipを [スケッチ] > [ライブラリをインクルード] > [.ZIP形式のライブラリをインストール] とするだけです。 (Arduino IDEの場合)
これで各種メディアキーも利用可能になります。
感想
マイクのミュートとボリューム操作が一番使えますね。ミーティングでも使いましたが、狭いスペースでやるときにはマウス操作するの面倒なので、こういうデバイスがあると便利です。
高いのは買えないし・・。
今回はミーティング用コントローラを作りましたが、他にもHTTP通信もできるようなので、複数個のフロー実行ボタンにも使えそう。
しばらくはこれで遊べそうです!おすすめ!