注目キーワード

【Raspberry Pi 】Pythonでキーボードのイベントを取得するぞ!(Python)

すけろく
うーむ
げんろく
どうした。
難しい顔をして。
すけろく
PythonでRaspberry Pi につないだ
キーボードのどのキーが押されたか
わからんのだ。
げんろく
よし。
今回はPythonでRaspberry Pi の
キーボードイベントを調べてみよう。
今回の記事は、Raspberry Pi OS上でのPython開発をしていると、
カメラ制御などの際に、画像や動画の取得の開始や停止を制御するのに
キーボードなどのイベントと連携させて行うことも多いはず。
そこで今回は、Raspberry Pi に接続したキーボードで、押されたキーを
Pythonで認識してプログラミングする方法をご紹介します。
この方法を使えば、キーボード以外のデバイスのイベントを有線/無線の区別なく
認識するPythonプログラムを記述することができます。
ぜひ試してみてくださいね!

 

 

基本的に設定はコマンドベースで行います。入力コマンドは、「コマンド」と色を付けて記載します。入力の結果出力される内容については、「出力」のような色で記載しています。
各コマンドの頭にある「$ 」はプロンプト部分なので、入力は不要です。
本記事の前提としては、以下の記事で設定したPython仮想環境をベースにしています。
先にこちらの記事を読まれることをおススメします。
関連記事

すけろく んー なんだか、変わってしまったのう げんろく どうした? むずかしそうな顔をして。 すけろく Raspberry Pi OSのPythonにパッケージを 入れる[…]

スポンサー広告

Pythonの環境を準備する

今回使うPythonの環境は、Raspberry Pi OS上にPython仮想環境を立て、行います。

パッケージは、Raspberry Pi OS上にあるPython環境をPython仮想環境にコピーしています。

 

パッケージの準備

今回、Pythonでキーボードなどのイベントを取得するパッケージは次のものを使用します。

パッケージ名 ドキュメント
evdev パッケージのドキュメントはこちらをクリック!
スポンサー広告

パッケージのインストール

パッケージのインストールは、次のコマンドを実行します。

(env)$ pip3 install evdev

Pythonプログラムによる確認

インストールしたパッケージを使って、キーボードなどのイベントを取得します。

次の3つのプログラムで確認していきます。

  1. Raspberry Pi OSで認識されているイベント番号の確認プログラム
  2. キーイベントなどの「evdev」パッケージでの認識名の確認プログラム
  3. キーイベントを判定基準に使ったプログラム

Raspberry Pi OSのイベント番号確認プログラム

Raspberry Pi OSでは、電源ボタンなども含め、接続されているデバイスの

イベントを「/dev/input」で管理しています。

次のコマンドでもイベント番号を確認できます。
(env)$   ls /dev/input
by-id by-path event0 event1 event2 event3 event4 event5 event6 event7 event8 event9 mice mouse0
これを「evdev」パッケージを使って、もう少しわかりやすく表示するPythonプログラムを作成します。

Pythonプログラムの作成

