Triggerhappyを使ってモニタなしのRaspberry Pi 3に接続したキーパッドからOSCを送る


1.概要

Raspberry Pi 3にPure Dataを入れて遊んでいます。

今回はRaspberry Pi 3にキーパッドをつないでPure Dataを操作しようと考えました。
キーの入力は取れたのですが、モニタなしで使おうとしてハマったので、メモです。

2. 環境・使用機器

  • Raspberry Pi 3 (Rasbpian Stretch)
  • Pure Data Vanilla (pd-0.47.1)

3. 手順

3.1 ハマるまでの経緯

まずは以下のサイトを参考に、Pure Dataでkeyselect使ってテンキーからの入力で操作するパッチを組みました。

GUI上で上手く動いていましたが、今回はモニタを使用していないので以下のようにしてPuredataを起動しています。

pd -nogui test.pd &

keyはPure Dataのウィンドウがアクティブのときに有効らしく、-noguiで起動した場合、使えないことが分かりました。

3.2 モニタなしでキーパッドの情報を受け取る方法

方法をいろいろ調べてみましたが、pdで直接受け取るのは難しそうです。

それっぽい方法を2つ見つけました。

  1. Headless keyboard entry - how? - Raspberry Pi Forums

    • Triggerhappyを使った方法
  2. Anites: USB Keyboard on Raspberry Pi

    • pythonを使った方法(詳しく読んでない)

1.で説明されていたTriggerhappyがRaspbianにもともと入っているっぽいのでこちらでやってみることにしました。

3.3 コマンドラインからOSCを送るためにosc-cliをインストールする

(* osc-cliはタイムラグがあったので最後にoscerで試した方法を追記しました)
ターミナルからoscを送るnodeのモジュールをインストールします。

npm install -g osc-cli

使い方は以下のサイトを見てください。

例えば127.0.0.1:9001に/play 1を送る場合はターミナルで以下のコマンドを打ちます。

osc --host 127.0.0.1:9001 /play 1

3.4 キーの名前の確認

Triggerhappyの設定ファイルを作成するために、以下のサイトを参考にしてまずはキーボードのキーがどういう名前で認識されているのかを調べます。

ターミナルで以下のコマンドを実行してキーを押すと表示されます。(ctrl + cで終了)

thd --dump /dev/input/*

キーパッドの1を押して離したときの様子。

EV_KEY        KEY_KP1        1        /dev/input/event0
# KEY_KP1        1        command
EV_KEY        KEY_KP1        0        /dev/input/event0
# KEY_KP1        0        command

3.4 .confファイルの作成、保存

以下のような内容のファイルを作成し、拡張子は.conf/etc/triggerhappy/triggers.d/に保存します。

test.conf
# キーパッドの1を押したときにoscで/play 1を、離したときに/stop 1を送る
KEY_KP1 1 osc --host 127.0.0.1:9001 /play 1
KEY_KP1 0 osc --host 127.0.0.1:9001 /stop 1

私は.confファイルをプロジェクトフォルダ(この場合myprojectフォルダ)に保存してシンボリックリンクを貼りました。

sudo ln -s ~/myproject/test.conf  /etc/triggerhappy/triggers.d/

リロードします。私の場合は再起動しないと上手く動きませんでした。

sudo /etc/init.d/triggerhappy reload

osc-cliの場合、少しタイムラグがあるのが気になりますが、とりあえず動くようになりました。

(追記)osc-cliではなくoscerを試す

やっぱりosc-cliのタイムラグが気になったので、コマンドラインからOSCを送れる別のoscerを試してみました。

参考サイト

インストール

こうやってソースやビルドされたものが配布されているプロジェクトをどうやって使うのかが分からなくて、調べながら一応動くようにしたので、合っているか分かりません。

  • githubをクローンする
git clone https://github.com/aike/oscer.git
  • シンボリックリンクを作成する
sudo ln -s ~/oscer/build/LinuxARM/oscer  /usr/local/bin/

コマンドラインでの使い方

oscer 127.0.0.1 9001 /play 1

Triggerhappyの.confファイルを書き換える

test.conf
# キーパッドの1を押したときにoscで/play 1を、離したときに/stop 1を送る
KEY_KP1 1 oscer 127.0.0.1 9001 /play 1
KEY_KP1 0 oscer 127.0.0.1 9001 /stop 1

こっちの方が反応が早くて幸せになれました。