Chapter 47

🦶フットスイッチイベントを取得する - ⭐

kotaproj
kotaproj
2022.05.29に更新

💡やること

フットスイッチからイベント情報を取得します。

🏁デモ

🔧パーツ一覧

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モジュールを使用します。

https://python-evdev.readthedocs.io/en/latest/

本モジュールを使用することで、Linuxで入力イベントの読み取りと書き込みを行うことができます。
イベントは、キーまたはボタンの押下、マウスの動き、などとなります。