2017年12月13日水曜日

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

0. はじめに

(2024/7/30 Bookworm OS にて動作確認済)
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 を管理者権限で実行すると設定が完了するようです。

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

まず、/boot/firmware/config.txt の末尾に設定を記します。例えば、下記のように管理者権限のテキストエディタで/boot/firmware/config.txt を開きます。テキストエディタはviなどお好みのものをどうぞ。
なお、Bullseye までの OS ではこのファイルは /boot/config.txt ですのでご注意ください。
sudo mousepad /boot/firmware/config.txt
開いたファイル末尾に下記の内容を追記し、保存してからファイルを閉じます。
hdmi_drive=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行がタッチの設定を行っており、それ以外は解像度の設定です。800x600のみを有効にしています。実用に耐える解像度は800x480か800x600ではないでしょうか。

さらに、Bullseye 以降の OS では、上記内容を記述の上、さらにデスクトップ左上のメニューから「設定」→「Screen Configuration」を起動し、 そこから「Configure」→「Screens」→「HDMI-1」→「解像度」→「800x600」を選択する必要がありました。「解像度」にはデフォルトで利用可能な解像度に、 /boot/config.txt (/boot/firmware/config.txt) で有効にした解像度が追加されて現れるようです。

このとき、/boot/firmware/config.txt の解像度を(例えば800x600から800x480に)後から変更する場合、GUI アプリでデフォルトで利用可能な解像度(例えば1024x768 など)に一旦変更しておかないと、画面表示できなくなりますので注意しましょう。

以上の設定が終わってから Raspberry Pi を再起動すれば、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"   "3948 236 3823 328"
        Option  "SwapAxes"      "1"
EndSection
この内容は、LCD-show/usr/99-calibration.conf-3508 を元に、私がキャリブレーションを行ったものです。

さて次に、以下のコマンドで xserver-xorg-input-evdev をインストールします。
sudo apt update
sudo apt 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
以上で再起動すると、タッチの位置が正しくなっていると思います。

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

3. 画面タッチのキャリブレーションについて

以上で画面タッチによる操作が可能になったと思いますが、タッチ位置と画面上のカーソルの位置の微妙なずれが気になる方がいるかもしれません。その場合、xinput_calibrator というソフトウェアでキャリブレーションを行うと良いでしょう。まず、以下のコマンドで xinput_calibrator をインストールします。
sudo apt update
sudo apt install xinput-calibrator
インストールが終わったら下記のように xinput_calibrator を起動します。
xinput_calibrator
画面を4か所タッチするよう指示がありますので、指示通りペンでタッチします。すると、キャリブレーション結果が表示されますので、それを参考に /etc/X11/xorg.conf.d/99-calibration.conf を編集し、再起動すればよいのです。

4. GPIOについて

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


5. 終わりに

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



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

2 件のコメント:

  1. 非常に参考になりました。わかりやすくて,コマンドも完璧でした。ありがとうございました。

    返信削除
  2. 大変助かりました、おかげさまで、キャリブレーションが正しく動きました!!!!!

    返信削除