あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

CircuitPython自作キーでPCのスリープの時にスクリプトがコケてしまうやつの対処

MacにTinyPicoKeyを繋ぎっぱなしにしていたら、スリープあけに使えなくなる現象が起きて、しばらく不便していました。

TinyPicoTrioもできたしと重い腰をあげて調べてみたらなんのことはなく、キーボード(あるいはマウス)を初期化する時に、初期化に成功するまで再試行してやればいいだけでした。

import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.mouse import Mouse

keyboard = 0
while not keyboard:
    try:
        keyboard = Keyboard(usb_hid.devices)
    except:
        pass
    sleep(1)

たぶん、スリープ中か復帰前後のどこかで、デバイスとしては切断しているけれど、単に電源が供給されるタイミングがあるのかもしれません。まあ、このくらいのループで解決するなら良かった。

逆に、初期化に失敗したら再試行せずに、デバイスとしてじゃなくても遊べるモードみたいなのもあったら楽しいかなーと思って、カーソルがランダム移動するだけの拙作クソアプリことうろうろマウスのCircuitPython+Tiny2040版でやってみました。

github.com

バイスとして認識したときは、ボタンを押すとPC上のマウスカーソルがうろつきながら、Tiny2040のLEDもRGB適当に光るのですが、単に電源だけ供給したときでもLEDが光るやつだけはできるようになりました。これで、外でモバイルバッテリーとかにつないで無駄にビカビカ光らして遊べるようになりましたね。

social.mikutter.hachune.net

そんなことするか???