・2016/12/22
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 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液晶ディスプレイを自前プログラムで制御する方法
下記にまとめました。
・2016/12/22
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接続 タッチパネル液晶ディスプレイを使用する

2.8インチ品が無い様なので 2.2インチの商品リンクです。(タッチは有りません)
ILI9340を使った2.2インチ SPI 240x320 TFT液晶も同様に使えます。
注意: 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 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

# 横長画面 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コマンドで液晶画面にランダムな色のドットを描画する。

● 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の駆動周波数が高すぎて液晶表示が崩れた例

● 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の動作に必要なモジュールを起動時に自動で読み込む様にする

●再起動後、必要なモジュールが正しく読み込まれているかを確認する。
下記のコマンドで確認する。
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をコンソールに切り替える

● 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ディスプレイとして使用する方法

● 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表示をし、タッチパネルで操作を行なう方法

・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表示をし、タッチパネルで操作を行なう方法

● 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 ペンを握る感覚のハンダゴテ

刃物(ニッパ類)と半田鏝は良い物を買えとじっちゃが言ってた。
ちなみにニッパで精密ニッパはスナップオン、荒物用はバーコを使用しています。
ドライバーはスナップオン、精密ドライバは 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の書き込みに便利
ラズパイや 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_fbtft/