使用した液晶モジュールや接続、設定は以前の記事どおりです。
そのM028C9325TPにはタッチパネルも付いているので、これを使ってみます。
あとRPiはB+でないとGPIOの数が足らないです...(´~`)
ハード的な接続は
を参考に繋いでます。
Linuxカーネルのビルドや準備は
を参考に手元のカーネルソースに追加・設定しビルドしました。
/boot/config.txt を以下のように修正して画面サイズを小さくしています。
framebuffer_width=640
framebuffer_height=480
hdmi_group=2
hdmi_mode=4
タッチパネルの調整も必要なので入力イベントをコンソール上で見れるツールもインストールしておきます。
sudo apt-get -y install xinput evtest
カーネルビルドで参考にしたHPにも書いていますがヘルパーモジュールも必要なので
cd
git clone https://github.com/notro/fbtft_tools.git
cd ~/fbtft_tools/ads7846_device; make && sudo make install
でインストールしています。
ここで一旦タッチパネルを使えるようにして調整~
sudo modprobe ads7846_device gpio_pendown=4しかし、調整しようと思ったらXY座標が入れ替わってるっぽいので
evtest
sudo modprobe -r ads7846_deviceでモジュールを削除して、 swap_xyの引数を追加して組み込みしなおします。
sudo modprobe -r ads7846
sudo modprobe ads7846_device gpio_pendown=4 swap_xy
でも、まだおかしい...Y方向のみ逆になってる...
しかも、入れ替える設定がないっぽい?
仕方ないので、モジュールのソースコードを修正しました。
カーネルソースの linux/drivers/input/touchscreen/ads7846.c の 861 行目辺り
if (Rt) {
struct input_dev *input = ts->input;
if (ts->swap_xy)
swap(x, y);
y = (y-4095)*-1;
if (!ts->pendown) {
input_report_key(input, BTN_TOUCH, 1);
ts->pendown = true;
dev_vdbg(&ts->spi->dev, "DOWN\n");
}
input_report_abs(input, ABS_X, x);
input_report_abs(input, ABS_Y, y);
input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
input_sync(input);
dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
}
オレンジ色の1行を追加してY座標を反転させています。
これをコンパイル、組み込みしなおし
最小値、最大値を引数にして組み込みなおします。
私の環境だと以下のようになりました。
これをコンパイル、組み込みしなおし
evtestを起動している状態で4隅をタップしてXY座標の最小値、最大値をメモします。
最小値、最大値を引数にして組み込みなおします。
私の環境だと以下のようになりました。
sudo modprobe ads7846_device gpio_pendown=4 swap_xy x_min=523 x_max=3822 y_min=451 y_max=3711
これで調整完了。
今回、動作確認アプリにはJavaFX8を使用しました。
JavaFXだとXWindowなしでUIアプリが作れます。
JavaFXだとXWindowなしでUIアプリが作れます。
からARM用JDKをダウンロードして
sudo tar zxvf jdk-8u6-linux-arm-vfp-hflt.gz -C /opt
でインストール。
アプリを640x480の画面サイズで作成し、
/opt/jdk1.8.0_06/bin/java -cp test.jar fx.JavaFXMain
などで実行できます。
JavaFXアプリはRPiに依存することなく、ごく一般的な作り方をすればOKです。
動作確認のため、以下のようにし液晶表示できるようにします。
で、実際に動かしてみた動画は以下になります。
動作確認のため、以下のようにし液晶表示できるようにします。
sudo modprobe fbtft_device name=itdb28 fps=15 rotate=90 gpios=reset:13,dc:5,wr:12,cs:6,db00:14,db01:15,db02:17,db03:27,db04:22,db05:23,db06:24,db07:25
fbcp &
(3行に見えるかもしれませんが、2行です。)
で、実際に動かしてみた動画は以下になります。
JavaFXアプリの起動はさすがに遅いですね (;´д`)
タッチパネルの反応もいまいちな感じです。