关于树莓派的视频输出除了HDMI和 VNC基本上没有其他的方法,如果你手上刚好有一块TFT模块的话就可以当做系统显示屏(framebuff),虽然分辨率不高,但足以满足一些cmd的需求。
github上项目:notro/fbtft,很好的实现了spi的tft屏幕显示framebuff。github地址:https://github.com/notro
老徐拉灯(另一个博主)早在2014年发了一篇博文讲述了直接编译进内核的方法:http://blog.csdn.net/xdw1985829/article/details/39583239
PokeBox(另一个博主)也分享了另一种在线模块化的安装的方法:http://jingyan.eeboard.com/article/73720
博主也是参考了这两个前辈的博文才完成了这次实验的,本文也是根据这两篇博文重新排版编写的。虽然两篇博文使用的是早些年的RPI一代,但是经过博主的实验,对于现在的RPI3和(无论是完整版还是lite版)最新的系统(内核4.9)也是通用的,博主有两块RPI(RPIA+和RPI3)都可以用一样的办法将notro的fbtft使用起来。
1.打开SPI
最新系统的SPI默认还是关闭的,需要在raspi-config中打开,在终端输入 :
sudo raspi-config
将spi接口enable就好了。
2:连接wifi或者你的以太网
这个有很多种方法,关于wifi连接这里给出一个简单的方法:
sudo nano /etc/network/interfaces
修改wlan0的配置,保存退出。
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "路由器名称"
wpa_psk "路由器密码"
3:下载和安装驱动
依次在终端输入cmd指令
sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update
sudo chmod +x /usr/bin/rpi-update
sudo REPO_URI=https://github.com/notro/rpi-firmware
sudo rpi-update
4:硬件连线
如果安装了wiringPi的话可以使用指令:
gpio readall
查看GPIO口,这里我们使用的是BCM的编号(最边两列的编号)
对应的TFT接口:
接口分别有:
VCC-> 接电源(3.3V 有些可以接5V)
GND-> 接地线(0V)
NC-> 不接(无意义)
CLK-> SPI时钟,接SCLK(BCM11引脚)
SDA-> SPI数据,接MOSI(BCM10引脚)
RS-> 指令控制口,可以随便接一个GPIO口(我这里接BCM24引脚)
RST-> 复位,可以随便接一个GPIO口,也可以直接接VCC(3.3V)(我这里接BCM23引脚)
CS-> 片选口,可以随便接一个GPIO口,也可以直接接GND(0V)(我这里接0V)
当然,你手上的屏幕引脚丝印也有可能对不上号,不过基本都是一致的,比如有:DC(也就是RS),SDA(也就是SDO),SCL(也就是CLK),CE(也就是CS),也有可能有LED、BL这样的背光接口,直接接VCC,也就是3.3V好了。
5:屏幕初始化
初始化也就是加载驱动,驱动名字叫做 fbtft_device
sudo modprobe fbtft_device name=adafruit18 gpios=reset:23,dc:24 speed=16000000
参数name指的是屏幕驱动IC的型号,博主使用的驱动的是型号是st7735r,对应的name就是afruit18,其他型号的别称请对照https://github.com/notro/fbtft/blob/master/fbtft_device.c
参数gpios是用于设置其他IO的,硬件上reset连接了BCM23,所以这里就填写gpios=reset:23,同理还可以设置dc和led(背光)接口,speed设置的是spi总线速度,一般不要超过32M就行。
还有其他参数eg:rotate 翻转,fps 刷屏率,可以参考https://github.com/notro/fbtft/wiki/fbtft_device
如果输入指令后屏幕变黑了,那么恭喜你,这就代表屏幕被成功的驱动了,已经完成了80%的进度了!(最怕就是没有驱动或者初始化不成功)
如果没有你的IC驱动可以尝试使用init参数手动初始化。
输入:
con2fbmap 1 1
显示终端(lite系统)
FRAMEBUFFER=/dev/fb1 startx
显示图形界面(完整版系统)
效果如图,这是fb1的图像。
如果需要卸载驱动,指令:
rmmod fbtft_device
(下面操作可有可无)
6:复制fb0的内容到fb1上
新系统没有git和cmake,所以先需要安装一下:
sudo apt-get install git cmake
然后依次下载安装项目
https://github.com/notro/fbtft/wiki/Framebuffer-use#framebuffer-mirroring
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp
启动:fbcp &
7:添加启动脚本
关于添加启动脚本的方法有很多,比如在/etc/rc.local 添加,这个是启动系统和自动加载脚本,这里提供一种登录后加载脚本的方法 ~/.bash_login,两种方法应用场合有所不同。博主更加推荐使用.bash_login 脚本+自动登录的方法。
同理,进入设置自动登录,博主用的是lite版本,只能自动登录并进入终端。
sudo raspi-config
然后编写脚本
sudo nano ~/.bash_login
编写cmd指令即可:
sudo modprobe fbtft_device name=adafruit18 gpios=reset:23,dc:24 speed=16000000
或者su -l pi -c "env FRAMEBUFFER=/dev/fb1 startx &"
su -l pi -c "env con2fbmap 1 1 &"