はじめに
こちらは、完走賞ゲットのため小ネタを毎日投稿しようとチャレンジする Advent Calendar 2022 の 2日目の記事です。
2022年のアドベントカレンダーシーズン、その初日は、以下 2記事の公開から始まりましたが、2日目も 2記事公開です。
- 【Processing 2022】@yuruyurau さんの #つぶやきProcessing のプログラムを短縮されてない #p5js のプログラムにした結果と過程の話 - Qiita
- 【完走賞ゲット-1】p5.js Web Editor で Google Fonts の絵文字の Webフォントを利用する - Qiita
2日目に、本記事以外で「KDDI Engineer&Designer の Advent Calendar 2022」にも以下の記事を書きました(こちらの内容は、事前に用意を進めていたものがあったのですが、担当日の前夜から「OpenAI の ChatGPT」の話が出てきて Twitter上などが賑わっていたので ネタを急遽、変えて書きました」)。
●【KDDI Engineer&Designer】AI にブラウザ用の JavaScript のプログラムをいくつか作ってもらった話 ⇒ OpenAI の ChatGPT で生成されたプログラムを少し解析もしてみる - Qiita
https://qiita.com/youtoy/items/8eacb1af28ac18301b74
本編
概要
今回の記事の概要について、まずは説明します。
前置き
今回の内容は、ボタン 1つの簡易ワンボタンキーボードを扱う話です。
具体的には、以下の「Maker Nano RP2040」を使った内容です。
●Maker Nano RP2040: マイコン関連 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/gM-17242/
上のツイートの写真にうつっている、紫色の箱・デバイスのほうです。
RP2040 について
今回のデバイスの名前にもついている「RP2040」というのは、Raspberry Pi財団が独自に設計したマイコンです。「Raspberry Pi Pico」というデバイスの名前を聞いたことがある方がいらっしゃるかもしれないですが、それに搭載されています。
●「Raspberry Pi Pico」が発売、独自開発の40nmマイコン「RP2040」を搭載:組み込み開発ニュース - MONOist
https://monoist.itmedia.co.jp/mn/articles/2101/22/news059.html
この「RP2040」は、いわゆる自作キーボード用に使える機能を持っています。少し補足すると、一般的なキーボードと同じ HIDクラスのデバイスとして動作します。
以前行った内容
この方向の話について、以前、類似デバイスの「Maker Pi RP2040」を使った内容を Qiita の記事にしていたことがありました。
●Maker Pi RP2040 をキーボードとして認識させてキー入力(Raspberry Pi Pico と同じ RP2040 を搭載したデバイス) - Qiita
https://qiita.com/youtoy/items/3ad628354a64015a9cea
この時に利用した「Maker Pi RP2040」は、外部モジュールをいろいろつけるにはコネクタなどが多くて良いですが、一方で、今回のような用途にはそれらコネクト等を含む全体のサイズが大きすぎるという状態でした(※ 前に書いた記事に掲載している動画の 1つを掲載)。
Maker Nano RP2040
ずいぶん前に上記のようなことをやって、時間がかなり経過したある日、秋葉原の秋月電子を訪れた際、Maker Nano RP2040 よりかなり小型の「Maker Nano RP2040」を見かけました。
サイズ感・内蔵している機能的に、「これは簡易ワンボタンキーボードに最適!!」と思い、今回の内容を試してみようと思いました。
入手先についてですが、自分が秋月電子で買った後に、スイッチサイエンスのオンラインショップでも入手ができるようになったようでした。
●Maker Nano RP2040 — スイッチサイエンス
https://www.switch-science.com/products/8351
Maker Nano RP2040 をキーボードとして動作させる
それでは、実際に Maker Nano RP2040 をキーボードとして動作させるための手順を進めていくことにします。
基本的には、上でも少し情報を出していたMaker Pi RP2040 を使った記事の内容を踏襲します。
- 開発に用いる環境・言語
- 言語: CircuitPython
- 環境: Thonny
セットアップ
PC と USBケーブルでつないだところ、PC側でキーボードを認識したような表示が出たり、USB接続のドライブとしても見えたりしたので、そのまま CircuitPython での開発ができそうでした。
ちなみに、デフォルトで書きこまれているプログラムがあるようで、起動時に某有名ゲームの BGM の一部が鳴ったりします(※ 著作権とか大丈夫なのだろうか...、という感じもするもの)。
そのまま開発をしても良さそうですが、今回、セットアップの手順も試してみる意図で、以前の記事でも参照した以下の Raspberry Pi Pico用の手順でセットアップを進めておこうと思います(※ 今回用いるデバイスは、Raspberry Pi Pico ではないですが)。
●Raspberry Pi Pico で MicroPython その6 CircuitPythonの書き込みと動作確認 – 砂町技研
https://krr910183393.wordpress.com/2021/02/24/raspberry-pi-pico-circuitpython-setup/
試してみたところ、今回の Maker Nano RP2040 を使った場合も、以前の Maker Pi RP2040 を使った時と同様に、特に大きな問題もなく進められました。この手順を終えた状態だと、CircuitPython で作ったプログラムを書き込めるようになっていると思います。
なお上記の手順内では、Pico Download からファームウェアをダウンロードして利用する形でした。Pico用のページにはなっていますが、そこで指定されたファームウェアでも問題なく動作しました。どうやら、Maker Nano RP2040 Download のページもあるものの、Pico Download と同じファームウェアをダウンロードすることになるようです。
プログラムを書き込む:その1
上記のセットアップの中の LED を点滅させるプログラムを動かします。
1点注意が必要そうなのが、 led = digitalio.DigitalInOut(GP25)
の部分です。
Maker Nano RP2040 のボード上の LED に割り当てられた番号に、25番が含まれていなそうでした。
そのため、 digitalio.DigitalInOut()
で指定する番号に関しては、0〜9 や 16〜19 といった、Maker Nano RP2040 のボード上の LED が割り当てられている番号を指定してください。以下は、19番を指定した例です。
import digitalio
from board import *
import time
led = digitalio.DigitalInOut(GP19)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.1)
led.value = False
time.sleep(0.1)
プログラムを実行して、指定した LED が点滅するのを確認してください。
プログラムを書き込む:その2
次に、キーボードとして動作させるプログラムを書きこみます。
次のプログラムには、Adafruit_CircuitPython_HID という以下のライブラリが必要です。
●adafruit/Adafruit_CircuitPython_HID: USB Human Interface Device drivers.
https://github.com/adafruit/Adafruit_CircuitPython_HID
上記のリポジトリのデータをダウンロードし、「Adafruit_CircuitPython_HID/adafruit_hid」フォルダを、Maker Nano RP2040 の「lib」フォルダにコピーします。
それから、以下のプログラムを実行してください。
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)
それでは、PC側で文字入力を行える状態にしてから、Maker Nano RP2040上の GP20 のボタンを押してみてください。PC側で「abc」という文字列が入力されたのが確認できたかと思います。
あとは、自由に入力するキーをカスタマイズしてしまってください。
自分の前回の記事だと、Zoom のショートカットキーを入力するという内容も試していたりします。
おわりに
これで無事、Maker Nano RP2040 を簡易なワンボタンキーボードとして扱えるようになりました。