HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2016/12/22

Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶を X Windowやコンソールの画面として使用する方法 Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶を X Windowやコンソールの画面として使用する方法

(ラズパイ3に 320x240 ILI9341 2.8インチ TFT LCDを FBTFTで X-Windowの表示画面として使用する方法。)

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 11Bullseye2021/08/14~2021/11からラズパイにリリースFocal Fossa 20.04 LTS ?
Debian 10Buster2019/06/20~2019/06からラズパイ4対応Bionic 18.04 LTS
Debian 9Stretch2017/08/16~2018/03からラズパイ3B+対応Xenial 16.04 LTS
Debian 8Jessie2015~2016/02からラズパイ3対応Trusty 14.04 LTS
Debian 7Wheezy2013~2016
Debian 6.0Squeeze2011~2014
Debian GNU/Linux 5.0Lenny2009~2012


● Raspberry Pi3に SPI接続の 2.8インチ TFT液晶ディスプレイを自前プログラムで制御する方法

 下記にまとめました。

2016/12/22
Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶 ILI9341を使用する方法
Raspberry Pi 3で SPI接続の 2.8インチ TFT液晶 ILI9341を使用する方法

  ラズパイ3に 320x240 ILI9341 TFT 2.8インチ LCDを SPI接続して自前アプリから直接制御する方法。

● 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
 FBTFTの組み込みで下記の sudo REPO_URI方式は Raspbian Jessieでは使えません。(起動しなくなる)
sudo apt-mark hold raspberrypi-bootloader
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update


● 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接続)

・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する


・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する



 2.8インチ品が無い様なので 2.2インチの商品リンクです。(タッチは有りません)
 ILI9340を使った2.2インチ SPI 240x320 TFT液晶も同様に使えます。

HiLetgo 2.2インチ ILI9341 シリアルSPI TFT液晶モジュール 240*320
ASIN: B01CZL6QIQ

サインスマート 2.2インチ serial LCD モジュール 240*320 SPI TFT ディスプレイ 電子工作
ASIN: B00QV2WDJM
 注意: Arduino用で安いものが有りますが、殆どがパラレル接続なので Raspberry Piには接続できません。(気合と根性で頑張れば使える様にできます。)

●パラレル接続方式の LCDモジュールに外部回路を作成して駆動している例

こじ研 小嶋研究室
 「カラー液晶ディスプレーの接続」で【SPI・パラレル変換】回路を作成して、パラレル接続の LCDモジュールを接続して動かしています。
 (KeDeiの 3.5インチ液晶や FBTFTの液晶も同様の回路が液晶モジュール側の基板に実装されています。)



● SPI接続の 2.8インチ TFT液晶モジュールを FBTFTドライバでコンソールディスプレイとして使用する方法

