もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

Pirate Audioの前面ボタンを/dev/input/eventXなキーボードとして使うソフトを作ってみた

サマリー

f:id:moguno:20201227155857j:plain:w400

  • Raspberry Pi用のコンパクトな液晶 & スピーカー & ボタンHATのPirate Audio Speaker for Raspberry Piがすごく良い。
  • そのボタンを/dev/input/eventXなキーボードにするプログラムを書いた。

Raspberry Piの弱点を完全にカバーしてくれるときめきデバイスをゲット

前から思ってたんです。ラズパイってヒューマンインタフェースが弱いなって。

ヒューマンインタフェースと言うのは、人間とコンピュータが対話するための入出力の手段のこと。
モニタやスピーカーのような人間の五感に訴える出力手段とか、キーボードとかタッチセンサーみたいな人間の意志をコンピュータに伝える入力の手段すね。

ラズパイのデフォルトだとそれがほぼないんですよね。

  • 出力する手段:一応アクセスランプのちっちゃなLEDを制御可能
  • 入力する手段:なし

まぁそのための拡張用40Pinなんですが、ジャンパ線がぴょんぴょんしてる基板をライフをハックするデバイスとして日常的に使えるかと言うと厳しいところがあると言うのが個人的な見解です。

(なおもぐのさん。はんだ付けがとても苦手なのは秘密です。)

そんなことを思いながら生きてたところ、公式サイトにときめくプロダクトが。

革命的だぜPirate Audio Speaker for Raspberry Pi

それは、Pirate Audio Speakerと言うHAT基板。
ラズパイW Zeroサイズの基盤にちっちゃい液晶、モノラルスピーカー、小さな4つのボタンが搭載されてます。

f:id:moguno:20210105181648j:plain:w200

もともとはラズパイを高音質なオーディオプレーヤーにするためのプロダクトなんですが、見事に上記のヒューマンインタフェース問題を解決してくれるHATになってます。

有志による解析も進んでて、独自のプログラムからでも使える感じになってます。

  • 液晶:ごにょればフレームバッファとして使用可。コンソールもXも使えるぜ!(すごいぜ@akkiesoftさん)
  • スピーカー:もともとALSA経由で使用可
  • ボタン:もともとGPIO経由で読み込み可

しかしながら、ボタンがGPIOなのがちょっと残念ポイント。
これがキーボードになれば、dialogコマンドとシェルスクリプトで超簡単に対話型のアプリが作れるのに・・・。

と言うわけで前面ボタンをキーボードに見せかけるアプリを作ってみました!

github.com

使い方

準備

Raspberry PiのGPIOを制御するwiringpiをインストールしてください。

sudo apt-get install wiringpi

コマンドライン引数

./pirate_audio_buttons Aボタンのキーイベントコード Bボタンの〃 Xボタンの〃 Yボタンの〃

イベントコードは以下を参照。キーボードのCキーを模擬するならKEY_Cに対応する46を指定します。

linux/input-event-codes.h at master · torvalds/linux · GitHub

0を指定するとそのボタンは無効になります。

起動方法

&を付けてバックグラウンド起動してください。
Bボタンを"yキー"、Yボタンを"nキー"にする場合はこんな感じ。

./pirate_audio_buttons 0 21 0 49 &
PID=$!

例えば、コンソールでdialogコマンドを実行してBボタン or Yボタンを押すと結果が得られると思います。

openvt -f -c 1 -- sh -c 'dialog --ascii-lines --yesno test 0 0; echo $?'


f:id:moguno:20210105195008j:plain:w400

終了方法

killしてください(爽やかな笑顔)

kill $PID

参考

Pirent Audioの液晶をコンソールとして使う方法

akkiesoft.hatenablog.jp