t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Raspberry Pi Picoでマイクラ作業用にマウス・キーボードマクロ作成

久々に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より安いのに高性能。唯一ネックだった情報量の問題が解消されつつあるなら使わない手はない。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。