頑固社会人がブログ始めてみた

子育てパパが等身大で日々の出来事や感じたことについて書きます

LCDに画像表示の続きタッチ操作 ~Raspberry Pi Zero~

TFTってなんじゃらほい??

thin film transistor の略で液晶のことだと思う。

 

以前もLCDについては書いたがそのときは画像の表示しかできなくて,

せっかく購入したタッチパネルを活かせていなかった。

そこで今回はタッチパネルを使えるようにしたい。

 

kshynkty.hatenablog.com

 

と言っても問題は,自分がマイコンとかソフトウェアとか全くのド素人であること。

必死にLCDの型番2.8inch SPI Module ILI9341 SKU:MSP2807を用いてタッチパネルを実現しているブログを探した。

 

その結果こんな記事を見つけた。

behindthesciences.com

 

まずは配線を行う。

表示のみのガイドから入っているため、タッチパネルのピン配置されていない。

f:id:kshynkty:20200711132401p:plain

*上記ブログの引用

 

以前使用した配線と異なるのでGPIOを入れ替える・・・・(´;ω;`)

 

次にブログに従ってコマンドを入れていく。

まずはSPI通信が可能かどうか

sudo raspi-config

次にSPIDEVのインストール(SPIDEV??なんだろう)

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-dev python3-dev
cd ~
git clone https://github.com/doceme/py-spidev.git
cd py-spidev
make
sudo make install

 

pipのインストール
sudo apt-get install python-pip
PIL Pillowのインストール
sudo pip install Pillow

 

デモサンプルのダウンロード

git clone https://github.com/BehindTheSciences/ili9341_SPI_TouchScreen_LCD_Raspberry-Pi.git

 

 

サンプルダウンロード後は

デモサンプルのディレクトリに移動して以下を実行すれば動作した。

 

sudo python BTS_SPI_LCD_DEMO.py

f:id:kshynkty:20200711143247j:plain 

 

次にタッチパネルの配線

f:id:kshynkty:20200711133510p:plain

SPI0だけでなくSPI1を使うらしい。

最終的な配線図はこんな感じ

f:id:kshynkty:20200711142217p:plain

上記のブログではSPI1を使用するときに以下のコマンドを使用している。

/boot/config.txtに記載する。(たぶんsudoコマンド必要)

#enable spi1 with a single CS line
dtoverlay=spi1-1cs

 

だが、他のブログを確認すると、

qiita.com

config.txtをいじると遅くなる例もあるらしく、回避策が書いてあった。

よく理解できてない僕はなんとなく二つのブログを参考にして

/boot/config.txtに以下を記載した。

dtoverlay=spi1-3cs

f:id:kshynkty:20200711135659j:plain

記載後再起動を行う。

 

ここまでいけばサンプルプログラムも動くはずである。

タッチパネルのキャリブレーションのコマンドを記載する。

python BTS-ili9341-touch-calibration.py

なぜかエラーが起きた・・・どうやら分母が0になっているらしい。

原因はどうやらlib_tft24T.pyの中のdef readValue(self,channel)にあるっぽい。

spi.open(0, self._ce_tch)

を変更して以下にしてみる。

spi.open(1,self._ce_tch)

はっきり言って根拠はない。

タッチパネルの方はSPI1つかってるんだから1でいいんじゃね??

こんなもんだ。

 

でも動いたから良しとしよう。

python BTS-touch-penprint-trail.py

上記コマンドを実行したところ、一応タッチした場所の座標がでたので成功だと思う。

f:id:kshynkty:20200711143838j:plain