- 2016-04-18 (Mon) 21:57
- ハードウェア
Raspberry Pi 3 に Ubuntu MATE 16.04 beta 2 を入れて Amazon で売ってたタッチパネルな 3.2インチ LCD を付けてそこで X を起動するとかいうのをやってみたのでメモ.
とりあえず,件の LCD は裏を見たら WaveShare の 3.2inch RPi LCD (B) とかいうものだった.これは FBTFT というドライバでサポートされている.最近はカーネルに吸収されているらしいので,インストールの手間はなく設定の仕方を参考にすれば動く.
ということで,まずは Ubuntu MATE を入れる.最新は 16.04 beta 2 だった.イメージを落としてきて,解凍して,microSDHC に書き込んで,ラズパイに挿して,電源入れて,タイムゾーン・キーボード・アカウント名の設定を入れて,どうせ固定アカウントで立ち上がればいいので自動ログインに設定して, デスクトップが出てきたら目立つ "Raspberry Pi Information" をポチって "Resize Now" でファイルシステムを microSDHC 全体に広げて,再起動.その後にターミナルで sudo apt-get update やって sudo apt-get upgrade やって暫く放置して sudo reboot で一段落.
そして LCD 用の設定にとりかかる.ググると結構やり方が見つかるけれど,新しいお作法(overlay)なのが出てこないので FBTFT の情報を参考にする.
まず,LCD の device tree overlay のファイルを取ってくる.自前で書いて用意もできるようだけど,面倒なので既存のを利用させていただく.
sudo apt-get install git git clone https://github.com/swkim01/waveshare-dtoverlays.git sudo cp waveshare-dtoverlays/waveshare32b-overlay.dtb /boot/overlays/
次に,下記の dtoverlay の設定 3つを /boot/config.txt の末尾に記述する.まず SPI を有効にするために bcm2835 の設定を入れて,それから上で手に入れた LCD 用の設定を入れて,最後にタッチスクリーンの設定を入れる.LCDはデフォルトだと縦長なので,横長になるように回転の設定を入れる.WaveShare の製品ページを見るとタッチスクリーンのコントローラは XPT2046 らしいのだけど,これは よくある ADS7846 とコンパチなので ADS7846 のを使う.GPIO のピン番号は 17 で,圧の最大は 255 で,抵抗はテキトウに 80 としておいて,縦横を入れ替える swapxy の設定を入れて,x軸とy軸の最大最小値はそれっぽい値にしとく(後で別にキャリブレーション値を乗せる).
dtoverlay=spi-bcm2835 dtoverlay=waveshare32b,rotate=90,swapxy=1 dtoverlay=ads7846,penirq=17,pmax=255,xohms=80,swapxy=1,xmin=300,xmax=3795,ymin=300,ymax=3795
これで一応動くけれど,タッチスクリーンの左右が反転しているのでそれを xinput で対処+α のために準備:
sudo apt-get install xinput evtest xinput-calibrator
左右反転とついでにキャリブレーションをするために,次の内容を /usr/share/X11/xorg.conf.d/99-calibration.conf として保存する:
Section "InputClass" Identifier "calibration" MatchProduct "ADS7846 Touchscreen" Option "Calibration" "3819 265 134 3842" Option "SwapAxes" "0" EndSection
そして LCD に X を起動するのに邪魔なファイルを消しておく(ホームに移動しちゃう):
sudo mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf ~
そして再起動してあげると LCD にスプラッシュが表示される.また,タッチスクリーンを触ると HDMI 側に出ているであろう X のカーソルが動く.
LCD で X が動くかテストするために,テキトウなターミナルで次を実行(ターミナル 1 を LCD に持ってくる).
con2fbmap 1 1
キーボードで Ctrl+Alt+F1 としてターミナル 1 に移ると LCD にターミナルが出るはず.そのままログインして次のコマンドで X を起動する(/dev/fb1 が LCD のフレームバッファ).
FRAMEBUFFER=/dev/fb1 startx
これで X が LCD 内に起動すれば OK .
あとはデフォルトで LCD のフレームバッファを X が使うように,次の内容の /usr/share/X11/xorg.conf.d/98-fbdev.conf を作る:
Section "Device" Identifier "bla" Driver "fbdev" Option "fbdev" "/dev/fb1" EndSection
そして再起動したら LCD に X が立ち上がるようになっている.
ついでに起動時のコンソールも LCD に表示したいなら, fbcon=map:10 fbcon=font:VGA8x8 を /boot/cmdline.txt の行の末尾に追記すればいい.
閑話休題.
だがしかし,320x240 って小さいな…… というか UI が大きすぎる.サイズを調整しないと使いにくそう.もしくは HDMI 側のフレームバッファをコピーしてくる形にするべきか.とりあえずここらは TODO.
- Newer: ことはじめ