notro/fbtft
 Linux Framebuffer drivers for small TFT LCD display modules

 FBTFT式の結線方法は下記の様に 8本使用してそれぞれ接続します。
 Adafruit式結線等とは (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の GPIO25
 (5) LCDモジュールの DCを ラズパイの GPIOの GPIO24
 (6) LCDモジュールの SDI(MOSI)を ラズパイの GPIOの MOSI(GPIO10)
 (7) LCDモジュールの SCKを ラズパイの GPIOの SCLK(GPIO11)
 (8) LCDモジュールの LEDを ラズパイの GPIOの +3.3V(3V3)
 (8') LCDモジュールの LEDを ラズパイの GPIOの GPIO18 PWM駆動でバックライトの輝度を調整できる
 ※ LEDと +3.3Vの間に 抵抗を入れる方が良い。(製作例では 1kΩを直列に入れています。)
 ※ LCDモジュールの SDO(MISO)は未接続
 ※ タッチパネル部分と SDカードの配線は未接続です。

・Raspberry Pi3の GPIO端子の SPI機能を有効化して 2.8インチ TFT液晶モジュールを接続して駆動する方法
Raspberry Pi3の GPIO端子の SPI機能を有効化して 2.8インチ TFT液晶モジュールを接続して駆動する方法


・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
 LED駆動の電流制限抵抗を基板上に実装しました。

● 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を終了する。
(再起動不要)

 lsコマンドでフレームバッファの存在を確認する。
$ ls -al /dev/fb*
crw-rw---- 1 root video 29, 0 Jan  4 01:52 /dev/fb0
 まだ fb0しか存在しない。

● modprobeコマンドで fbtft_deviceドライバを組み込む。

 お好みで好きな方を実行します。
# 縦長画面
sudo modprobe fbtft_device name=adafruit28
・sudo modprobe fbtft_device name=adafruit28 rotate=0
sudo modprobe fbtft_device name=adafruit28 rotate=0


# 横長画面 90度回転
sudo modprobe fbtft_device name=adafruit28 rotate=90
・sudo modprobe fbtft_device name=adafruit28 rotate=90
sudo modprobe fbtft_device name=adafruit28 rotate=90


# 横長画面 90度回転 96MHz駆動で 2倍速
sudo modprobe fbtft_device name=adafruit28 rotate=90 speed=96000000
# Adafruit式結線(Reset=GPIO23、DC=GPIO18)
sudo modprobe fbtft_device name=adafruit28 gpios=reset:23,dc:18

 lsコマンドでフレームバッファの存在を確認する。
$ ls -al /dev/fb*
crw-rw---- 1 root video 29, 0 Jan  4 01:52 /dev/fb0
crw-rw---- 1 root video 29, 1 Jan  4 01:52 /dev/fb1
 FBTFTのフレームバッファ fb1が増えた。

● cat /dev/urandomコマンドで液晶画面にランダムな色のドットを描画する。

cat /dev/urandom > /dev/fb1
$ cat /dev/urandom > /dev/fb1
cat: write error: No space left on device
・cat /dev/urandomコマンドで液晶画面にランダムな色のドットを描画する。
cat /dev/urandomコマンドで液晶画面にランダムな色のドットを描画する。



● fbiコマンドでビットマップ画像を液晶画面のフレームバッファ /dev/fb1に描画する。
sudo apt-get update
sudo apt-get install -y fbi
wget https://github.com/adafruit/Adafruit_Python_ILI9341/raw/master/examples/cat.jpg
sudo fbi -d /dev/fb1 -T 1 -a cat.jpg

 ここまで動いたら FBTFTの動作確認は終了です。


● SPIの駆動周波数が高すぎて液晶表示が崩れた例

 SPIの駆動周波数が高すぎると脱調する感じで液晶画面の表示が崩れます。

# 横長画面 90度回転 144MHz駆動で 3倍速
sudo modprobe fbtft_device name=adafruit28 rotate=90 speed=144000000
・SPIの駆動周波数が高すぎて液晶表示が崩れた例
SPIの駆動周波数が高すぎて液晶表示が崩れた例




● Raspbianの起動時に自動的に液晶モジュールがコンソールで動く様にする。

 今度は Raspbianの起動時に自動的に液晶モジュールにフレームバッファが割り当てられる様にします。
 sudo nano /boot/cmdline.txtで行の最後に fbcon=map:1を追加する。
 fbcon=fontでフォントの指定もできる様ですが良く分かりません。
sudo nano /boot/cmdline.txt
 どれか好きなのを末尾に追加します。(plymouth.ignore-serial-consolesの後に追加する)
 fbcon=map:1 fbcon=font:ProFont6x11
 fbcon=map:1 fbcon=font:MINI4x6
 fbcon=map:10 fbcon=font:VGA8x8

 追加例(1行で続いており、改行はしていません。)
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles fbcon=map:1 fbcon=font:ProFont6x11


● /boot/cmdline.txtで指定する Framebuffer Consoleの fbconの設定項目一覧

notro/fbtft - Boot console
/boot/cmdline.txtで指定する Framebuffer Consoleの fbconの設定項目一覧
fbcon=font:<name>
 VGA8x16, 7x14, 10x18, VGA8x8, MINI4x6, RomanLarge, SUN8x16, SUN12x22, ProFont6x11, Acorn8x8, PEARL8x8
fbcon=scrollback:<value>[k]
 It defaults to 32KB
fbcon=map:<0123>
 framebuffer to tty mapping
fbcon=rotate:<n> (設定しても無効 fbtft.confの rotateを使用する。)
 0 - normal orientation (0 degree)
 1 - clockwise orientation (90 degrees)
 2 - upside down orientation (180 degrees)
 3 - counterclockwise orientation (270 degrees)

・ Console font

 FBTFTで 8ドット幅以外のフォントを使う場合に必要な設定。
# if you use a non 8 pixel wide font, this is needed
sudo apt-get install kbd
sudo dpkg-reconfigure console-setup

Encoding to use on the console: <UTF-8>
Character set to support: <Guess optimal character set>
Font for the console: Terminus
Font size: 6x12 (framebuffer only)

・ Console blanking
 Raspbian Jessieの場合は /etc/kbd/configの他に /boot/cmdline.txtにも設定が必要。
$ cat /sys/module/kernel/parameters/consoleblank
600

# Raspbian Jessie
sudo nano /etc/kbd/config
set BLANK_TIME=0

sudo nano /boot/cmdline.txt
set consoleblank=0


● FBTFTの動作に必要なモジュールを起動時に自動で読み込む様にする。

 sudo nano /etc/modulesを編集して下記の 2行を追加します。

sudo nano /etc/modules
spi_bcm2835
fbtft_device

 fbtft_deviceの設定ファイルを sudo nano /etc/modprobe.d/fbtft.confで作成します。

sudo nano /etc/modprobe.d/fbtft.conf
# どれか好きなのを記述します。
# デフォルト(縦画面)
options fbtft_device name=adafruit28

# デフォルト(横画面、90度回転)
options fbtft_device name=adafruit28 rotate=90

# デフォルトと同じ(Reset=GPIO25、DC=GPIO24)
options fbtft_device name=adafruit28 gpios=reset:25,dc:24

# Adafruit式結線(Reset=GPIO23、DC=GPIO18)
options fbtft_device name=adafruit28 gpios=reset:23,dc:18

# 96MHz駆動で 2倍速
options fbtft_device name=adafruit28 speed=96000000

●設定が終わったら再起動する。

sudo reboot

 再起動時に一瞬だけこの様な画面が表示されます。
・FBTFTの動作に必要なモジュールを起動時に自動で読み込む様にする
FBTFTの動作に必要なモジュールを起動時に自動で読み込む様にする



●再起動後、必要なモジュールが正しく読み込まれているかを確認する。

 下記のコマンドで確認する。
lsmod | grep spi
lsmod | grep fbtft
dmesg | grep fbtft

 FBTFTに必要な SPIモジュールが正しく読み込まれている場合
$ lsmod | grep spi
spi_bcm2835             6678  0

 FBTFTに必要な fbtftモジュールが正しく読み込まれている場合
$ lsmod | grep fbtft
fbtft_device           29221  0
fbtft                  26084  2 fb_ili9341,fbtft_device
syscopyarea             2945  1 fbtft
sysfillrect             3443  1 fbtft
sysimgblt               2069  1 fbtft
fb_sys_fops             1309  1 fbtft

 fbtftモジュールが正しく読み込まれている場合
$ dmesg | grep fbtft
[    2.964144] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[    2.969561] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[    2.971477] fbtft_device: GPIOS used by 'adafruit28':
[    2.971488] fbtft_device: 'reset' = GPIO25
[    2.971496] fbtft_device: 'dc' = GPIO24
[    2.971504] fbtft_device: 'led' = GPIO18
 FBTFTの組み込みの失敗例(SPIのドライバ spi_bcm2835が有効になっていない)
$ dmesg | grep fbtft
[    3.040328] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[    3.046290] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[    3.047409] fbtft_device: spi_busnum_to_master(0) returned NULL
[    3.047532] fbtft_device: failed to register SPI device
 FBTFTの組み込みの失敗例(パラレル接続タイプの設定になっている)
pi@raspberrypi:~ $ dmesg | grep fbtft
[    3.596312] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[    3.601318] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[    3.602604] fbtft_device: GPIOS used by 'itdb28':
[    3.602608] fbtft_device: 'reset' = GPIO5
[    3.602611] fbtft_device: 'dc' = GPIO6
[    3.602614] fbtft_device: 'wr' = GPIO12
[    3.602617] fbtft_device: 'cs' = GPIO13
[    3.602620] fbtft_device: 'db00' = GPIO20
[    3.602624] fbtft_device: 'db01' = GPIO21
[    3.602627] fbtft_device: 'db02' = GPIO22
[    3.602630] fbtft_device: 'db03' = GPIO23
[    3.602633] fbtft_device: 'db04' = GPIO24
[    3.602636] fbtft_device: 'db05' = GPIO25
[    3.602639] fbtft_device: 'db06' = GPIO26
[    3.602642] fbtft_device: 'db07' = GPIO27
[    4.827251] fb_ili9325 fb_ili9325.0: fbtft_request_gpios: gpio_request_one('db03'=23) failed with -16


● con2fbmapコマンドで液晶画面 Frame buffer 1をコンソールに切り替える

notro/fbtft - Framebuffer use
# Map console 1 to framebuffer 1, login screen will show up on the display
con2fbmap 1 1

con2fbmap 1
console 1 is mapped to framebuffer 1

# Revert
con2fbmap 1 0
con2fbmap 1 1
# (再起動後に)起動コンソールが表示される
sudo reboot
・con2fbmapコマンドで液晶画面 Frame buffer 1をコンソールに切り替える
con2fbmapコマンドで液晶画面 Frame buffer 1をコンソールに切り替える




● fbtft_device.cの adafruit28 fb_ili9341の定義部分。

notro/fbtft - fbtft/fbtft_device.c
		.name = "adafruit28",
		.spi = &(struct spi_board_info) {
			.modalias = "fb_ili9341",
			.max_speed_hz = 32000000,
			.mode = SPI_MODE_0,
			.platform_data = &(struct fbtft_platform_data) {
				.display = {
					.buswidth = 8,
					.backlight = 1,
				},
				.bgr = true,
				.gpios = (const struct fbtft_gpio []) {
					{ "reset", 25 },
					{ "dc", 24 },
					{ "led", 18 },
					{},
				},
			}
		}


● LEDを GPIO18に接続した場合は PWM駆動で液晶のバックライトの輝度を諧調駆動する場合

 GPIO18を PWNで駆動する事によりデューティー比でバックライトの輝度を調整できます。
 デューティー比なので 0~1024までの値をとります。
 ※ 液晶モジュールの LED端子を ラズパイの GPIO18に接続します。
# GPIO18を PWMモードにする
gpio -g mode 18 pwm

# GPIO18の PWMを 最大駆動してバックライトを最大照度にする
gpio -g pwm 18 1024

# GPIO18の PWMを 最小駆動してバックライトをオフにする
gpio -g pwm 18 0

# GPIO18の PWMを 半分駆動してバックライトの照度を半分にする
gpio -g pwm 18 512

notro/fbtft - Backlight


● RPI3で 2.8インチ液晶モジュールを FBTFTドライバで X-Windowディスプレイとして使用する方法

 RPI3で SPI接続の 2.8インチ TFT液晶モジュールを FBTFTドライバで X-Windowディスプレイとして使用します。

 99-fbturbo.conf設定ファイルを書き換えます。(既存の HDMI出力は無くなります)

sudo nano /usr/share/X11/xorg.conf.d/99-fbturbo.conf
Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0"

        Option          "SwapbuffersWait" "true"
EndSection
 を下記に書き換えます。
Section "Device"
        Identifier      "TFT framebuffer FBDEV"
        Driver          "fbdev"
        Option          "fbdev" "/dev/fb1"
EndSection

sudo startx
 で X-Windowを起動します。

 以後、再起動しても自動的に 2.8インチ液晶画面で X-Windowが起動します。

・2.8インチ液晶モジュールを FBTFTドライバで X-Windowディスプレイとして使用する方法
2.8インチ液晶モジュールを FBTFTドライバで X-Windowディスプレイとして使用する方法




● RPI3で SPI接続の TFT小型液晶の XPT2046タッチパネルを有効にする方法。

 XPT2046を動かすには SPIを有効にして ads7846を使用します。
 (SPIは液晶パネルの接続で既に有効になっているはず。)

● RPI3で SPI接続の 2.8インチ TFT液晶を FBTFTで X-Window表示をし、タッチパネルで操作を行なう方法

notro/fbtft
 Linux Framebuffer drivers for small TFT LCD display modules

 FBTFT式の結線方法は下記の様に 11本使用してそれぞれ接続します。
 (1) LCDモジュールの VCCを ラズパイの GPIOの +3.3V(3V3)
 (2) LCDモジュールの GNDを ラズパイの GPIOの GND(GND)
 (3) LCDモジュールの CSを ラズパイの GPIOの CE0(GPIO8)
 (4) LCDモジュールの RESETを ラズパイの GPIOの GPIO25
 (5) LCDモジュールの DCを ラズパイの GPIOの GPIO24
 (6) LCDモジュールの SDI(MOSI)を ラズパイの GPIOの MOSI(GPIO10)
 (7) LCDモジュールの SCKを ラズパイの GPIOの SCLK(GPIO11)
 (8) LCDモジュールの LEDを ラズパイの GPIOの +3.3V(3V3)
 (8') LCDモジュールの LEDを ラズパイの GPIOの GPIO18 PWM駆動でバックライトの輝度を調整できる
 ※ LEDと +3.3Vの間に 抵抗を入れる方が良い。(製作例では 1kΩを直列に入れています。)
 (9) LCDモジュールの T_CSを ラズパイの GPIOの CE1(GPIO7)
 (10) LCDモジュールの T_DOを ラズパイの GPIOの MISO(GPIO9)
 (11) LCDモジュールの T_IRQを ラズパイの GPIOの GPIO17
 ※ LCDモジュールの T_DINと SDI(MISO)、T_CLKと SCKを液晶基板側で接続しました。(下の写真を参照)
 ※ LCDモジュールの SDO(MISO)は未接続
 ※ SDカードの配線は未接続です。

・RPI3で SPI接続の 2.8インチ TFT液晶を FBTFTで X-Window表示をし、タッチパネルで操作を行なう方法
RPI3で SPI接続の 2.8インチ TFT液晶を FBTFTで X-Window表示をし、タッチパネルで操作を行なう方法


・Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
Raspberry Pi 3で 2.8インチ SPI接続 タッチパネル液晶ディスプレイを使用する
 タッチパネル用の配線を省略する為に、T_DINと SDI(MISO)、T_CLKと SCKを液晶基板側で接続しました。
 (SPIの仕様で SPIデバイス同士は CS信号を独立させれば SDI,SDO,SCLKを共通に配線できる。)

・RPI3で SPI接続の 2.8インチ TFT液晶を FBTFTで X-Window表示をし、タッチパネルで操作を行なう方法
RPI3で SPI接続の 2.8インチ TFT液晶を FBTFTで X-Window表示をし、タッチパネルで操作を行なう方法



● lsコマンドで現在のインプットデバイスの存在を確認する。

ls -l /dev/input/event*
$ ls -l /dev/input/event*
crw-rw---- 1 root input 13, 64 Jan  4 11:46 /dev/input/event0
crw-rw---- 1 root input 13, 65 Jan  4 11:46 /dev/input/event1

●タッチパネルの動作に必要なモジュールを有効化します。

 /boot/config.txtを編集してタッチパネルの動作に必要なモジュールを有効化します。

sudo nano /boot/config.txt
# 2.8inch SPI TFT LCD with Touch Panel XPT2046(SPI, IRQ=GPIO17, CE1)
# タッチパネル用に SPIを有効にする
dtparam=spi=on

# T_IRQを GPIO17に接続して使用する場合 (penirq=17)
dtoverlay=ads7846,penirq=17,speed=10000,penirq_pull=2,xohms=150

●設定が終わったら再起動する。

sudo reboot

● dmesgコマンドでタッチパネルモジュール ads7846の組み込みを確認する。

dmesg | grep ads
 ads7846モジュールが正しく読み込まれている場合
$ dmesg | grep ads
[    2.907413] spi spi0.1: ads7846 spi0.1 10kHz 8 bits mode=0x00
[    2.907909] spi spi0.1: ads7846 spi0.1 10kHz 8 bits mode=0x00
[    4.816466] ads7846 spi0.1: touchscreen, irq 183
 ads7846の組み込みの失敗例(オプションパラメータが正しくないとか)
$ dmesg | grep ads
[    4.461701] pinctrl-bcm2835 3f200000.gpio: /soc/gpio@7e200000/ads7846_pins: invalid brcm,pins value 255
[    4.461842] Modules linked in: ads7846(+) brcmutil hwmon cfg80211 snd_bcm2835 rfkill snd_pcm snd_timer snd spi_bcm2835 bcm2835_gpiomem bcm2835_wdt uio_pdrv_genirq uio i2c_dev fuse ipv6
[    4.462339] [<803fdaf8>] (__spi_register_driver) from [<7f24d01c>] (ads7846_driver_init+0x1c/0x24 [ads7846])
[    4.462381] [<7f24d01c>] (ads7846_driver_init [ads7846]) from [<80009764>] (do_one_initcall+0xa0/0x1ec)
[    4.462533] ads7846: probe of spi0.1 failed with error -22

● lsコマンドでタッチパネルのデバイスの存在を確認する。

ls -l /dev/input/event*
$ ls -l /dev/input/event*
crw-rw---- 1 root input 13, 64 Jan  4 12:17 /dev/input/event0
crw-rw---- 1 root input 13, 65 Jan  4 12:17 /dev/input/event1
crw-rw---- 1 root input 13, 66 Jan  4 12:17 /dev/input/event2
 /dev/input/event2が増えている。

●タッチパネル校正アプリのインストール

 タッチパネルの動作に必要なモジュールをインストールします。
sudo apt-get install -y xinput evtest tslib libts-bin
sudo apt-get install -y fbi

●タッチパネル動作確認アプリを実行する

 sudo evtestでタッチパネル動作確認アプリを実行します。
sudo evtest /dev/input/event2
 または
sudo evtest

$ sudo evtest /dev/input/event2
Input driver version is 1.0.1
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "ADS7846 Touchscreen"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 330 (BTN_TOUCH)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min        0
      Max     4095
    Event code 1 (ABS_Y)
      Value      0
      Min        0
      Max     4095
    Event code 24 (ABS_PRESSURE)
      Value      0
      Min        0
      Max    65535
Properties:
Testing ... (interrupt to exit)

 タッチすると下記の様にイベントやタッチした座標が表示される。
Event: time 1483532706.903019, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1483532706.903019, type 3 (EV_ABS), code 0 (ABS_X), value 1639
Event: time 1483532706.903019, type 3 (EV_ABS), code 1 (ABS_Y), value 1696
Event: time 1483532706.903019, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 65261
Event: time 1483532706.903019, -------------- EV_SYN ------------
Event: time 1483532706.933566, type 3 (EV_ABS), code 1 (ABS_Y), value 1725
Event: time 1483532706.933566, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 65291
Event: time 1483532706.933566, -------------- EV_SYN ------------
Event: time 1483532706.963039, type 3 (EV_ABS), code 0 (ABS_X), value 1658
Event: time 1483532706.963039, type 3 (EV_ABS), code 1 (ABS_Y), value 1719
Event: time 1483532706.963039, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 65307

●タッチパネル動作確認アプリで画面に絵を描く

 タッチパネルのタッチテスト(タッチで画面に絵を描ける)

 sudo ts_testでタッチパネル動作確認アプリを実行します。
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event2 ts_test
 保護シートを貼ったままなのが原因なのか凄い座標飛びします。
・タッチパネル動作確認アプリで画面に絵を描く
タッチパネル動作確認アプリで画面に絵を描く



●タッチパネル校正アプリを実行する

 sudo ts_calibrateでタッチパネル校正アプリを実行します。
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate
$ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate

xres = 240, yres = 320
Took 8 samples...
Top left : X = 1023 Y = 3421
Took 5 samples...
Top right : X = 3222 Y = 3375
Took 5 samples...
Bot right : X = 3160 Y =  913
Took 8 samples...
Bot left : X =  915 Y =  991
Took 5 samples...
Center : X = 2024 Y = 2182
-5.396545 0.062906 -0.002180
360.761719 -0.002518 -0.089851
Calibration constants: -353668 4122 -142 23642880 -165 -5888 65536
 Calibration constants: -353668 4122 -142 23642880 -165 -5888 65536は私の場合のタッチパネル校正値。
・タッチパネル校正アプリを実行する
タッチパネル校正アプリを実行する



●タッチパネルの校正 X-Window System用

 X Window System用のタッチパネルの校正アプリをインストール
sudo apt-get -y install xinput-calibrator

 既存の校正ファイルを削除
sudo rm /etc/X11/xorg.conf.d/99-calibration.conf

 /etc/X11/xorg.conf.d/ディレクトリが無い場合は事前に作成する
ls -l /etc/X11/xorg.conf.d/
# ls: cannot access /etc/X11/xorg.conf.d/: No such file or directory
sudo mkdir /etc/X11/xorg.conf.d/

 タッチパネルの校正 X Window System用
 startxの後に &マークを付ける事で外部の SSH接続から X-Windowを起動して、そのままタッチパネル校正を実行できます。
# 下記の 2行を続けて実行する。
FRAMEBUFFER=/dev/fb1 startx &
DISPLAY=:0.0 xinput_calibrator
# 明示的に座標を指定する方法(横画面の時)
DISPLAY=":0" xinput_calibrator --geometry 320x240

# 明示的に座標を指定する方法(縦画面の時)
DISPLAY=":0" xinput_calibrator --geometry 240x320
・タッチパネル校正アプリを実行する
タッチパネル校正アプリを実行する


・タッチパネル校正アプリを実行する
タッチパネル校正アプリを実行する



 実行に失敗する(校正画面が表示されない)時は再起動する。

●実行例
pi@raspberrypi:~ $ FRAMEBUFFER=/dev/fb1 startx &
[1] 909
pi@raspberrypi:~ $ DISPLAY=:0.0 xinput_calibrator
        Setting calibration data: 0, 4095, 0, 4095
Calibrating EVDEV driver for "ADS7846 Touchscreen" id=6
        current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095

X: user not authorized to run the X server, aborting.

Doing dynamic recalibration:
        Setting calibration data: 162, 3848, 3965, 399
        --> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "162 3848 3965 399" <- 目的の校正値
        Option  "SwapAxes"      "0"
EndSection
pi@raspberrypi:~ $ xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
Couldn't get a file descriptor referring to the console

 校正後にコンソール画面に出た内容(Section "InputClass"行から EndSection行まで)を
/etc/X11/xorg.conf.d/99-calibration.conf
 にテキストファイルで保存する。

sudo nano /etc/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "162 3848 3965 399"
        Option  "SwapAxes"      "0"
EndSection
 ※この "Calibration" "162 3848 3965 399"は私の場合の校正値


●その他

 XRandRで解像度を自在に変更、仮想的に大きな画面を覗き窓的にスクロールして表示して広く使う方法など。
 いわゆるずりずりモードで仮想画面をスクロールして広く使う事ができます。

 fbcp Framebuffer Copyでは、元の Raspberry Pi標準の HDMI出力の画面(/dev/fb0)を 2.8インチ液晶画面(/dev/fb1)にコピー(転写)する事で同じくズリズリモードで使う方法が有ります。

rpi-fbcp Raspberry Pi Framebuffer Copy



● sudo apt-get install some_module_nameで 404 Not Foundエラーが出る場合

  404  Not Found [IP: 5.153.225.207 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main libgs9 armhf 9.06~dfsg-2+deb8u1
  404  Not Found [IP: 5.153.225.207 80]
Err http://mirrordirector.raspbian.org/raspbian/ jessie/main ghostscript armhf 9.06~dfsg-2+deb8u1
  404  Not Found [IP: 5.153.225.207 80]
E: Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/g/ghostscript/libgs9-common_9.06~dfsg-2+deb8u1_all.deb  404  Not Found [IP: 5.153.225.207 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

 解決方法:
sudo apt-get update
 コマンドを実行する。


●おすすめ工具紹介

工具のホーザン ハンダゴテ HS-11 ペンを握る感覚のハンダゴテ
 HS-11 ハンダゴテ:残念ながら販売終了品

 かれこれ 10年以上使用してます。
 HS-11は持ち手部分からコテ先までのリーチが短いのでとても作業がしやすいです。
 コテ先のビットも購入時のまま 10年以上使用していますが、新品同様に滑らかで綺麗なままです。
 (コテ先は購入時の一番最初の火入れの時に良質なハンダを載せて表面になじませるのがコテ先を長持ちさせるコツ。買ったばかりの中華鍋の火入れと空焚きみたいなもんです。違うか。)
 (コテ先以外のヒーター部分の外周は未使用時の保管の問題で錆びさせてしまいました。)
・工具のホーザン ハンダゴテ HS-11 ペンを握る感覚のハンダゴテ
工具のホーザン ハンダゴテ HS-11 ペンを握る感覚のハンダゴテ


・工具のホーザン ハンダゴテ HS-11 ペンを握る感覚のハンダゴテ
工具のホーザン ハンダゴテ HS-11 ペンを握る感覚のハンダゴテ


 刃物(ニッパ類)と半田鏝は良い物を買えとじっちゃが言ってた。
 ちなみにニッパで精密ニッパはスナップオン、荒物用はバーコを使用しています。
 ドライバーはスナップオン、精密ドライバは PBスイスツールを使用しています。

工具のホーザン ハンダゴテ HS-130 重さわずか16g 小型・軽量のスリムタイプ

ホーザン(HOZAN) ハンダゴテ 半田ごて 15w 最高温度400度 小型・軽量スリムタイプ 全長178mm 重量16g H-130
ASIN: B000W9IOQQ

 HS-11の前はこれを使用していましたが、3年程度でコテ先と本体側のネジ切りが馬鹿になって固定しなくなったので HS-11に替えました。
 ハンダゴテ本体は超軽量ですが、その為に ACコードが重たく邪魔に感じます。



Tags: [Raspberry Pi], [電子工作]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

FWinSdCardImager SDカード イメージ書き込みアプリ、ラズパイの Raspbian OS、Jetson Nanoの Ubuntuの書き込みに便利
FWinSdCardImager SDカード イメージ書き込みアプリ、ラズパイの Raspbian OS、Jetson Nanoの Ubuntuの書き込みに便利

  ラズパイや Jetson Nano等のワンボードマイコン等への OSイメージの書き込みが簡単にできる

FWinPiFinder ラズベリーパイ IPアドレス発見アプリ。ARPコマンドでラズパイの IPアドレスを探索発見する
FWinPiFinder ラズベリーパイ IPアドレス発見アプリ。ARPコマンドでラズパイの IPアドレスを探索発見する

  Raspberry Piや NVIDIA Jetson Nano等の IPアドレスを MACアドレスの OUI部分を使用して発見する

Raspberry Pi 3系のトラブルであるある第一位の電源トラブル、低電圧警報に関する情報のまとめ
Raspberry Pi 3系のトラブルであるある第一位の電源トラブル、低電圧警報に関する情報のまとめ

  ラズパイ3B系での低電圧警報に関する情報まとめ、コマンドラインやログファイルから低電圧を検知する方法

Raspberry Piで CPUの脆弱性 Spectreと Meltdownの脆弱性をチェックする方法
Raspberry Piで CPUの脆弱性 Spectreと Meltdownの脆弱性をチェックする方法

  ラズパイで 2018年初頭に大騒ぎになったスペクターとメルトダウンの CPUの脆弱性をチェックする方法

Raspberry Pi Zero Wを海外通販の Pimoroni等での購入方法、購入できる通販ショップ一覧まとめ
Raspberry Pi Zero Wを海外通販の Pimoroni等での購入方法、購入できる通販ショップ一覧まとめ

  ラズパイゼロW ワイヤレスモデルを海外通販でサクッと簡単に個人輸入で入手。技適通過でも国内販売は常に品切れ

Raspberry Pi 3で安定して使える相性の無い最適な microSDカードの種類のまとめ
Raspberry Pi 3で安定して使える相性の無い最適な microSDカードの種類のまとめ

  ラズパイ3で安定して使える microSDカードを購入する Teamと SanDiskは絶対に買わない

Raspberry Pi 3 Model Bに専用カメラモジュール RaspiCamを接続する方法
Raspberry Pi 3 Model Bに専用カメラモジュール RaspiCamを接続する方法

  ラズパイに専用カメラモジュールを接続して Raspbianで写真の静止画撮影や動画を録画する方法

Raspberry Pi 3の Linuxコンソール上で使用する各種コマンドまとめ
Raspberry Pi 3の Linuxコンソール上で使用する各種コマンドまとめ

  ラズパイの Raspbian OSのコマンドラインで使用する便利コマンド、負荷試験や CPUシリアル番号の確認方法等も

Raspberry Pi 3公式フォーラムの FAQの内容の日本語訳
Raspberry Pi 3公式フォーラムの FAQの内容の日本語訳

  ラズパイ公式フォーラムの「The Raspberry Pi 3 Model B Q&A thread」の日本語訳

Raspberry Pi 3で GPIO端子の I2C機能を有効化する方法
Raspberry Pi 3で GPIO端子の I2C機能を有効化する方法

  ラズパイ3の GPIO端子の I2C機能を有効にして各種センサーを繋げる方法まとめ

大人気の CPUボード、Raspberry Pi 3 Model Bで作ってみよう
大人気の CPUボード、Raspberry Pi 3 Model Bで作ってみよう

  Raspberry Piの開発環境の構築やタッチパネル付き液晶ディスプレイや各種センサーの使い方まとめ


Raspberry Pi 3、シングルボードコンピュータ ラズパイ3 Raspberry Pi関連はこちらへまとめました
 下記以外にも多数のラズパイ関係の記事が有ります。
 (I2C制御、GPIO制御、1-Wire制御、シリアル通信、日本語音声合成、日本語音声認識、中国語音声合成、MeCab 形態素解析エンジン、赤外線リモコン制御、秋月 I2C液晶モジュール、KeDei 3.5インチ液晶、HDMI 5インチ液晶、NFCカードリーダ、コマンドライン操作方法等)
Raspberry Pi 3に HDMI接続の 800x480 5インチ TFT液晶を接続して使用する方法
Raspberry Pi Raspbian Jessie 2017-07最終版で LIRCを使って学習リモコン、赤外線リモコンを送受信する方法
Raspberry Pi 3の WiFiを広告ブロック機能付きの無線LANアクセスポイント化 hostapd + dnsmasq編
Raspberry Pi 3の Bluetoothで ブルテザで通信する方法(Bluetooth編)
Raspberry Pi 3で日本語音声を合成して喋らせる方法(OpenJTalk編)
Raspberry Pi 3に USB Micを接続して日本語の音声認識をする方法(Julius編)
Raspberry Pi 3の GPIOに LEDとスイッチを接続して Lチカする方法
Raspberry Pi 3の GPIOに LEDとスイッチを接続してシャットダウンボタンを実装する方法
Raspberry Pi 3で GPIO端子の I2C機能を有効化する方法
Raspberry Pi 3の GPIOに I2C通信方式の気圧計 BMP280を接続する方法
Raspberry Pi 3に I2C通信方式の NFCリーダライタ PN532を接続して NFC FeliCaカードを読む方法
Raspberry Pi 3でネットワーク ライブカメラを構築する方法 Motion編
Raspberry Pi 3でネットワーク ライブカメラを構築する方法 MJPG-streamer編
Raspberry Pi 3 Model Bで動画処理アプリ FFmpegをコンパイルする方法
Raspberry Pi3の X-Window Systemに Windowsのリモートデスクトップから接続する方法
Raspberry Pi3に WebRTCの STUN/TRUNサーバと PeerJSサーバをインストールする方法
【成功版】Raspberry Piで NNPACK対応版の Darknet Neural Network Frameworkをビルドする方法


Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板
Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板

  Espressif ESP8266 ESP-12-E NodeMCU V1 ESP12 CP2102

BangGood通販はドローン以外にも面白い商品がまだまだ有った(電子工作編)
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_fbtft/