結論:いろいろあったが、CircuitPythonでTeams会議用のMute On/Off SWを作ることができた。これでMute解除するつもりで退出してしまったり、マウスカーソル探してオロオロすることが減るはず。
外観は以下(Atom S3を利用)
ソースは以下(LEDはデバッグ用) USBライブラリが充実しているCircuitPythonを利用
import time import digitalio import board import usb_hid print("--------- start ---------") from adafruit_hid.keyboard import Keyboard from adafruit_hid.keyboard import Keycode button = digitalio.DigitalInOut(board.BTN) button.switch_to_input(pull=digitalio.Pull.UP) led = digitalio.DigitalInOut(board.D8) led.direction = digitalio.Direction.OUTPUT led_value = False led.value = led_value count = 30 print("--------- boot loop ---------") while True: print(f"count down...{count}") count -= 1 if count == 0: break led.value = led_value led_value = not led_value time.sleep(0.3) prev_value = 'pushed' print("--------- switch to KBD Mode ---------") print("trans to kbd mode") keyboard = Keyboard(usb_hid.devices) print("trans to kbd mode done") while True: if button.value: # open led_value = not led_value led.value = led_value prev_value = 'open' else: # pushed if prev_value == 'open': print("pushed") keyboard.press(Keycode.CONTROL, Keycode.SHIFT, Keycode.M) time.sleep(0.1) keyboard.release_all() led.value = True prev_value = 'pushed' time.sleep(0.1)
ポイントとしては、、(1)Windows(10)側の認識が遅いせいか、CircuitPython側で、早々に keyboard = Keyboard(usb_hid.devices) を実行するとデバイスの認識がおかしくなる。だから、time.sleepで10秒待たせている。
(2)TeamsのMute On/Offは、[Ctrl] + [Shift] + [M] なので、これらのキーを一度に押したのと同等になるキーイベントを発生させている。
■追記(2023/8/15)
実際にTeams会議で使ってみた。Teamsアプリの画面がアクティブ(一番上)になっている時は正しく動作するのだが、会議中に内職して別のアプリの画面がアクティブになっている状態でSW操作すると、キー入力イベントが、Teams会議のアプリには届かず、別アプリに飛んでしまう。この結果、何かわけのわからない操作をしている状況に陥る。(∴ 機能としてはかなり不足)