概要
突然ですが、社用PCと個人PCのキーボード配置が異なり打ち間違えてしまう経験はありませんか?筆者の社内PCは半角全角の切り替えの配置が異なり業務中によく間違えます。この記事では、Raspberry pi Pico(以降ラズパイピコとする)を使って簡単に自作キーボードを作りたいと思います。
目次
動作環境
- Windows 11 OS
- Raspberry pi pico
- Throny 4.1.6
ラズパイピコのピン配置
以下のリンクからラズパイピコ全体のピン配置を確認することができます。
https://datasheets.raspberrypi.com/pico/Pico-R3-A4-Pinout.pdf
ハードウェア構成
- タクトスイッチ
- USBケーブル(Micro USB)
Thronyのインストール
作成するにあたって下記のサイトを参考にしてThronyをインストールしました。
https://logikara.blog/pico_thonny_micropy/
以下のThronyの公式サイトからインストールすることができます。
https://thonny.org/
関連ライブラリのダウンロード
ラズパイピコをショートカットキーボードとして使うにはキーボード関連のライブラリをダウンロードする必要があります。
今回は、下記のサイトを参考にして関連ライブラリをダウンロードしました。
https://tech-and-investment.com/raspberrypi-pico-15-circuitpython-hid/
https://uepon.hatenadiary.com/entry/2021/06/10/225800
以下のリンクから関連ライブラリをダウンロードできます。
https://circuitpython.org/libraries
全体のコード
タクトスイッチを押すと全角・半角を切り替えることができる
# コード
import time
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
# キーボードの初期化
keyboard = Keyboard(usb_hid.devices)
# ボタンの設定 (G2)
button = digitalio.DigitalInOut(board.GP2)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP # プルアップ抵抗を有効にする
# LEDの設定 (G3)
led = digitalio.DigitalInOut(board.GP3)
led.direction = digitalio.Direction.OUTPUT
while True:
if not button.value: # ボタンが押されたとき
led.value = True # LEDを点灯
# 半角全角キーの押下をエミュレート(`キーを使用)
keyboard.press(Keycode.GRAVE_ACCENT) # 半角全角キーを押す
keyboard.release_all() # すべてのキーをリリース
time.sleep(0.1) # 短い待機時間を設ける
else:
led.value = False # LEDを消灯
time.sleep(0.1) # スリープしてCPU負荷を軽減
コードの解説
半角全角キーを押す
日本語キーボードでは「半角/全角」キーが独立しています。このキーを押すことで日本語入力(IME有効)と英語入力(IME無効)を切り替えることができます。この切り替えを
WindowsのIME(Input Method Editor)の設定が、GRAVE_ACCENT
を言語切り替え操作に対応付けられているようです。またkeyboard.press
を入力することでPCと同じキーボード操作を模倣することができます。
keyboard.press(Keycode.GRAVE_ACCENT)
すべてのキーをリリース
一度keyboard.press
を実行すると、スイッチから指を話してもキーが押された状態が続きます。そこでキーボードで指をキーから話した際の動作を再現するためにrelease_all
を使います。
keyboard.release_all()
プルアップ抵抗
今回のようにタクトスイッチなどのスイッチを使う場合、スイッチが押されていないときマイコンの入力端子がどこにも接続されず、閉回路ができません。閉回路がないとスイッチが押されていないときにノイズや誤動作が生じる場合があります。これを未然に防ぐためプルアップ抵抗を使います。ラズパイピコには内部にプルアップ抵抗を使う機能があるので今回はそれを使いたいと思います。
button.pull = digitalio.Pull.UP
実行結果
タクトスイッチを押すと半角・全角を切り替えることができました。
https://youtube.com/shorts/zKZf230H6VY?feature=share
おわりに
半角全角以外にも音量調整のために FunctionキーとF6を押さないといけない場合にも応用できるのでぜひ活用してみてください。