Raspberry Pi OSに以下のプログラムをファイルに保存します。
(例では、「src/KeyBoard_」というディレクトリに「device_event_info.py」という名前で保存しています。
保存したら、次のコマンドでプログラムを実行します。
(env)$  python3 src/KeyBoard_/device_event_info.py
/dev/input/event0 pwr_button gpio-keys/input0
/dev/input/event1 vc4-hdmi-0 vc4-hdmi-0/input0
/dev/input/event2 vc4-hdmi-0 HDMI Jack ALSA
/dev/input/event3 vc4-hdmi-1 vc4-hdmi-1/input0
/dev/input/event4 vc4-hdmi-1 HDMI Jack ALSA
/dev/input/event5 ELECOM ELECOM TK-FCP096 usb-xhci-hcd.0-2/input0
/dev/input/event6 ELECOM ELECOM TK-FCP096 Consumer Control usb-xhci-hcd.0-2/input1
/dev/input/event7 ELECOM ELECOM TK-FCP096 System Control usb-xhci-hcd.0-2/input1
/dev/input/event8 ELECOM ELECOM TK-FCP096 Wireless Radio Control usb-xhci-hcd.0-2/input1
/dev/input/event9 ELECOM ELECOM TK-FCP096 Mouse usb-xhci-hcd.0-2/input1
上記のようにイベントIDとデバイスが出力されます。
例えば 「event0」 は、電源ボタンとして認識されています。
今回はELECOM製の次のキーボードをRaspberry Pi のUSBポートに接続していますので、
「event5」~「event9」になりますが、実際にキーイベントを取るためには「event5」
を使います。
このキーボード、小さくて有線なので、Bluetoothが使えない場合にも使える貴重な商品です。

キーイベントの「evdev」パッケージでの認識名の確認プログラム

次に、キーボードなどでキーを押した場合に、「evdev」内でどのように認識されているかを
確認するプログラムを作成します。

Pythonプログラムの作成

Raspberry Pi OSに以下のプログラムをファイルに保存します。
(例では、「src/KeyBoard_」というディレクトリに「device_event_check.py」という名前で保存しています。
保存したら、次のコマンドでプログラムを実行します。
(env)$  python3 src/KeyBoard_/device_event_check.py
device /dev/input/event5, name "ELECOM ELECOM TK-FCP096", phys "usb-xhci-hcd.0-2/input0", uniq ""
key event at 1744942972.256194, 2 (KEY_1), down        ←「1」キーが押された
key event at 1744942972.376201, 2 (KEY_1), up
key event at 1744942975.448373, 17 (KEY_W), down       ←「W」キーが押された
key event at 1744942975.600380, 17 (KEY_W), up
key event at 1744942977.872511, 42 (KEY_LEFTSHIFT), down   ←「左Shift」キーが押された
key event at 1744942978.016518, 42 (KEY_LEFTSHIFT), up
key event at 1744942978.736559, 29 (KEY_LEFTCTRL), down   ←「左Ctrl」キーが押された
key event at 1744942978.920569, 29 (KEY_LEFTCTRL), up
key event at 1744942979.432597, 57 (KEY_SPACE), down     ←「SPACE」キーが押された
key event at 1744942979.560602, 57 (KEY_SPACE), up
key event at 1744942981.304706, 1 (KEY_ESC), down       ←「ESC」キーが押された
ESC : KEY Down Program Stop.
Program end
プログラムを実行するとキー入力待ちとなり、キーボードのキーを押すと
上記のようにイベントIDと認識名「KEY_1」などが出力されます。
「ESC」キーを押すと、プログラムが停止します。
この認識名を使うことで、Pythonプログラム内でどのキーが押されたかを
もとに処理をプログラミングすることができます。

キーイベントを判定基準に使ったプログラム

最後に、これまで調べた「evdev」の内容をもとに、
キーが押された際の処理を記述したプログラムを作成します。

Pythonプログラムの作成

Raspberry Pi OSに以下のプログラムをファイルに保存します。
(例では、「src/KeyBoard_」というディレクトリに「keyboad_test.py」という名前で保存しています。
保存したら、次のコマンドでプログラムを実行します。
(env)$  python3 src/KeyBoard_/keyboad_test.py
key event at 1744943900.420224, 2 (KEY_1), down
1 : KEY Down Program Stop.
key event at 1744943900.540231, 2 (KEY_1), up
key event at 1744943906.756578, 17 (KEY_W), down
w : KEY Down Program Stop.
key event at 1744943906.844585, 17 (KEY_W), up
key event at 1744943911.916870, 57 (KEY_SPACE), down
SPACE : KEY Down Program Stop.
key event at 1744943912.060876, 57 (KEY_SPACE), up
key event at 1744943918.093215, 1 (KEY_ESC), down
ESC : KEY Down Program Stop.
Program end
プログラムでは、「1」「w」「SPACE」「ESC」の4つのキーが押された場合の
処理を記述しています。その他のキーが押されても何もしません。
処理としては、上記の赤字の部分の出力をしています。
この部分に他の処理を記述することで、キー入力による処理制御が可能になります。

編集後記

いかがだったでしょうか。

今回は、Raspberry Pi に接続されたキーボードなどで押されたキーの情報を

Pythonプログラムで認識して処理するプログラムをご紹介しました。

これがあれば、ディスプレイ接続がない状態でもキーボードなどの入力デバイスを

使って処理を行うことができます。

記事は以上になります。

最後までご覧くださりありがとうございました。

今回使用したRaspberry Pi はこちら!

Raspberry Pi の他の記事はこちらからどうぞ!

すけろく うーむ げんろく どうした。 難しい顔をして。 すけろく PythonでRaspberry Pi につないだ キーボードのどのキーが押されたか わからんのだ。 げんろく よし。 今回はPythonでRaspberry Pi の キーボードイベントを調べてみよう。 今回の記事は、Raspberry Pi OS上でのPython開発をしていると、 カメラ制御などの際に、画像や動画の取得の開始 […]

すけろく Raspberry Pi OS上ではなく、リモートで 開発環境を作れないものか。 げんろく うむ。 ディスプレイやマウス、キーボードをつないで 開発するのは面倒だからな。 すけろく そうなのだ。 SSHだけでやるのも面倒だし。 げんろく わかった。 VNCとVScodeを使ってリモートで 開発できる環境を作ってみよう! Raspberry Pi 5でPython開発する際に思うのは、開発 […]

すけろく んー なんだか、変わってしまったのう げんろく どうした? むずかしそうな顔をして。 すけろく Raspberry Pi OSのPythonにパッケージを 入れるために「pip」を使ったら コマンドを受け付けないのだ。 げんろく うむ。 少し環境が変わっているからのぉ よし確認してみるか。 Raspberry Pi OSでプログラムを実行する場合、Pythonを使うことも多いですが、Ra […]

すけろく よし!ユーザも変更したし、自動ログインも できないようにしたぞ! これでやっと・・・ げんろく それは良い心がけだな。 Wi-Fiの設定(パスフレーズの暗号化状態)は 確認したのかな? すけろく 。。。 げんろく 今すぐやったほうがよいよ! 念のためにな。 Raspberry Pi のOSインストール、セキュリティ設定とこれまで説明してきました。 この記事では、セキュリティ設定の続きとし […]

すけろく Raspberry Pi は、OSの書き込みも簡単で すぐに使いはじめられるな! げんろく 初期設定はちゃんとしたのか? まさか、初期設定のまま使っていることはないよな? すけろく 。。。 げんろく 初期設定のままだと、特にユーザ名は公開名だから セキュリティ上よろしくないのだ。 そのあたりも含めて説明しよう。 Raspberry Pi のOSインストール(MicroSDへの書き込み)に […]

すけろく 「ラズベリーパイ」を買ってきたぞ! げんろく 「お!もしかして、有名店のおいしいやつか!」って ベタな反応はしないぞ。Raspberry Piだろ? 前回も同じくだりがあったような。 すけろく チッ、つまらんやつだのう。 まあ、その通りだが。。。 Raspberry Pi のOS書き込みツールやら Raspberry Pi 5やらいろいろと出たので 初期設定の方法を再度確認したいのだ。 […]

すけろく うーむ。 このカメラは、Raspberry Pi では使えないのか? げんろく どうした。 カメラを見つめて。 すけろく Raspberry Pi でカメラがうまく認識できないのだ。 公式のカメラではないからなのか。 わからなくてな。 げんろく Raspberry Pi では、カメラの自動認識機能があって 認識範囲外のカメラを使うときはコツがいるぞ。 今回はそのあたりを紹介してみよう。 […]

すけろく うっ。 拙者ももはや、これまでか。。。 げんろく どうした!? 気をしっかり持つのじゃ! 何があった? すけろく わしの相棒(ラズパイ)からの連絡がここしばらくない。。 嫌われたかのう(涙)。。。 げんろく なんだ、そんなことか。 心配して損したのう。Rassbery Pi OS側のネットワークが 無効になったりすることもあるぞ。。 すけろく ・・・なに! 嫌われたのではないのだな! げ […]

すけろく よし!ユーザも変更したし、自動ログインも できないようにしたぞ! これでやっと・・・ げんろく それは良い心がけだな。 Wi-Fiのパスフレーズの暗号化はしたのかな? すけろく 。。。 げんろく 今すぐやったほうがよいよ! 念のためにな。 Raspberry Pi のOSインストール、セキュリティ設定とこれまで説明してきました。 この記事では、セキュリティ設定の続きとして、Wi-Fiのパ […]

すけろく Raspberry Pi は、OSの書き込みも簡単で すぐに使いはじめられるな! げんろく 初期設定はちゃんとしたのか? まさか、初期設定のまま使っていることはないよな? すけろく 。。。 げんろく 初期設定のままだと、特にユーザ名は公開名だから セキュリティ上よろしくないのだ。 そのあたりも含めて説明しよう。 Raspberry Pi のOSインストール(MicroSDへの書き込み)に […]

すけろく 外出先でノートパソコンとRaspberry Piで いい感じにドヤれる開発手法はないか? げんろく ほう。それならUSB On-The-Goを使う手があるぞ。 パソコンとRaspberry PiをUSBケーブルでつないで ゴニョゴニョできるしな。電源もとれる。 すけろく なに!いいではないか! それを教えてくれ。 カフェで優越感に浸っている自分が見えるぞ! げんろく 不純な動機だな。 最 […]

すけろく 「ラズベリーパイ」を買ってきたぞ! げんろく 「お!もしかして、有名店のおいしいやつか!」って ベタな反応はしないぞ。Raspberry Piだろ? すけろく チッ、つまらんやつだのう。 まあ、その通りだが。。。 今回は初期設定を学びたいと思っている。 げんろく わかった。 OSのインストールから初期設定までを教えてやろう。 皆さんは「Raspberry Pi」ってご存じですか? 「ラズ […]

すけろく Raspberry PiやJetsonのシングルボードコンピュータを使っていると 必要になるmicroSDカード。 何を買えばよいのやら。。。 げんろく microSDカードには意外といろんな規格があるんだよな。 しかも安価なものは信頼性が低かったりするし。 すけろく 価格で選んで、結果動かなかったり、動作が遅かったりする。 悩みどころだな。 げんろく ここいらで、一度microSDカー […]