MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Wio Terminal でつくる Microsoft Teams の ミーティングコントローラー

こんなものを作りました。

Teams のミーティング中にマウス操作せずにショートカットを実行できるような、左手デバイスです。

ここで使っているのは Wio Terminal というマイクロコントローラ (IoTデバイス) です。

画面がついてて、4方向+押し込みのスティックと、3つのボタンがあり、さらにベーシックなセンサー類もついています。

セットアップに関しては Seeedさんのウィキ を参考にしました。

設計図的なもの

できることを考えずに、まずは設定したいものを考えてみました。

f:id:mofumofu_dance:20210422094801p:plain
ボタンと操作のアサイン

結果的には大成功。ということでスケッチを残しておきます。

※ボリューム上げ下げとかで少し躓きました。

書いたもの

スケッチは以下の通りです。

#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の場合)

f:id:mofumofu_dance:20210422101352p:plain
ZIP形式のライブラリをインストールする

github.com

これで各種メディアキーも利用可能になります。

感想

マイクのミュートとボリューム操作が一番使えますね。ミーティングでも使いましたが、狭いスペースでやるときにはマウス操作するの面倒なので、こういうデバイスがあると便利です。

高いのは買えないし・・。

今回はミーティング用コントローラを作りましたが、他にもHTTP通信もできるようなので、複数個のフロー実行ボタンにも使えそう。

しばらくはこれで遊べそうです!おすすめ!