2017年12月13日水曜日

Raspberry PiのGPIOが引き出せる小型タッチスクリーンが届いたので電子工作に使ってみた

0. はじめに

2017年12月10日頃、Raspberry Pi用の小型タッチスクリーンでGPIOを引き出せるものが、amazonでセールされているというので話題になっていました。こちらです。
セール中は2656円でしたが、通常時でも十分安いですね。

この手の小型液晶はGPIOが塞がれてしまうものが多いのですが、それが利用可能なものは珍しいと思い、入手して利用してみました。

利用イメージはこちらです。ターミナルソフトウェアのLXTerminalが映った画面がこのタッチスクリーンです。そこから下方向に横向きにGPIOのピンが出ており、電子工作などに利用可能になっています。


以下、利用時におこなった設定などをメモしていきます。

1. まずは起動してみる

2017/11/29にリリースされたNOOBS 2.4.5でRaspbianをインストール済のRaspberry Pi 3が手元にあったので、そのままタッチスクリーンを差して起動してみたのが次の写真です。

特に何の設定もすることなく画面が映りました。画面の解像度は1280x720でした。さすがにこの解像度では文字が小さすぎて全く読めず、解像度を変更する必要があります。また、この状態ではタッチには反応しません。

以下でそれらの設定を行っていきます。

2. 設定

設定方法は付属のDVDのドキュメントに書いてあります。DVDにある圧縮ファイル Driver/LCD-show.tar.gz を展開すると LCD-show というディレクトリが現れるのですが、その中のスクリプトファイル MPI3508_480_320-show を管理者権限で実行すると設定が完了するようです。

しかし、/boot/config.txtなどのファイルを丸ごと差し替えられるのが嫌なので、 MPI3508_480_320-show の中身を見ながら必要な設定を行っていくことにしました。

まず、/boot/config.txt に設定を記します。例えば、下記のように管理者権限のテキストエディタで/boot/config.txt を開きます。テキストエディタはviなどお好みのものをどうぞ。
sudo leafpad /boot/config.txt
開いたファイル末尾に下記の内容を追記し、保存してからファイルを閉じます。
hdmi_driver=2
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
#hdmi_cvt 480 320 60 6 0 0 0
hdmi_cvt 800 480 60 6 0 0 0
#hdmi_cvt 800 600 60 6 0 0 0

dtparam=spi=on
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
最後の2行がタッチの設定を行っており、それ以外は解像度の設定です。800x480のみを有効にしています。実用に耐える解像度は800x480か800x600ではないでしょうか。

なお、このままではタッチの位置が上下逆転してしまうので、キャリブレーションによりタッチの位置を正しく反映するようにします。

次に、まず、下記のコマンドを実行し、/etc/X11/xorg.conf.d/99-calibration.conf を管理者権限で開きます。テキストエディタはお好みで。
sudo mkdir -p /etc/X11/xorg.conf.d
sudo leafpad /etc/X11/xorg.conf.d/99-calibration.conf
空のファイルが開きますので、下記の内容を記して保存し、ファイルを閉じます。
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3936 227 268 3880"
        Option  "SwapAxes"      "1"
EndSection
この内容は、LCD-show/usr/99-calibration.conf-3508 に書かれていた内容です。

なお、NOOBS 2.4.5 (Raspbian 2017-11-29) の頃は上記の設定で良かったと思うのですが、
2018年3月にリリースされた NOOBS 2.7.0 (Raspbian 2018-03-13) で試したところ、上記の「Option "SwapAxes" "1"」の次の行に下記の一行を追加しないと横方向の軸の向きが逆になる現象が見られました。同じ現象に遭遇した方は追加をお試しください。
        Option  "InvertY"      "1"

次に、以下のコマンドで xserver-xorg-input-evdev をインストールします。
sudo apt-get update
sudo apt-get install xserver-xorg-input-evdev
最後に、下記のコマンドを実行します。設定ファイルの優先順位を変更しているようです。
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
以上で再起動すると、/boot/config.txtで設定した解像度で、冒頭の写真のような画面の向きでタッチが効くようになっていると思います。

この解像度でもターミナルの文字を読むのはやや厳しいので、私の場合LXTerminalのメニューの「編集」→「設定」から、フォントサイズを14、ウインドウサイズを70x16(解像度800x480の場合)または70x22(解像度800x600の場合)に変更しました。この設定もお好みで。
LXTerminalの設定画面で「OK」ボタンが画面外にあるので苦労しますが、キーボードのTABキーで選択肢のフォーカスを画面範囲内の最下部のものに移動し、そこから「TABキー二回押してからEnter」で「OK」ボタンを押したことになります(この表現で伝わるか不安ですが)。

3. GPIOについて

GPIOはそのまま使えますが、下図のSPI関係のピンとGPIO 25はタッチスクリーンで使用済であるようなので使わないようにしましょう。


4. 終わりに

この手の小型タッチディスプレイは沢山出ていますが、GPIOが利用可能なものは貴重ですね。設定もそれほど難しくありませんし、3000円前後なら十分試す価値はあるのではないでしょうか。



「カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

0 件のコメント:

コメントを投稿