Raspberry Piのタッチパネル対応アプリ開発TIPS

f:id:karaage:20181118235806j:plain:w640

Raspberry Piでタッチパネル対応アプリを作りたい

 Raspberry Piで組み込み的にキーボードやマウス無しでデモをしたいとき、面倒くさいのが入力インターフェースです。

 一番単純なのがスイッチをつけることですが、半田付けが必要ですし、後でスイッチ増やしたくなったりするとメカやソフトへの影響が大きくて大変です。かといって、他の音声入力等の手段もまだまだ簡易とはいえません。

 そこでタッチパネルです。以前、Raspberry Piの決定版とも言える小型ディスプレイを紹介しました。

 このディスプレイ、なんとタッチパネルもついています。というわけで、これを使ってタッチパネル対応のGUIアプリ作成をするテクニックを紹介しようと思います。

 以下は、上記記事の通りディスプレイが使える最低限のセットアップがしてあることが前提となります。

タッチパネルアプリのサンプル

 タッチパネルのアプリですが、GitHub上の以下リポジトリに用意しました。

 GitHubとかよく分からないという人は、ネットに繋がったラズパイのターミナルでとりあえず以下コマンドを実行しましょう。touch_gui.pyというサンプルファイルが魔法のように手に入ります。

$ wget https://raw.githubusercontent.com/karaage0703/raspberry-pi-example/master/touch_gui.py

 あとは、以下コマンド実行すればタッチパネルのアプリが起動します。

$ python3 touch_gui.py

f:id:karaage:20181118235806j:plain:w640
 起動した画面

 それぞれのボタンをタッチするとターミナル上にメッセージが表示されると思います。キーボードでESCを押せばアプリ終了します。

 あとは、touch_gui.pyをベースに改造すれば、好きなタッチパネル対応アプリが作れます。何をやっているかは、ソースコードを見れば雰囲気で大体分かるんじゃないかと思います。

タッチパネルアプリ注意点

 ソースコードを見れば雰囲気で分かると書きましたが、いくつか注意点があるので書いておきます。

日本語フォントインストール

 タッチパネルアプリ自体とはあまり関係ないのですが、日本語を使うために以下コマンドで事前に日本語フォントをインストールする必要があります。

$ sudo apt-get install fonts-ipafont

 上記でインストールすると/usr/share/fonts/truetype/fonts-japanese-gothic.ttfにフォントファイルが配置されるので、以下のように日本語フォントのセッティングが可能です。

font = pygame.font.Font(os.path.join('/usr/share/fonts/truetype/fonts-japanese-gothic.ttf'), 48)

FPS設定

 以下のようにFPSの設定をしましょう。これをしないと常に最大速度で描画することになるので、描画するたびにラズパイのCPU使用率が最大になってしまいます。

fpsclock.tick(10)

マウスを見えるようにする

 以下のコードで、マウスのカーソルを表示させます。

pygame.mouse.set_visible(1)

 何故かこの設定をしないと、タッチの正しい座標を取得できません(最初ハマっていました)。カーソル無い方が見栄えがよいので、本当は表示させたくないです。もしマウスカーソル表示させずに正しいタッチ座標を取得する方法ご存知の方は、Twitter等でこっそり教えて下さい。

自動起動設定しない

 自動起動設定すると、何故かタッチの座標が大きくずれてしまうので、手動で起動するようにしましょう。プログラムの起動順やスーパーユーザ権限が良くないのかと思い、色々調べつつ試してみたのですが、今のところ有効な対処方法がない状態です。

 仕方なくデスクトップにプログラムのショートカットを配置して、ダブルタップで起動するようにしています。こちらも自動起動して正常にタッチ座標を取得する方法ご存知の方がいましたら、是非Twitter等でこっそり教えて下さい。

まとめ

 ラズパイでタッチパネル対応アプリを作る方法に関して雑に紹介しました。ちょっとしたデモしたいときなど、小型ディスプレイとタッチパネル対応のアプリの組み合わせは便利と思いますので、必要に応じて活用いただければ幸いです。

 今回使用したテクニックのいくつかは、以下の「ゲームを作りながら楽しく学べるPythonプログラミング」という本を参考にさせていただきました。ラズパイのみならず、PythonでGUIアプリを作りたい方は色々参考になる本と思います。

 あと、何度も書きますが以下のディスプレイは本当最高なのでとりあえず2台くらい買っておいた方が良いと思います。

関連記事