chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

CircuitPythonでTeams会議Muteボタンを作る(改)

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