・2016/12/22
Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶 ILI9341を使用する方法
(ラズパイ3に 320x240 ILI9341 TFT 2.8インチ LCDを SPI接続して自前アプリから直接制御する方法。)
Tags: [Raspberry Pi], [電子工作]
● Raspberry Pi 3 Model Bを遂に購入
Raspberry Pi3 Model B RPI2 RPI3
大人気の CPUボードの Raspberry Piに WiFiと Bluetoothが搭載されたモデルが新発売となりました。
以前から Raspberry Pi 2を買おうかどうか迷っていましたが、Raspberry Pi 3 Model Bの発売を機に購入を決意してラズベリアンになる事にしました。
※ ラズパイの OS Raspbianはバージョンが上がる毎に過去の版と OSの内部の作りが変わり、過去に書かれた製作記事(例えば Raspbian Wheezyの時代の記事)がそのままではエラーが出たりして動かない事が有ります。
※ 当方のホームページのラズパイ記事は全て Raspberry Pi 3 Model Bと Raspbian Jessieの組み合わせで動作確認をしております。
(ただし、将来的に新しい Raspbian OSが出た場合に、当方の Raspbian Jessieを基にした内容がそのままでは動かない可能性が有ります。)
※ 2017/08/16から Raspbian OSは Raspbian Jessieから Raspbian Stretchに変わりました。
※ 2019/06/20から Raspbian OSは Raspbian Stretchから Raspbian Busterに変わりました。
Download Raspbian for Raspberry Pi
ちなみに、歴代のバージョンと名称は
Debian | コードネーム | 年月 | 備考 | (参考)Ubuntuでの該当名称 |
Debian 11 | Bullseye | 2021/08/14~ | 2021/11からラズパイにリリース | Focal Fossa 20.04 LTS ? |
Debian 10 | Buster | 2019/06/20~ | 2019/06からラズパイ4対応 | Bionic 18.04 LTS |
Debian 9 | Stretch | 2017/08/16~ | 2018/03からラズパイ3B+対応 | Xenial 16.04 LTS |
Debian 8 | Jessie | 2015~ | 2016/02からラズパイ3対応 | Trusty 14.04 LTS |
Debian 7 | Wheezy | 2013~2016 | | |
Debian 6.0 | Squeeze | 2011~2014 | | |
Debian GNU/Linux 5.0 | Lenny | 2009~2012 | | |
● Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを FBTFTドライバで駆動する方法
FBTFTドライバで駆動する方法を下記にまとめました。
・2016/12/22
Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶を X Windowやコンソールの画面として使用する方法
ラズパイ3に 320x240 ILI9341 2.8インチ TFT LCDを FBTFTで X-Windowの表示画面として使用する方法。
● Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
Raspberry Pi 3 + Raspbian 8 Jessieでサクッと SPI接続の液晶モジュールを動かせる様にするまとめです。
(古い Raspbianのバージョンとは若干手順やコマンドが異なる部分が有ります。)
下記の最新バージョンで動作を確認しています。
Download RASPBIAN JESSIE WITH PIXEL
Image with PIXEL desktop based on Debian Jessie
Version:November 2016
Release date:2016-11-25
Kernel version:4.4
SPI有効化の手順で良くあるブラックリスト解除の下記の手順は Raspbian Jessieでは不要です。
sudo nano /etc/modprobe.d/raspi-blacklist.conf
blacklist spi-bcm2708
をコメント化する。
#blacklist spi-bcm2708
● Raspbian Jessie 2016/11/25版から SSH接続がデフォルトで無効になっている
Raspbian Jessie 2016/11/25版から SSH接続が初期設定で無効化されているので bootパーティションに sshと言う空のファイルを作成して sshを有効化します。
http://downloads.raspberrypi.org/raspbian/release_notes.txt
2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
A SECURITY UPDATE FOR RASPBIAN PIXEL
もしくは、GUIで Raspberry Pi Configuration applicationを使って SSH接続を有効化します。
● 2.8インチ SPI接続 液晶ディスプレイ(感圧式タッチパネル搭載 XPT2046 SPI接続)
使用する液晶モジュールは 2.8インチ SPI接続 液晶ディスプレイ(感圧式タッチパネル搭載 XPT2046 SPI接続)です。
2.8inch TFT LCD 2.8 TFT LCD 240X320 V1.1 with XPT2046 Touch Controller and SD-Card Slot
ILI9341 QR4 5265S01 G5/7 TP28017
2.8インチ 4線式抵抗膜タッチスクリーンデジタイザ
XPT2046タッチパネルコントローラ(SPI接続)
Description:
Type: touch panel
Size: 2.8" SPI Serial
Display area:36.72(W)X48.96(H)mm
Size: 8.5 x 4.8cm/
Driver element: a-Si TFT active matrix
Pixel arrangement: RGB vertical stripe
Driver IC: ILI9341
Backlight: White LED
Viewing Direction: 6 o'clock
Color Depth: 262K/65K
Resolution (dots): 240RGB*320Dots
5V compatible, use with 3.3V or 5V logic
Need at least 4 IOs from your MCU
With PCB plate (including power supply IC, SD), compatible with 5110 interface
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
LED駆動の電流制限抵抗を基板上に実装しました。←その後の調査で不要とわかりました。
※ LED端子は LCD基板上にトランジスタの駆動回路が有るので「1kΩの抵抗」は不要です。また、普通に GPIOの H/Lでバックライトの点灯を制御できます。
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
タッチパネル用の配線を省略する為に、T_DINと SDI(MISO)、T_CLKと SCKを液晶基板側で接続しました。
(SPIの仕様で SPIデバイス同士は CS信号を独立させれば SDI,SDO,SCLKを共通に配線できる。)
2.8インチ品が無い様なので 2.2インチの商品リンクです。(タッチは有りません)
ILI9340を使った2.2インチ SPI 240x320 TFT液晶も同様に使えます。
注意: Arduino用で安いものが有りますが、殆どがパラレル接続なので Raspberry Piには接続できません。(気合と根性で頑張れば使える様にできます。)
●パラレル接続方式の LCDモジュールに外部回路を作成して駆動している例
こじ研 小嶋研究室
「カラー液晶ディスプレーの接続」で【SPI・パラレル変換】回路を作成して、パラレル接続の LCDモジュールを接続して動かしています。
(KeDeiの 3.5インチ液晶や FBTFTの液晶も同様の回路が液晶モジュール側の基板に実装されています。)
● 320x240の ILIのコントローラ型番
ILITEL ILI LCD Driver IC
ILI9325 ILI9325DS
ILI9340 ILI9340C
ILI9341 ILI9341C
ILI9430 ILI9430C (ILI9340の誤植?)
ILI9431 (ILI9341の誤植?)
●タッチパネルの XPTのコントローラ型番
Shenzhen XPTEK Technology Ltd. XPT Touch Panel controller IC
XPT2046
XPT2048
2.4インチタイプの液晶モジュールの型番
TJCTM24024-SPI
● 2.8インチ SPI接続 液晶ディスプレイ(感圧式タッチパネル搭載 XPT2046 SPI接続)
結線方法は下記の様に 8本使用してそれぞれ接続します。
(1) LCDモジュールの VCCを ラズパイの GPIOの +3.3V(3V3)
(2) LCDモジュールの GNDを ラズパイの GPIOの GND(GND)
(3) LCDモジュールの CSを ラズパイの GPIOの CE0(GPIO8)
(4) LCDモジュールの RESETを ラズパイの GPIOの GPIO18
(5) LCDモジュールの DCを ラズパイの GPIOの GPIO17
※ DC端子は Data/Commandの略で Data = 'H'/ Command ='L'です。
(6) LCDモジュールの SDI(MOSI)を ラズパイの GPIOの MOSI(GPIO10)
(7) LCDモジュールの SCKを ラズパイの GPIOの SCLK(GPIO11)
(8) LCDモジュールの LEDを ラズパイの GPIOの +3.3V(3V3)
※ LEDと +3.3Vの間に 抵抗を入れる方が良い。(製作例では 1kΩを直列に入れています。)←その後の調査で不要とわかりました。
※ LCDモジュールの SDO(MISO)は未接続
※ タッチパネル部分と SDカードの配線は未接続です。
※ LED端子は LCD基板上にトランジスタの駆動回路が有るので「1kΩの抵抗」は不要です。また、普通に GPIOの H/Lでバックライトの点灯を制御できます。
・Raspberry Pi3の GPIO端子の SPI機能を有効化して 2.8インチ TFT液晶モジュールを接続して駆動する方法
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
● 2.8インチ SPI接続 液晶ディスプレイ(感圧式タッチパネル搭載 XPT2046 SPI接続)
ILI9340の2.2インチSPI TFTモジュールを使う(基礎編)
と
Raspberry Pi (9) LCD表示 1 - LCD表示 1 (SPI接続でQVGA LCDパネル表示)
を参考にしました。
● Broadcom BCM 2835ライブラリをインストールする。
Broadcom BCM 2835ライブラリ
2016/12 現在は 1.51が最新です。
cd ~
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.51.tar.gz
tar zxvf bcm2835-1.51.tar.gz
cd bcm2835-1.51
./configure
make
sudo make check
sudo make install
● Raspbian Jessieの SPIを有効にする。
おなじみの sudo raspi-configで SPIを有効にして再起動します。
sudo raspi-config
7 Advanced Options - Configure advanced settings
A6 SPI - Enable/Disable automatic loading
Yesを選択する。
Finishで raspi-configを終了する。
sudo rebootで再起動する。
sudo reboot
lsmodコマンドで spi_bcm2835の存在を確認する。
$ lsmod | grep spi
spi_bcm2835 6678 0
● サンプルソースをコンパイルして動かす。
ILI9340の2.2インチSPI TFTモジュールを使う(基礎編)
のページのから
ili9340.tar.gz
のソースリスト一式をダウンロードしてコンパイルします。
cd ~
wget http://nopnop2002.webcrow.jp/TFT/ili9340.tar.gz
mkdir ili9340
cd ili9340
tar zxvf ../ili9340.tar.gz
cc -o sample1 sample1.c ili9340.c -l bcm2835
cc -o sample2 sample2.c ili9340.c -l bcm2835
cc -o sample3 sample3.c ili9340.c -l bcm2835
cc -o sample4 sample4.c ili9340.c -l bcm2835
コンパイルしたサンプルプログラムを動かします。
C言語ネイティブでの SPI接続の TFT液晶駆動のサンプルプログラムになっています。
画面描画のサンプル
sudo ./sample1
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
画面描画のサンプル(液晶画面の上下左右の確認)
sudo ./sample2
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
ILI9340の2.2インチSPI TFTモジュールを使う(画像表示編)
をそのままに動かします。
BMP画像ファイル表示のサンプル 320x240の 256色のビットマップファイルを用意します。
sudo ./sample3 cat.bmp
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
ILI9340の2.2インチSPI TFTモジュールを使う(漢字表示編)
をそのままに動かします。
文字列描画のサンプル
sudo ./sample4
Usage: ./sample4 文字列 フォントファイル 倍率 表示色 [縦書]
倍率:2/3/4/5/6
表示色:000000=Black ff0000=Red 00ff00=Green 0000ff=Blue
縦書:1
wget http://openlab.ring.gr.jp/efont/dist/shinonome/shinonome-0.9.11p1.tar.bz2
bzip2 -d shinonome-0.9.11p1.tar.bz2
tar xvf shinonome-0.9.11p1.tar
sudo ./sample4 1倍角で表示しています ./shinonome-0.9.11/bdf/shnmk16.bdf 1 000000
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
sudo ./sample4 2倍角で表示しています ./shinonome-0.9.11/bdf/shnmk16.bdf 2 000000
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
私の液晶だと画面初期化後の表示が縞々になったので deviceInitial();の呼び出しの後に、clearDisplay();を入れて明示的に白画面で初期化する様にしました。
deviceOpen();
deviceReset();
deviceInitial();
clearDisplay();
line=(XMAX+1)/bits;
cols=1;
・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶を C言語で制御する
● sudoを付けないと Segmentation faultエラー
サンプルプログラムを実行する時に sudoを付けないと、
Segmentation fault
のエラーになります。
●上記の C言語版のサンプルソースを Adafruitの結線方法で動く様にする。
ソースリストの ili9340.cのピン定義部分を書き換えるだけで簡単に対応できます。
ili9340.c
#define D_C 18 // GPIO18=D/C (Adafruit)
#define RES_ 23 // GPIO23=RESET (Adafruit)
●上記の C言語版のサンプルソースを FBTFTの結線方法で動く様にする。
ili9340.c
#define D_C 24 // GPIO24=D/C (FBTFT)
#define RES_ 25 // GPIO25=RESET (FBTFT)
● Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを接続して Pythonで駆動する方法
ついでなので Adafruitのサンプルも動かしてみます。
User-space SPI TFT Python Library - ILI9341
Use an ILI9341 TFT display with a Raspberry Pi
Pythonでの SPI接続の TFT液晶駆動のサンプルプログラムになっています。
adafruit/Adafruit_Python_ILI9341
Adafruit Python ILI9341
Python library to control an ILI9341 TFT LCD display. Allows simple drawing on the display without installing a kernel module.
● 2.8インチ SPI接続 液晶ディスプレイ(感圧式タッチパネル搭載 XPT2046 SPI接続)
Adafruit式の結線方法は下記の様に 8本使用してそれぞれ接続します。
上記の結線方法とは (4)と (5)が異なります。
(1) LCDモジュールの VCCを ラズパイの GPIOの +3.3V(3V3)
(2) LCDモジュールの GNDを ラズパイの GPIOの GND(GND)
(3) LCDモジュールの CSを ラズパイの GPIOの CE0(GPIO8)
(4) LCDモジュールの RESETを ラズパイの GPIOの GPIO23
(5) LCDモジュールの DCを ラズパイの GPIOの GPIO18
(6) LCDモジュールの SDI(MOSI)を ラズパイの GPIOの MOSI(GPIO10)
(7) LCDモジュールの SCKを ラズパイの GPIOの SCLK(GPIO11)
(8) LCDモジュールの LEDを ラズパイの GPIOの +3.3V(3V3)
※ LEDと +3.3Vの間に 抵抗を入れる方が良い。(製作例では 1kΩを直列に入れています。)←その後の調査で不要とわかりました。
※ LCDモジュールの SDO(MISO)は未接続
※ タッチパネル部分と SDカードの配線は未接続です。
※ LED端子は LCD基板上にトランジスタの駆動回路が有るので「1kΩの抵抗」は不要です。また、普通に GPIOの H/Lでバックライトの点灯を制御できます。
・Raspberry Pi3の GPIO端子の SPI機能を有効化して 2.8インチ TFT液晶モジュールを接続して駆動する方法
・Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを接続して Pythonで駆動する方法
●動作に必要なライブラリ郡をインストールする。
sudo apt-get update
sudo apt-get install -y build-essential python-dev python-smbus python-pip python-imaging python-numpy git
sudo pip install RPi.GPIO
●サンプルソースをダウンロードして動かす。
cd ~
git clone https://github.com/adafruit/Adafruit_Python_ILI9341.git
cd Adafruit_Python_ILI9341
sudo python setup.py install
●サンプルソースを動かす。
猫のビットマップを液晶画面に表示するサンプル。
cd ~
cd Adafruit_Python_ILI9341
cd examples
sudo python image.py
# Loading image...
# Drawing image
・Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを接続して Pythonで駆動する方法
図形を液晶画面に描画するサンプル。
sudo python shapes.py
・Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを接続して Pythonで駆動する方法
ビットマップを繰り返し描画し、描画時間をコンソール出力するサンプル。
sudo python image_timed.py
Loading image...
Press Ctrl-C to exit
Drawing image
Time to draw image: 0.114010095596
Drawing image
Time to draw image: 0.0648219585419
Drawing image
Time to draw image: 0.0634620189667
Drawing image
Time to draw image: 0.114078044891
Drawing image
Time to draw image: 0.11159491539
Drawing image
Time to draw image: 0.0625901222229
Drawing image
・Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを接続して Pythonで駆動する方法
繰り返し描画しているので画面がちらつく。
●上記の Adafruit版のサンプルソースを FBTFTの結線方法で動く様にする。
ソースリストの image.pyのピン定義部分を書き換えるだけで簡単に対応できそうですが、動きませんでした。なじぇじぇじぇ?
./Adafruit_Python_ILI9341/examples/image.py
# Raspberry Pi configuration.
# DC = 18
# RST = 23
# (FBTFT)
DC = 24
RST = 25
● IOError: [Errno 2] No such file or directory
FBTFTが有効になっていると IOError: [Errno 2] No such file or directoryが出て動きません。
$ sudo python image.py
Traceback (most recent call last):
File "image.py", line 41, in <module>
disp = TFT.ILI9341(DC, rst=RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=64000000))
File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/SPI.py", line 42, in __init__
IOError: [Errno 2] No such file or directory
● SPI接続の 2.8インチ TFT液晶ディスプレイの別バージョン
買う時に特に意識をしていませんでしたが、2つを並べてみて違う事に気が付きました。
どちらもピン配置は同じで、制御方法も同じなのでそのまま差し替えて使う事ができます。
なお、上記の記事では +3.3Vと LED端子との間に抵抗を入れろと書きましたが不要で有る事がわかりました。(どちらの液晶バージョンも不要です)
LED端子は H/Lでバックライトの制御ができると思われ。
※ LED端子は LCD基板上にトランジスタの駆動回路が有るので「1kΩの抵抗」は不要です。また、普通に GPIOの H/Lでバックライトの点灯を制御できます。
TJCTM24028-SPI
2.8 TFT SPI 240*320 v1.1
2.8 TFT SPI 240X320 v1.1
・SPI接続の 2.8インチ TFT液晶ディスプレイの別バージョン
・SPI接続の 2.8インチ TFT液晶ディスプレイの別バージョン
・SPI接続の 2.8インチ TFT液晶ディスプレイの別バージョン
・SPI接続の 2.8インチ TFT液晶ディスプレイの別バージョン
Tags: [Raspberry Pi], [電子工作]
●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)
FWinSdCardImager SDカード イメージ書き込みアプリ、ラズパイの Raspbian OS、Jetson Nanoの Ubuntuの書き込みに便利
ラズパイや Jetson Nano等のワンボードマイコン等への OSイメージの書き込みが簡単にできる
FWinPiFinder ラズベリーパイ IPアドレス発見アプリ。ARPコマンドでラズパイの IPアドレスを探索発見する
Raspberry Piや NVIDIA Jetson Nano等の IPアドレスを MACアドレスの OUI部分を使用して発見する
Raspberry Pi 3系のトラブルであるある第一位の電源トラブル、低電圧警報に関する情報のまとめ
ラズパイ3B系での低電圧警報に関する情報まとめ、コマンドラインやログファイルから低電圧を検知する方法
Raspberry Piで CPUの脆弱性 Spectreと Meltdownの脆弱性をチェックする方法
ラズパイで 2018年初頭に大騒ぎになったスペクターとメルトダウンの CPUの脆弱性をチェックする方法
Raspberry Pi Zero Wを海外通販の Pimoroni等での購入方法、購入できる通販ショップ一覧まとめ
ラズパイゼロW ワイヤレスモデルを海外通販でサクッと簡単に個人輸入で入手。技適通過でも国内販売は常に品切れ
Raspberry Pi 3で安定して使える相性の無い最適な microSDカードの種類のまとめ
ラズパイ3で安定して使える microSDカードを購入する Teamと SanDiskは絶対に買わない
Raspberry Pi 3 Model Bに専用カメラモジュール RaspiCamを接続する方法
ラズパイに専用カメラモジュールを接続して Raspbianで写真の静止画撮影や動画を録画する方法
Raspberry Pi 3の Linuxコンソール上で使用する各種コマンドまとめ
ラズパイの Raspbian OSのコマンドラインで使用する便利コマンド、負荷試験や CPUシリアル番号の確認方法等も
Raspberry Pi 3公式フォーラムの FAQの内容の日本語訳
ラズパイ公式フォーラムの「The Raspberry Pi 3 Model B Q&A thread」の日本語訳
Raspberry Pi 3で GPIO端子の I2C機能を有効化する方法
ラズパイ3の GPIO端子の I2C機能を有効にして各種センサーを繋げる方法まとめ
大人気の CPUボード、Raspberry Pi 3 Model Bで作ってみよう
Raspberry Piの開発環境の構築やタッチパネル付き液晶ディスプレイや各種センサーの使い方まとめ
Raspberry Pi関連はこちらへまとめました
下記以外にも多数のラズパイ関係の記事が有ります。
(I2C制御、GPIO制御、1-Wire制御、シリアル通信、日本語音声合成、日本語音声認識、中国語音声合成、MeCab 形態素解析エンジン、赤外線リモコン制御、秋月 I2C液晶モジュール、KeDei 3.5インチ液晶、HDMI 5インチ液晶、NFCカードリーダ、コマンドライン操作方法等)
Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板
Espressif ESP8266 ESP-12-E NodeMCU V1 ESP12 CP2102
BangGood通販はドローン以外にも面白い商品がまだまだ有った(電子工作編)
レーザー彫刻機、カラー液晶の DIYオシロ、Arduinoや Raspberry Pi用の小型カラー液晶
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2016 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_tft_lcd_2_8inch_spi_with_touch_xpt2046/