树莓派1.44寸显示屏使用教程

产品概述

提供树莓派程序驱动、FBTFT移植教程

产品参数

  • 工作电压: 3.3V
  • 通信接口: SPI
  • 屏幕类型: TFT
  • 控制芯片: ST7735S
  • 分辨率: 128*128 (Pixel)
  • 显示尺寸: 25.5*26.5(mm)
  • 像素大小: 0.129(W)*0.219(H)(MM)
  • 产品尺寸 65*30.2(mm)

功能引脚

功能引脚树莓派接口(BCM)描述
KEY1P21按键1GPIO
KEY2P20按键2GPIO
KEY3P16按键3GPIO
摇杆UPP6摇杆上
摇杆DownP19摇杆下
摇杆LeftP5摇杆左
摇杆RightP26摇杆右
摇杆PressP13摇杆按下
SCLKP11/SCLKSPI时钟线
MOSIP10/MOSISPI数据线
DCP25数据/命令选择
CSP8/CE0片选
RSTP27复位
BLP24背光

LCD 及其控制器

ST7735S是一款132*162像素的LCD控制器,而本产品为128*128像素的LCD,因此在显示上做了一些处理:水平方向从第二个像素点开始显示,这样就可以保证显示的时候LCD中RAM对应的位置与实际位置是一致的。
该LCD支持12位,16位以及18位每像素的输入颜色格式,即RGB444,RGB565,RGB666三种颜色格式,本例程使用RGB565的颜色格式,这也是常用的RGB格式
LCD使用四线SPI通信接口,这样可以大大的节省GPIO口,同时通信是速度也会比较快

通信协议


注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏,该表格详见Datasheet Page 66。
RESX为复位,模块上电时拉低,通常情况下置1;
CSX为从机片选, 仅当CS为低电平时,芯片才会被使能。
D/CX为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据。
SDA为传输的数据,即RGB数据。
SCL为SPI通信时钟。
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHA = 0,在第一个跳变沿进行数据采集;
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。
从图中可以看出,当SCLK第一个下降沿时开始传输数据,一个时钟周期传输8bit数据,使用SPI0,按位传输,高位在前,低位在后。

树莓派

提供C语言与python例程

开启SPI接口

  • 打开树莓派终端,输入以下指令进入配置界面
  1. sudo raspi-config
  2. 选择Interfacing Options -> SPI -> Yes 开启SPI接口


然后重启树莓派:

  1. sudo reboot

请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

安装库

  • 安装BCM2835, 打开树莓派终端,并运行以下指令
  1. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
  2. tar zxvf bcm2835-1.60.tar.gz
  3. cd bcm2835-1.60/
  4. sudo ./configure && sudo make && sudo make check && sudo make install
  5. # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
  1. sudo apt-get install wiringpi
  2. #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
  3. wget https://project-downloads.drogon.net/wiringpi-latest.deb
  4. sudo dpkg -i wiringpi-latest.deb
  5. gpio -v
  6. # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
  • python
  1. sudo apt-get update
  2. sudo apt-get install python-pip
  3. sudo pip install RPi.GPIO
  4. sudo pip install spidev

下载例程

在树莓派终端运行:

  1. apt-get install p7zip-full
  2. wget http://www.waveshare.net/w/upload/f/fa/1.44inch-LCD-HAT-Code.7z
  3. 7z x 1.44inch-LCD-HAT-Code.7z
  4. sudo chmod 777 -R 1.44inch-LCD-HAT-Code
  5. cd 1.44inch-LCD-HAT-Code/RaspberryPi/

运行测试程序

  • C语言
  1. cd c
  2. make clean
  3. make
  4. sudo ./main
  • 对于树莓派4B及raspbian_lite-2019-06-20系统之后需要设置如下,按键才能正常输入
  1. sudo nano /boot/config.txt
  2. #添加如下:
  3. gpio=6,19,5,26,13,21,20,16=pu
  • python
  1. cd python
  2. sudo python main.py
  3. sudo python key_demo.py

fbtft移植

Framebuffer 是用一个视频输出设备从包含完整的帧数据的一个内存缓冲区中来驱动一个视频显示设备。简单的来说,就是使用一个内存区来存储显示内容,改变内存的数据就可以改变显示的内容。
在 github 上有一个开源工程:https://github.com/notro/fbtft ,完整的实现了framebuffer驱动,让树莓派完美支持 tft 液晶。下面来介绍一下如何使用 fbtft 驱动 1.44inch LCD HAT.
打开编辑配置文件,启用一些模块

  1. sudo nano /etc/modules
  2. #添加如下:
  3. spi-bcm2835
  4. fbtft_device

