Seeed K.K.の松岡です。
今回は、reTerminalのボタン割り当てを変更する方法を紹介します。
reTerminalの前面ボタン
reTerminalは前面に4つの物理ボタンを持っています。利用シーンによってはタッチパネルよりも、このボタンのほうが便利だったりします。
このボタンを押すと、キーボードから'a', 's', 'd', 'f'が入力される(ように振る舞う)ので、アプリケーションでは'a', 's', 'd', 'f'の入力をキャッチすることでボタンが押されたかどうかが分かります。
'a', 's', 'd', 'f'は困る
しかし、ときにはこれらの文字が入力されてしまうのが邪魔だったり、実際のキーボード入力と区別できなくて困ることがあります。 たとえば、テキストエディタのようなアプリケーションのとき、前面ボタンで'a', 's', 'd', 'f'が入力されてしまったり、キーボードの'a', 's', 'd', 'f'を押したときに前面ボタンを押したと判断してしまいます。
そこで、前面ボタンのキーコードを変更して、前面ボタンとキーボードを区別できるようにしましょう。
前面ボタンのキーコードを変更
ドライバーをインストールする
reTerminalに関連したドライバーを最新にします。
$ git clone --depth 1 https://github.com/Seeed-Studio/seeed-linux-dtoverlays $ cd seeed-linux-dtoverlays $ sudo ./scripts/reTerminal.sh $ sudo reboot
古いreTerminal(Board VersionがV1.6よりも古い)は最新のドライバーをインストールするとボタン入力が動かなくなってしまいます。
cat /sys/class/input/event*/device/name
コマンドを実行してgpio_keysが表示されないときは、/boot/config.txtのdtoverlay=reTerminal,tp_rotate=1
をdtoverlay=reTerminal,tp_rotate=1,addr=0x20,mcp23008
に変更して再起動してください。
キーコードを変更
前面ボタンを押したときのキーコードは~/seeed-linux-dtoverlays/overlays/rpi/reTerminal-overlay.dtsのlinux,code = <xxx>;
に書かれているので、下記のとおり変更します。
linux,code = <30>;
->linux,code = <0x290>;
linux,code = <31>;
->linux,code = <0x291>;
linux,code = <32>;
->linux,code = <0x292>;
linux,code = <33>;
->linux,code = <0x293>;
そして、reTerminal.sh
を実行してOSに反映します。
$ cd ~/seeed-linux-dtoverlays
$ sudo ./scripts/reTerminal.sh
$ sudo reboot
これで、前面ボタンのキーコードを変更できました。
evtest
コマンドで、コードが変わっているのが確認できます。
0x290は10進数で656ですね。
前面ボタンのクリック判定(Python)
さて、アプリケーションで前面ボタンのクリックはどう判定したらいいのでしょうか?
Seeedが公開しているPython Library for reTerminalに、キーコードを指定する機能を追加しました。seeed_python_reterminal.button
のkey_code
に、キーコードを配列で設定できます。
例えば、test_button.pyならdevice = rt.get_button_device()
の前に、下記コードを追加すればOKです。
rt_btn.key_code = [0x290, 0x291, 0x292, 0x293]
参考リンク
- reTerminalのCompute Module 4を入れ替える
- reTerminalのディスプレイ向きを直す
- Getting Started with reTerminal
- reTerminalでボタン、LED、ブザーが動かないときの対処法
- key code - 0x290 / input-event-codes.h
- Python Library for reTerminal
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2022/9/27 | 松岡 | 作成 |