背景:CircuitPythonでTeams会議Muteボタンを作ろうとしたがWindows10では安定動作できなかった
課題:安定動作できない原因を探り対策を講じて仕上げる
アプローチ:少しずつコードを加えておかしくなる所を探る
結論:Windowsでデバイス認識するのに時間がかかっている。この時間を待たずにPython側のコードの実行を進めてしまうと、HIDデバイスとして正しく認識できない。Windowsでのデバイス認識が終わるまでPython側コードはtime.sleep(N)で待たせておき、Windowsの認識が終わってからkeybordインスタンス等を作っていくようにする。貼り付けたサンプルソースで、boot loopで繰り返している所が、Python側の待ちループ
詳細:
現在安定動作しているキー入力のサンプルコード。ただし、TeamsアプリがないためMute操作の動作確認できず、今はキー[x] 押下を送るだけ
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) # sw = digitalio.DigitalInOut(board.D5) # sw.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.send(Keycode.X) led.value = True prev_value = 'pushed' time.sleep(0.1)
今後の取り組み:
キーコードをTeams会議Muteボタンのキーに置き換えて、正しく動作するか確認する。あと、デバッグ用に外付けLEDで動作状態を表示してるが、液晶パネルにMuteボタンの動作状態を表示するように改修したい。