添加第一行是确保屏幕的 SPI 已经启动并正在运行,第二个命令实际是启动 fbtft 模块。
新建另外一个配置文件,配置 fbtft

  1. sudo nano /etc/modprobe.d/fbtft.conf

将下面语句添加到新建的空白文件中,

  1. options fbtft_device name=adafruit18_green gpios=reset:27,dc:25,cs:8,led:24 speed=40000000 bgr=1 fps=60 custom=1 height=128 width=128 rotate=180

这里需要注意一下,name 需要根据屏幕的主控芯片型号选择,1.44inch LCD HAT 的主控芯片是 ST7735s。fbtft 是支持这个型号的。这里选择 adafruit18_green,因为芯片是和这个一样的。
gpios=reset:27,dc:25,cs:8,led:24 这个设置屏幕对应的引脚,这个根据板子的原理图设置。
height=128 width=128 rotate=180 设置屏幕分辨率大小和显示方向。
此时重启一下树莓派.如果屏幕显示全黑则屏幕已经工作了。

  1. sudo reboot

查看设备可以发现多了一个 fb1 设备,则说明设备已经成功启动了

注意,如果你的系统是命令行界面的,则只会出现fb0

显示用户界面

最后我们将用户界面到 1.44inch LCD HAT 上,虽然这个屏幕只有 128x128 分辨率,我们还是试一下将用户界面显示到屏幕上看下有什么样的效果。
显示用户界面只需将 fb0 上的内容直接拷贝到 fb1 上,fb0 和 fb1 同步。
首先安装一下工具软件

  1. sudo apt-get install cmake git

使用 github 上的开源代码来实现这个功能,下载代码并安装。

  1. cd ~
  2. git clone https://github.com/tasanakorn/rpi-fbcp
  3. cd rpi-fbcp/
  4. mkdir build
  5. cd build/
  6. cmake ..
  7. make
  8. sudo install fbcp /usr/local/bin/fbcp

设置开机启动。在

  1. sudo nano /etc/rc.local

设置开机启动。在 exit 0 前面添加 fbcp&.
注意一定要添加"&" 后台运行,否则可能会出现系统不能启动的情况。

最后在/boot/config.txt 文件中设置用户界面显示尺寸。

  1. sudo vi /boot/config.txt
  2. #添加
  3. hdmi_force_hotplug=1
  4. hdmi_cvt=128 128 60 1 0 0 0
  5. hdmi_group=2
  6. hdmi_mode=1
  7. hdmi_mode=87
  8. display_rotate=1

启动树莓派后可以发现屏幕已经出现用户界面了。最后显示效果图。

如果屏幕闪烁或者出现花屏,可以在/boot/config.txt中添加如下:

  1. enable_uart=1

模拟鼠标

模块上面板子一个摇杆和三个按键,我们可以用来控制树莓派的鼠标

  • 安装库并下载并运行例程
  1. sudo apt-get install python-xlib
  2. sudo pip install PyMouse
  3. wget http://www.waveshare.net/w/upload/d/d3/Mouse.7z
  4. 7z x Mouse.7z
  5. sudo python mouse.py
  • 该命令无法在命令行界面运行。对于树莓派4B及raspbian_lite-2019-06-20系统之后需要设置如下,按键才能正常输入
  1. sudo nano /boot/config.txt
  2. #添加如下:
  3. gpio=6,19,5,26,13,21,20,16=pu

使用摇杆上下左右,就可以看到鼠标在动了。

  • 配置成开机自启

注意不要加到/etc/rc.local中,因为rc.local在系统还没有进入桌面之前会执行,而PyMouse模块在命令行界面运行的话会报错没有鼠标这个事件,所以我们需要执行如下:

  1. cd .config/
  2. mkdir autostart
  3. cd autostart/
  4. sudo nano local.desktop

加入如下:

  1. [Desktop Entry]
  2. Type=Application
  3. Exec=python /home/pi/mouse.py

然后重新启动树莓派,即可使用按键控制鼠标了。

显示屏幕常亮

打开 lightdm.conf

  1. sudo vi /etc/lightdm/lightdm.conf

修改 lightdm.conf 找到[SeatDefaults]段下的’xserver-command’,取消注释,修改为如下:

  1. #xserver-command=X

修改为

  1. xserver-command=X -s 0 -dpms
  • -s # –设置屏幕保护不启用
  • dpms 关闭电源节能管理

重启

  1. sudo reboot

其他

有兴趣弄游戏机的小伙伴们可以参考下面这两个链接,这里不再详细讲解。
https://www.sudomod.com/forum/viewtopic.php?f=11&t=5371&start=10
https://pi0cket.com/guides/tiny-software-for-tinypi/#more-99