背景: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ボタンの動作状態を表示するように改修したい。