1
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?

ラズパイピコでショートカットキーボードを作成する

Posted at

概要

突然ですが、社用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
image.png

ハードウェア構成

  • タクトスイッチ
  • USBケーブル(Micro USB)

Keyboard_raspberrypico_bb.jpg

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
image.png

おわりに

半角全角以外にも音量調整のために FunctionキーとF6を押さないといけない場合にも応用できるのでぜひ活用してみてください。

1
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
1
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?