RapberryPi Zero Wで2.4 inch Full Color LCDに表示」でLCDに画像を表示しましたが、RapberryPi Zero Wで2.4 inch Full Color LCDを使ってタッチパネルから入力します。

Raspberry PI 3と2.4 inch Full Color LCDの接続

RapberryPi Zero Wと2.4 inch Full Color LCDを次のように接続します。「T_IRQ」を接続するとタッチしたときに、コールバック関数を呼び出す処理が可能となります。

RapberryPi Zeroと2.4 inch Full Color LCDの接続
RapberryPi Zero LCD
SCLK_1 (GPIO21) T_CLK
CE_1 (GPIO17) T_CS
MOSI_1 (GPIO20) T_DIN
MISO_1 (GPIO19) T_DO
GPIO26 T_IRQ
3.3V Power VCC
Ground GND

LCDの裏面を次に示します。タッチスクリーン・コントローラ「XPT2046」(緑枠線)がみえます。

SPIの有効化

タッチパネルから入力するためにもう一つのSPIデバイスを登録します。構成ファイル「/boot/config.txt」に次のコードを追加します。

dtoverlay=spi1-3cs

 
変更した構成ファイル「/boot/config.txt」を次に示します。

タッチパネル入力プログラムの作成

タッチスクリーン・コントローラ「XPT2046」を使ったタッチパネル入力プログラム「 touch-test.py」は「XPT2046-Python」のテストプログラムを使用します。githubに含まれる「xpt2046」は「touch-test.py」と同じフォルダに置きます。

  • 19行目でコールバック関数「touchscreen_pres」を設定します。
  • 22行目で定期的にタッチパネルのx,yデータを表示します。

touch-test.py

from xpt2046 import Touch
from gpiozero import Button, DigitalOutputDevice
import board
import busio
from time import sleep

# touch callback
def touchscreen_press(x, y):
    print(x,y)

cs = DigitalOutputDevice(17)
clk = board.SCLK_1		# same as writing 21
mosi = board.MOSI_1	# same as writing 20
miso = board.MISO_1	# same as writing 19
irq = Button(26)

spi = busio.SPI(clk, mosi, miso)	# auxiliary SPI

xpt = Touch(spi, cs=cs, int_pin=irq, int_handler=touchscreen_press)

while True:
    print(xpt.get_touch()) # to get the (x, y) coords when you desire
    sleep(.01)

タッチパネル入力プログラムの実行

次のコマンドで作成したタッチパネル入力プログラム「touch-test.py」を実行します。

$ python3 touch-test.py
None
(9, 308)
(9, 308)
(9, 308)
None
(6, 6)
(6, 6)
(218, 309)
(219, 308)
(219, 308)
(213, 292)
(223, 8)
(223, 8)
(222, 8)
(223, 8)
(223, 7)
(223, 7)

タッチパネル入力プログラム「touch-test.py」の実行時のLCDを次に示します。画面に付与した数値はタッチする場所を示します。タッチペンを使って、わりと強い力で画面を押します。

次の表は、LCDの場所ごとのタッチしたx,y位置を示します。

場所 (x、y)
(9、 308)
(6、 6)
(218、 309)
(223、 7)