💡やること
フットスイッチからイベント情報を取得します。
🏁デモ
🔧パーツ一覧
no | 部品名 | 個数 | 備考 |
---|---|---|---|
1 | ラズベリーパイ | 1 | 4Bで確認 |
2 | USBフットペダルスイッチ | 1 | RI-FP3BK Amazon |
接続図
今回、回路図はありません。フットスイッチをUSBケーブルで接続します。
💻環境
開発環境
- ラズベリーパイ
- Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
- Python
- Python 3.9.2 (default, Feb 28 2021, 17:03:44)
ラズベリーパイの設定
特になし
モジュールのインストール
apt
特になし
pip
Pythonに関するモジュールをインストールします。
$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install evdev
📝手順
USBフットスイッチが認識されていることを確認します。
キーイベントを取得し、表示します。
USBフットスイッチの初期設定
本フットスイッチの初期設定は、キーボードとして動作します。
各スイッチの割り当ては以下となります。
スイッチ | 割り当て |
---|---|
左 | キーボード'A' |
中 | キーボード'B' |
右 | キーボード'C' |
USBフットスイッチの認識を確認する
USBフットスイッチが認識している場合、
/dev/input/event[number]
で表示されます。
eventは、キーボード/マウスなど共通で使われるため、numberを確認します。
#で、コメントを記載しています。
$ cat /proc/bus/input/devices
I: Bus=0003 Vendor=046d Product=0825 Version=0012
略
# フットスイッチ - キーボードとしての認識
I: Bus=0003 Vendor=0c45 Product=7403 Version=0111
N: Name="HID 0c45:7403 Keyboard"
P: Phys=usb-0000:01:00.0-1.1/input0
S: Sysfs=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:0C45:7403.0001/input/input1
U: Uniq=
H: Handlers=sysrq kbd leds event1 # <= event番号
B: PROP=0
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
# フットスイッチ - マウスとしての認識
I: Bus=0003 Vendor=0c45 Product=7403 Version=0111
N: Name="HID 0c45:7403 Mouse"
P: Phys=usb-0000:01:00.0-1.1/input0
S: Sysfs=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:0C45:7403.0001/input/input2
U: Uniq=
H: Handlers=mouse0 event2
B: PROP=0
B: EV=17
B: KEY=70000 0 0 0 0
B: REL=903
B: MSC=10
キーイベントを取得する
キーを押すと、キー情報を表示します。
コード
read_footsw.py
import evdev
# デバイスの指定
DEVICE_PATH = "/dev/input/event1"
def main():
device = evdev.InputDevice(DEVICE_PATH)
for event in device.read_loop():
if event.type == evdev.ecodes.EV_KEY:
if event.value == 1:
# DOWN
if event.code == evdev.ecodes.KEY_A:
print("KEY_A - DOWN")
elif event.code == evdev.ecodes.KEY_B:
print("KEY_B - DOWN")
elif event.code == evdev.ecodes.KEY_C:
print("KEY_C - DOWN")
else:
print(f"{event.code} - DOWN")
elif event.value == 0:
# UP
if event.code == evdev.ecodes.KEY_A:
print("KEY_A - UP")
elif event.code == evdev.ecodes.KEY_B:
print("KEY_B - UP")
elif event.code == evdev.ecodes.KEY_C:
print("KEY_C - UP")
else:
print(f"{event.code} - UP")
return
if __name__ == "__main__":
main()
実行手順
(env) $ python read_footsw.py
実行結果
動作は、# コメントで記載します。
(env) $ python read_footsw.py
# スイッチ左を踏む
KEY_A - DOWN
KEY_A - UP
# スイッチ中を踏む
KEY_B - DOWN
KEY_B - UP
# スイッチ右を踏む
KEY_C - DOWN
KEY_C - UP
# Ctrl + cで停止
^CTraceback (most recent call last):
File "/home/pi/read_footsw.py", line 36, in <module>
main()
File "/home/pi/read_footsw.py", line 10, in main
for event in device.read_loop():
File "/home/pi/env/lib/python3.9/site-packages/evdev/eventio.py", line 45, in read_loop
r, w, x = select.select([self.fd], [], [])
KeyboardInterrupt
(env) $
🔎ポイント
フットスイッチ - RI-FP3BK
本フットスイッチは、割り当てたキーボードやマウスの入力を足で操作できる入力装置です。
対応OSはWindowsとなりますが、通常のキーボートと同じ認識ができるため、ラズベリーパイでも使用できます。
割り当ては、付属の専用設定ソフトでできます。(Windowsソフト)
イベントの取得
イベントの取得は、evdevモジュールを使用します。
本モジュールを使用することで、Linuxで入力イベントの読み取りと書き込みを行うことができます。
イベントは、キーまたはボタンの押下、マウスの動き、などとなります。