2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi PicoとMicroPythonで作るマウスジグラー

Posted at

マウスジグラー

パソコンを付けたまま放置すると、一定時間で画面消灯やスリープに入ることがあります。
この動作を防ぐためにマウスを操作し、わずかにマウスポインタを動かすことを繰り返せばよいのですが、ずっと操作しづつけるのは大変です。
そこで、マウスジグラーという、マウスポインタを動かし続けるUSBデバイスがあります。
パソコンからは標準的なUSBマウスに見えるため、USBメモリなどの接続が禁止されているパソコンでも利用可能です。

マウスジグラーはAmazonなどでも取り扱いがあるのですが、怪しい輸入品が多く、手を出すのが怖そうです。
そのため、自作することにしました。

注意:オンラインゲームのチート対策ツールにチート用デバイスと認識される可能性があるため、使わないときはマウスジグラーを外しましょう。

Raspberry Pi Pico

Raspberry Pi Pico(以下、Pico)は、シングルボードコンピュータで有名なRaspberry Pi財団が出しているマイコンボードです。
1,000円ちょっとで買えるため、お手軽にデバイスを作るのに最適です。

Picoにはいくつかのシリーズがありますが、
今回は記事執筆時点で最新のPico 2を使います。

MicroPythonを導入

PicoのBootボタンを押しながら、PicoとPCをUSBケーブルで接続します。
すると、PC上ではストレージとして認識されます。
そのストレージ上に拡張子がuf2であるMicroPythonのファームウェアをコピーします。
コピーすると、自動的にストレージとしての認識が解除されます。

最新のPico2向けファームウェアは以下のサイトからダウンロードできます。

Thonnyを導入

以下のサイトからThonnyをインストールしてください。

以下、割愛しますが、ネット上でLチカなどと検索すると、ThonnyでPicoをプログラムする記事が見つかります。
PicoのLEDをチカチカ光らせることができる状態にして、次の節に移ります。

PicoをUSBデバイスとして作成

さて、ここからが本題。

MicroPythonにはマイコンをUSBデバイスとして認識させる仕組みが標準ライブラリにありますが、
USBのメッセージ処理を自分で実装する必要があり、とても大変です。
そこで、簡単にマウスとして認識させることができるパッケージを使います。

メニューバーの「ツール」から「パッケージを管理...」を開いてください。
image.png

パッケージ管理ウインドウ上部の検索ボックスに「usb_device_mouse」と入力し検索すると、
下図赤枠に導入したいパッケージが見つかるため、青色のリンクをクリックし、
インストールします。

image.png

すると、Picoのストレージ上にlibフォルダが作られ、そこにパッケージのファイルがコピーされます。

あとは、Picoのストレージ上にmain.pyという名前でファイルを作り、
次節のソースコードを貼り付け保存します。
ソースコードの内容は、1秒ごとにLEDが点滅し、同時にマウスカースルが1ポイント分左右に動くというものです。
PicoをPCから取り出し、再度USB接続するとプログラムが自動的に動き出します。

ちなみにマウスとして認識されていても、Thonny上でプログラミングできるので、ツールバー赤色の停止ボタンを押してプログラムを停止させることができます。

image.png

ソースコード

main.py
import time
import usb.device
from usb.device.mouse import MouseInterface
import machine

led = machine.Pin(25, machine.Pin.OUT)
m = MouseInterface()

usb.device.get().init(m, builtin_driver=True)

while not m.is_open():
    time.sleep_ms(100)

time.sleep_ms(1000)

while True:
    m.move_by(-1, 0)
    led.value(1)
    time.sleep_ms(1000)
        
    m.move_by(1, 0)
    led.value(0)
    time.sleep_ms(1000)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?