Raspberry pi zero 2Wを入手したので備忘録として書きます。
LCDタッチパネルの接続
LCDタッチパネルは前回紹介した3.2インチLCDを使用します。
接続内容やLCDの表示方法の詳細はこちらを参照してください。
サンプルプログラム
GITHUBにXPT2046-Pythonというサンプルプログラムがあったので動作するか確認してみました。
URLは下記です。
https://github.com/Luca8991/XPT2046-Python/tree/main
サンプルプログラムtouch-test.pyは、SPI_1を使用するようになっていて、
割り込み用のGPIOはGPIO26で、チップセレクト用のGPIOはGPIO17でした。
なので、下記の個所を今回の接続に合わせて修正しました。
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)
- 注)チップセレクトcsの設定ですが、GPIOの番号を17から7へ変更しただけでは動作しなかったので、active_high=False,initial_value=Noneを追加して動作するようになりました。
以下が修正後のサンプルプログラム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(7,active_high=False,initial_value=None) #
clk = board.SCLK # same as writing 11
mosi = board.MOSI # same as writing 10
miso = board.MISO # same as writing 9
irq = Button(22) #spi = busio.SPI(clk, mosi, miso)
# auxiliary SPIxpt = 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)
実行結果
実行結果は下記になります。
左上、右上、左下、右下の順にタッチしました。
240x340のLCDなのでほぼあっています。
が、今回横長で使用する予定なのでxとyが逆になっています。
検出するときは20ドット程度は間隔をあけておいたほうがよさそうです。
位置 |
x |
y |
位置 |
x |
y |
左上: |
3 |
13 |
右上: |
2 |
319 |
左下: |
222 |
15 |
右下: |
224 |
318 |
LCDの座標は見た目通りですが、タッチパネルはxとyが逆になります。
図にすると下記のようになります。
ライブラリの参照方法
今回使用したxpt2046.pyは、後に使用するのでlibフォルダへ入れておくと便利です。
libフォルダ内のプログラムをライブラリとして参照するには、実行するプログラムの先頭で下記のように参照フォルダを指定します。
# libフォルダのライブラリを参照できるようにする。
import sys
sys.path.append('./lib')
以上