http://www.wvshare.com/product/3.2inch-RPi-LCD-B.htm これっぽいものを ebay から買ってみた。2000円ぐらい http://www.ebay.com/itm/181663639529
320x240 WaveShare SpotPear V3 Touch panel control chip XPT2046 というやつ。ピクセル数的にものすごく解像度低いがとりあえず液晶を試してみたかった。
表示するまで
基本的には https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi これの通りするのだが、一部手順が古いためハマる。
fb0 -> fb1 に (HDMI からTFT側に)
sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf
FBTFT kernel module を使えるように firmware update をかける。ちなみにLinux のカーネルバージョンが4系になる。SPI の DMA 転送が有効化される。
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
これは 50MB ぐらいダウンロードする。が https://github.com/notro/rpi-firmware から前もって Download Zip したやつを使うこともできる。notro-rpi-firmware-master.zip としてファイルをダウンロードして、ローカルネットワーク内から scp で転送しておいたとする、そのうえで
unzip -d "/tmp/rpi-firmware" notro-rpi-firmware-master.zip sudo FW_REPOLOCAL="/tmp/rpi-firmware/rpi-firmware-master" SKIP_DOWNLOAD=1 rpi-update
とすれば良い。
/etc/modules に追記
spi-bcm2708 fbtft_device name=waveshare32b gpios=dc:22,reset:27 speed=48000000 waveshare32b width=320 height=240 buswidth=8 init=-1,0xCB,0x39,0x2C,0x00,0x34,0x02,-1,0xCF,0x00,0XC1,0X30,-1,0xE8,0x85,0x00,0x78,-1,0xEA,0x00,0x00,-1,0xED,0x64,0x03,0X12,0X81,-1,0xF7,0x20,-1,0xC0,0x23,-1,0xC1,0x10,-1,0xC5,0x3e,0x28,-1,0xC7,0x86,-1,0x36,0x28,-1,0x3A,0x55,-1,0xB1,0x00,0x18,-1,0xB6,0x08,0x82,0x27,-1,0xF2,0x00,-1,0x26,0x01,-1,0xE0,0x0F,0x31,0x2B,0x0C,0x0E,0x08,0x4E,0xF1,0x37,0x07,0x10,0x03,0x0E,0x09,0x00,-1,0XE1,0x00,0x0E,0x14,0x03,0x11,0x07,0x31,0xC1,0x48,0x08,0x0F,0x0C,0x31,0x36,0x0F,-1,0x11,-2,120,-1,0x29,-1,0x2c,-3
/boot/cmdline.txt を変更
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=waveshare32b fbtft_device.gpios=dc:22,reset:27 fbtft_device.bgr=1 fbtft_device.speed=48000000 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=90
ここまでやって reboot すればTFT側に表示がでる、はず。
タッチパネルを有効にする
書いてある通りパッケージをいれる。
sudo apt-get -y install xinput evtest libts-bin wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb sudo rm /usr/share/X11/xorg.conf.d/99-calibration.conf sudo reboot
/boot/config.txt に追記。XPT2046 は ADS7846 (-> TSC2046) 互換の中華コントローラらしいので ADS7846 を指定したらいいっぽい?
dtoverlay=ads7846,speed=1000000,penirq=17,swapxy=1
/etc/X11/xinit/xinitrc に追加 (軸補正)
DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0
startx
dpi が恐しく低いので指定して起動したほうが良い。とはいえフォントサイズしか変化しないので、アイコンとかはデカいまま。
startx -- -dpi 60
タッチパネルキャリブレーションは以下でできるが、結果を conf に書いておかないとreboot時に失われる。
DISPLAY=:0.0 xinput_calibrator
備考
タッチパネル座標と画面座標をあわせるためには
- /boot/cmdline.txt の fbtft_device.rotate=90
- reboot 必要
- /boot/config.txt の swapxy=1 (と rotate=...)
- reboot 必要
- "Evdev Axis Inversion" 1 0
- X が起動していれば xinput -set-prop は即時反映されるので reboot いらない
あたりをしっかりする必要があるが、これが結構面倒で試行錯誤した。とはいえあんまりパターンがあるわけではないので適当にやれば良い。
links
ref. https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi
ref. https://github.com/notro/fbtft/issues/215
ref. http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
ref. http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/