このツイートに書いている流れから、今回の内容を試しました。
え、今さら?
— you (@youtoy) January 11, 2022
と言われそうですが、Raspberry Pi Pico をキーボードやマウスとして認識させられる、という話をはっきり認識したのが本日。
自作キーボードという方向ではなく、特定のキー押下を外部からの制御でやる、という方向で調べていたりした中での話。
今回使ったデバイスについて
今回使ったデバイスの「Maker Pi RP2040」は、Raspberry Pi Pico と「RP2040 を搭載」という点が共通しているデバイスです。
そして、大きさは Raspberry Pi Pico よりかなり大きくなりますが、一方で複数の LED やボタン、各種コネクタ等を標準搭載していたりします。
自分は、以下のスイッチサイエンスさんのオンラインサイトで購入をしていました。
●Maker Pi RP2040 - スイッチサイエンス
https://www.switch-science.com/catalog/7285/
今回の内容の実行手順
利用する言語
今回、開発に利用できる言語がいくつかある中で「CircuitPython」を使いました。
選定理由は、いろいろ下調べをした中で参考にしようと思った以下の記事で、CircuitPython が使われていたためです。
●Raspberry Pi Picoをカスタムキーボード化して「くぁwせdrftgyふじこlp」キーボード爆誕! - uepon日々の備忘録
https://uepon.hatenadiary.com/entry/2021/06/10/225800
●RaspberryPiPico【ラズパイピコ】でキーボード操作?? | ホビーハッピーブログ
https://www.hobbyhappyblog.jp/raspberrypipico-keyboard
それと、MicroPython も軽く試したりなどしてみたのですが、CircuitPython のほうがプログラムを書きかえて動作させる部分の手順がシンプルになりそう、というのも理由の 1つでした。
利用する開発環境
開発環境には以下の「Thonny」を使います。
●Thonny, Python IDE for beginners
https://thonny.org/
セットアップ
それでは、以下のページの手順を参考にしながら、開発に使うアプリの Thonny で CircuitPython によるプログラミングが行えるような準備をしていきます。
●Raspberry Pi Pico で MicroPython その6 CircuitPythonの書き込みと動作確認 – 砂町技研
https://krr910183393.wordpress.com/2021/02/24/raspberry-pi-pico-%E3%81%A7-micropython-%E3%81%9D%E3%81%AE6-circuitpython%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%A8%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D/
プログラムの書き込みができる状態まで進められたら、あとはプログラムを書くだけです。
お試し1:「ABC」という連続したキー入力
最初に試してみたプログラムを以下に示します。
import board
import digitalio
import time
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
led = digitalio.DigitalInOut(board.GP26)
led.direction = digitalio.Direction.OUTPUT
button = digitalio.DigitalInOut(board.GP20)
button.switch_to_input(pull=digitalio.Pull.DOWN)
keyboard = Keyboard(usb_hid.devices)
while True:
if button.value==0:
led.value = True
keyboard.send(Keycode.A)
keyboard.send(Keycode.B)
keyboard.send(Keycode.C)
time.sleep(0.2)
else:
led.value = False
time.sleep(0.1)
上記のプログラムでは、参考にした記事でも登場していた、以下の「Adafruit_CircuitPython_HID」をライブラリとして用いています。
●adafruit/Adafruit_CircuitPython_HID: USB Human Interface Device drivers.
https://github.com/adafruit/Adafruit_CircuitPython_HID
実装した内容を動かしてみた時の様子を、動画にしていますので掲載します。
Maker Pi RP2040上にあるボタンを押したら、「abc」というキー入力が発生するようにしてみたもの。
— you (@youtoy) January 11, 2022
「Raspberry Pi Pico がキーボード・マウスとして動作させられるなら、Maker Pi RP2040 も大丈夫だろう」と思ってやってみたものですが、
30行にも満たない CircuitPython のプログラムで無事に動作! pic.twitter.com/f1lRqcc0b3
これは普通の HIDデバイスとして認識されるので、iPad につないぐとそのままキー入力が実行できたりもします。
「仕組み上、そうなるよね」と予想はできてたけど、試してみた動画(何か活用できたりするかな...)。
— you (@youtoy) January 11, 2022
iPad の USB変換アダプタ経由で、Maker Pi RP2040 を接続して、キーボードのキー入力をさせてみた。 pic.twitter.com/0NXN9MsvuJ
お試し2: Zoomアプリのショートカットキー操作を実行
次に試したのは、以下のツイートにのせている内容です。
Zoom のカメラの ON/OFF操作を、Maker Pi RP2040 のボード上にあるボタンを押した際に実行させています。
Maker Pi RP2040 をキーボード(HIDデバイス)として認識させる件の続き(CircuitPython で adafruit/Adafruit_CircuitPython_HID を利用)。
— you (@youtoy) January 11, 2022
デバイス上のプログラマブルボタンを押した時に、Zoom のカメラの ON/OFF操作に割り当てられてるショートカットキーが実行されるようにしてみた! pic.twitter.com/UBh9HnCPpG
内容はキー操作の部分を書きかえただけ、という感じになるので、プログラムと簡単な補足のみを掲載するのみにします。
import board
import digitalio
import time
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
led0 = digitalio.DigitalInOut(board.GP0)
led0.direction = digitalio.Direction.OUTPUT
led1 = digitalio.DigitalInOut(board.GP1)
led1.direction = digitalio.Direction.OUTPUT
button0 = digitalio.DigitalInOut(board.GP20)
button0.switch_to_input(pull=digitalio.Pull.DOWN)
button1 = digitalio.DigitalInOut(board.GP21)
button1.switch_to_input(pull=digitalio.Pull.DOWN)
keyboard = Keyboard(usb_hid.devices)
while True:
if button0.value==0:
led0.value = True
keyboard.send(Keycode.ALT, Keycode.V)
time.sleep(0.2)
else:
led0.value = False
if button1.value==0:
led1.value = True
keyboard.send(Keycode.COMMAND, Keycode.SHIFT, Keycode.V)
time.sleep(0.2)
else:
led1.value = False
time.sleep(0.1)
上記で設定したキーの組み合わせや、そのキーのプログラムでの記載方法に関する参照情報は、以下のツイートにあるとおりです。
このあたりを見れば良さそう、かな。https://t.co/TsylrmWPMH pic.twitter.com/xIBEUDAkrL
— you (@youtoy) January 11, 2022
その他
以下は、Maker Pi RP2040 を用いた開発に関する話題のメモです。
USBドライブとして認識されないようにする
以下は、動作用のプログラムを書き込んだ後でも、デバイスが USBドライブとしても認識される、という機能を止めるための話です。
●CircuitPythonで作ったデバイスの普段使いに邪魔なUSBドライブを無効化する(ただし7.0.0から) - あっきぃ日誌
https://akkiesoft.hatenablog.jp/entry/20210816/1629108171
Androidアプリで CircuitPython
以下は Maker Pi RP2040 を使った開発を、Androidアプリで行った話になるようです。
Maker Pi RP2040 + Android CircuitPython Editor動いた😍 pic.twitter.com/F34JMAL01C
— robo8080 (@robo8080) July 30, 2021
今回の内容をビジュアルプログラミングで実現
今回の内容を、ビジュアルプログラミングを用いて実現できるかもしれない、という話です。
以下、自分のツイートや記事へのリンクです。
ビジュアルプログラミングで Raspberry Pi Pico が扱える「Piper Make」を使う話。
— you (@youtoy) January 17, 2022
RP2040 を搭載という点で Pico と共通の Maker Pi RP2040 も使えてしまったぞ!
ボタン・複数の LED、Groveコネクタを標準搭載していて安価なデバイスなので、楽しいことがいろいろ手軽に試せそう!! pic.twitter.com/xUlaA88sPO
●ビジュアルプログラミングで Raspberry Pi Pico が扱える「Piper Make」を軽く試した時のメモ(Maker Pi RP2040 でも試す) - Qiita
https://qiita.com/youtoy/items/974e7004e20806d0aef5