久々にMinecraftで遊んでいるんだけど、土台敷き作業が結構面倒くさい。
操作としてはShift+S+D+マウス右を押しっぱなしにするだけなんだけど、気を抜くとシフトが外れて落下するため自動化することにした。
ソフトウェアマクロという手もあるけど途中で手動ホイール操作を加えたり、頻繁にオフにしてアイテムをインベントリにセットしなおしたりするので物理スイッチでオフ・オンできるハードウェアマクロの方が使い勝手が良い。
今回選択したのは買ったまま1年以上眠っていたラズパイPico。
最初はいつもどおりArduino Leonardoで作るつもりだったんだけど行方不明だったので慣れないラズパイPicoを試してみることにした。
構成はシンプルにGP15ピンとGNDをスイッチを繋げただけ。
スイッチは以前作った実験用のトグルスイッチ。シンプルで使いやすい。
thom.hateblo.jp
調べてみるとラズパイPicoでキーボードマウス入力をシミュレートするには標準のMicro PythonではなくてAdafruitから出てるCircuit Pythonを使うらしい。
コードはこんな感じ。
import usb_hid from adafruit_hid.mouse import Mouse from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode import digitalio from board import * import time mouse = Mouse(usb_hid.devices) kbd = Keyboard(usb_hid.devices) LED = digitalio.DigitalInOut(GP25) LED.direction = digitalio.Direction.OUTPUT SW = digitalio.DigitalInOut(GP15) SW.direction = digitalio.Direction.INPUT SW.pull = digitalio.Pull.UP mode = 2 while True: if SW.value == False: LED.value = True if mode == 1: mouse.click(Mouse.LEFT_BUTTON) else: kbd.press(Keycode.SHIFT) kbd.press(Keycode.S) kbd.press(Keycode.D) time.sleep(3) mouse.press(Mouse.RIGHT_BUTTON) else: if mode == 1: pass else: LED.value = False mouse.release(Mouse.RIGHT_BUTTON) kbd.release(Keycode.S) kbd.release(Keycode.D) time.sleep(1) kbd.release(Keycode.SHIFT) time.sleep(1)
ちなみにmodeが1のときはゾンビピグリンを殴るだけのマクロなので今回は関係ない。
マクロ切替はハードコーディングによる変数値の変更で行うという雑な仕様だけど目的は果たしている。
参考にしたのはこちらの記事。
hf-labo.net
1点だけ私の環境が記事と違ったのはThonny(Pythonエディタ)のポート選択でPicoが表示されず、CircuitPython CDC controlを選択したこと。
これはひょっとするとMicro PythonのUF2ファイルを導入せずに最初からCircuit Pythonを入れたためかもしれない。
おわりに
PCやマイクラに詳しい方からするとこんな単純なことのためにわざわざマイコンを持ち出して自前でHIDデバイスを作るのは大げさだと思うかもしれない。スニーク固定はゲーム機能としてあるし、そもそもロジクールのG304マウスを使っているのでG-HUBでマクロ化するという手もあった。
そんなことしなくてももっと楽にできるのにと思ってモヤモヤした方もいると思うけど、私にとっては今回の一連の作業を含めて道楽の一部として楽しんでいるので大目に見ていただきたい。
それに今回ようやく眠っていたラズパイPicoの活用先が見つかって良かった。
とりあえず買ってみたもののしばらく使っていなかった理由としてはなんだかんだ慣れ親しんだArduinoを手に取ってしまうということが大きい。
Pythonの方がCよりも文法的にスッキリしてて初心者に優しいからPicoの方が初心者向けだという意見も目にするんだけど、発売日の差でネットの情報量では圧倒的にArduinoに軍配が上がるためまだまだArduinoの方が調べやすい。
ただ実際に使ってみたところ欲しい情報や参考にするコードはすぐに入手できたし、そろそろPicoに関してもネットの情報が成熟してきたなと感じる。
次から何かつくるときはPicoを第一候補として選定しても良いかもしれない。
なによりArduinoより安いのに高性能。唯一ネックだった情報量の問題が解消されつつあるなら使わない手はない。
以上