2015年2月15日日曜日

ebayで購入した3.2インチTFT液晶をRaspberry Piで使ってみる


ebayで購入した3.2インチタッチスクリーンTFT液晶をRaspberry Pi B+で使ってみます。

購入したのは「3.2" TFT LCD Module RGB Touch Screen Display Monitor For Raspberry Pi board B+ B」

アマゾンで売られているTFT

前回記事のRFIDキットと同時購入のため、同梱で送られてきました。

謎のDVD・・・
TFT用のファイルでした。使っていません。

注文から11日目に到着。
17.13ドル、約2,000円、送料無料。

Type TFT
SPI Interface
Touch panel control chip XPT2046
Levels Index 65536
LED backlight
Resolution of 320x240 (Pixel)
Size ratio 4:3
Power consumption TBD
Backlight current TBD
Operating Temperature TBD
との説明。

基板にはWaveShare SpotPear 3.2inch RPi LCD(V4)と書かれています。
ただの硬いプラスチックのタッチペンが付いていました。 


製品ページ
http://www.wvshare.com/product/3.2inch-RPi-LCD-B.htm



notro / fbtftは対応液晶が多く、フレームバッファドライバとしてよく使われているようです。
https://github.com/notro/fbtft/
https://github.com/notro/fbtft/wiki

◆接続

といってもこのコネクタに接続するだけ。
(もちろんこの段階で文字は出ません)
透明ケースを使っているのですが上蓋をはずさないと足が届きません。
コネクタを2つ組み合わせて延長する手もあります。

◆まずはRaspberry Piの準備

こちらのページの通りで液晶モニターとして動きました。
参考:TomoSoft Waveshare3.2インチLCDをRaspberryで動作させる

ちなみに2015/2/14現在
uname -a
Linux rpi 3.18.5+ #1 PREEMPT Fri Feb 6 23:35:59 CET 2015 armv6l GNU/Linux

◆起動時、モジュールの自動ロード

/etc/modulesの一番下に以下の行を追加
fbtft_device name=waveshare32b rotate=90

◆利用開始

あとは(windows7のSSH接続のteratermから)
con2fbmap 1 1
(液晶にコンソールを表示)


FRAMEBUFFER=/dev/fb1 startx
(Xウィンドウシステムの起動)
この時点でマウス、キーボードで操作はできます。

◆タッチパネルを有効化

https://github.com/notro/fbtft/wiki/Touchpanel

windows7のSSH接続のTeraTermで操作しています。

sudo apt-get -y install xinput evtest

sudo modprobe ads7846_device x_min=200 x_max=3800 y_min=200 y_max=3900 gpio_pendown=17 swap_xy=1

evtest
(スクリーンの端をタッチした時のx,yの値をメモ)

sudo modprobe ads7846_device -r
(で一旦削除しないと、オプションの変更が有効にならない)

sudo modprobe ads7846_device x_min=200 x_max=3800 y_min=200 y_max=3900 gpio_pendown=17 swap_xy=1
(上記メモに合わせて修正)
ads7846_deviceのオプション

FRAMEBUFFER=/dev/fb1 startx
(Xウィンドウ起動)


Y軸の動きは正しいけど、X軸の動きが逆になっている!!


縦画面設定だと正常。

正常に動かすにはxinput_calibratorを使えばいいらしいが、コンパイルしないといけない。
参考:http://ozzmaker.com/enable-x-windows-on-piscreen/の3番

sudo apt-get install dh-autoreconf
sudo apt-get install libx11-dev libxext-dev libxi-dev x11proto-input-dev
(下の作業でエラーが出て、上2つのインストールが必要だった)

cd ~
git clone https://github.com/tias/xinput_calibrator
cd xinput_calibrator/
./autogen.sh
make
sudo make install
FRAMEBUFFER=/dev/fb1 startx
(Xウィンドウが起動)


(10行下の追記の方が簡単)
液晶で動いているX上でLXTerminalを起動します。
私は、USBキーボードをつなぎ、windowsキーでMENUを開き、カーソルキーで移動、アクセサリの中のLXTerminalを起動しました。

xinput_calibrator
画面に四隅にマークが出るのでペンでタッチ。
キャリブレーションが終わり、X軸反転問題も解決!

再起動するとキャリブレーションの内容が消えてしまう。
xinput_calibrator >a.txt
で、設定値がテキストファイルに保存されるので、それを以下のファイルに書き込む。

追記:Xウィンドウが起動した後の簡単な方法
Xを立ち上げた後、SSH接続のTeraTermをもう1つ立ち上げログイン。
DISPLAY=:0.0 xinput_calibrator
と打ち込むと、液晶でxinput_calibratorが起動しました。
タッチが終わると、TeraTermに設定値が表示されるのでそれを以下のファイルに書き込む。


/usr/share/X11/xorg.conf.d/99-fbturbo.conf

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3784 171 212 3882"
        Option  "SwapAxes"      "0"
EndSection
を追加。自分の場合は↑の数値になりました。

◆起動時の自動化

Raspberry Piを再起動したときの
sudo modprobe ads7846_device x_min=200 x_max=3800 y_min=200 y_max=3900 gpio_pendown=17 swap_xy=1
の自動実行は以下を編集。

/etc/modules

ads7846_device x_min=200 x_max=3800 y_min=200 y_max=3900 gpio_pendown=17 swap_xy=1
を追加
適切なオプションをつければ、カーソルのブレはなくなるのかなぁ・・・


/boot/cmdline.txtの最後に
fbcon=map:10 fbcon=font:VGA8x8
を追加すると、起動時、液晶に自動でコンソールが表示されます。

現在のcmdline.txtは
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:VGA8x8
(1行で)

参考:https://github.com/notro/fbtft/wiki/Boot-console
30分で画面が消えないようにする方法も載っています。

キーボードをつないでいればログインして、Xも起動できますね。
FRAMEBUFFER=/dev/fb1 startx

Xの自動起動の方法もあると思います。


◆コンソールで画像、動画を表示するには

参考:jakaladaのブログ Raspberry Pi でTFT液晶モジュールにいろいろ表示する

例:スライドショー
画像のあるフォルダに移動して
fbi -a -t 3 *.jpg
3秒毎のスライドショー、ctrl+cで終了。
(拡張子の大文字小文字も区別されます)

コンソールでの文字化けは
jfbterm
ターミナルエミュレータ。exitで終了)

インストールしていなければ
sudo apt-get install jfbterm

jfbtermでは日本語ファイルの表示もできますが、前述のfbiはエラー
using "unifont-16", pixelsize=16.67 file=/usr/share/fonts/truetype/unifont/unifont.ttf
ioctl VT_GETSTATE: デバイスに対する不適切なioctlです (not a linux console?)
で動きません。SSH接続のteratermからでも同様でした。



動画の再生は、うまくいっていません。
320x240のmp4ならmplayerで再生出来ましたが。
fbcpとやらでできるのかなぁ・・・


画面横のボタンはGPIOに接続されているので、ボタンに機能を割り当てられる例がネットにあります。
pythonスクリプトを走らせて、ボタンを監視、シャットダウンするとか。



環境:Raspberry Pi B+、RASPBIAN



0 件のコメント:

コメントを投稿