1.3inch LCD HAT

来自丢石头百科
Yousimaier17讨论 | 贡献2022年12月20日 (二) 15:31的版本 →‎安装库
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
1.3inch LCD HAT
1.3inch-LCD-HAT
基本信息

分类: 树莓派 LCD 显示屏

品牌: Waveshare

功能简介
特性
  • 显示尺寸:1.3英寸
  • 分辨率:240×240

接口

SPI接口

相关产品

产品简介

产品参数

  • 工作电压: 3.3V
  • 通信接口: SPI
  • 屏幕类型: IPS
  • 控制芯片: ST7789VM
  • 分辨率: 240(H)RGB x 240(V)
  • 显示尺寸: 23.4(H)x 23.4(V)mm
  • 像素大小: 0.0975(H)x 0.0975(V)mm
  • 产品尺寸: 65 x 30.2(mm)

功能引脚

功能引脚 树莓派接口(BCM) 描述
KEY1 P21 按键1GPIO
KEY2 P20 按键2GPIO
KEY3 P16 按键3GPIO
摇杆UP P6 摇杆上
摇杆Down P19 摇杆下
摇杆Left P5 摇杆左
摇杆Right P26 摇杆右
摇杆Press P13 摇杆按下
SCLK P11/SCLK SPI时钟线
MOSI P10/MOSI SPI数据线
CS P8/CE0 片选
DC P25 数据/命令选择
RST P27 复位
BL P24 背光

LCD 及其控制器

本款LCD使用的内置控制器为ST7789VM,是一款240 x RGB x 320像素的LCD控制器,而本LCD本身的像素为240(H)RGB x 240(V),同时由于初始化控制可以初始化为横屏和竖屏两种,因此LCD的内部RAM并未完全使用。
该LCD支持12位,16位以及18位每像素的输入颜色格式,即RGB444,RGB565,RGB666三种颜色格式,本例程使用RGB565的颜色格式,这也是常用的RGB格式
LCD使用四线SPI通信接口,这样可以大大的节省GPIO口,同时通信是速度也会比较快

通信协议

0.96inch lcd module spi.png
注:与传统的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接口

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

RPI open spi.png
然后重启树莓派:

sudo reboot

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

安装库

默认情况下,树莓派 Raspbian 系统已经装好了必要的依赖。仅当编译不正常的时候,才需要手动安装这些函数库,否则请跳过这一段。

  • 安装BCM2835, 打开树莓派终端,并运行一下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
sudo apt-get install wiringpi
#对于树莓派4B可能需要进行升级:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
  • python
#Python2
sudo apt-get update
sudo apt-get install ttf-wqy-zenhei
sudo apt-get install python-pip 
sudo pip install RPi.GPIO
sudo pip install spidev
#Python3
sudo apt-get update
sudo apt-get install ttf-wqy-zenhei
sudo apt-get install python3-pip
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

下载例程

在树莓派终端运行:

sudo apt-get install p7zip-full
wget http://wiki.diustou.com/w/upload/b/bd/1.3inch_LCD_HAT_code.7z
7z x 1.3inch_LCD_HAT_code.7z -r -o./1.3inch_LCD_HAT_code
sudo chmod 777 -R 1.3inch_LCD_HAT_code
cd 1.3inch_LCD_HAT_code

运行测试程序

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

Fbtft移植

Icon-warning.png注意

此fbtft移植教程暂不适用于2020.8月以后的Raspbian版本,如需使用fbtft,请使用老版本的Raspbian系统。

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

  • 打开编辑配置文件,启用一些模块
sudo nano /etc/modules
#添加如下:
spi-bcm2835 
flexfb
fbtft_device

在文件后面添加如下三个语句,第一行是确保屏幕的SPI已经启动并正在运行,第二个命令实际是启动 fbtft 模块。

  • 新建另外一个配置文件,配置 fbtft
sudo nano /etc/modprobe.d/fbtft.conf
  • 将下面语句添加到新建的空白文件中
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 speed=40000000 bgr=1 fps=60 custom=1 height=240 width=240 
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x37,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x12,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0xE0,0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23,-1,0xE1,0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23,-1,0x21,-1,0x29,-3

这里需要注意一下,这里是以options开头的两行语句。
gpios=reset:27,dc:25,cs:8,led:24 这个设置屏幕对应的引脚
height=240 width=240 设置屏幕分辨率大小。

  • 重启一下树莓派
sudo reboot
  • 查看设备可以发现多了一个 fb1 设备,则说明设备已经成功启动了

1in3 lcd fb.png
注意,如果你的系统是命令行界面的,则只会出现fb0

显示一张图片

cd 1.3inch_LCD_HAT_code/fbtft/
sudo python fb.py

显示用户界面

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

sudo apt-get install cmake git

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

cd ~
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
sudo apt-get install cmake
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp

设置开机启动

sudo nano /etc/rc.local

设置开机启动。在 exit 0 前面添加 fbcp&。注意一定要添加"&" 后台运行,否则可能会出现系统不能启动的情况。
1in3 lcd fb5.png
最后在/boot/config.txt 文件中设置用户界面显示尺寸。

sudo nano /boot/config.txt

添加

hdmi_force_hotplug=1
hdmi_cvt=300 300 60 1 0 0 0
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
display_rotate=0

这里是设置系统界面分辨率,最后显示的效果是按照比例缩放显示在1.3inch LCD上。这里设置分辨率为300x300 显示最佳。
启动树莓派后可以发现屏幕已经出现用户界面了。
1.3inch lcd hat fbtftdesktop.png

sudo reboot

播放视频

示例中有一段视频,下面我们可以试一下用屏幕播放视频。首先安装omxplayer

sudo apt-get install omxplayer
  • 播放视频
sudo omxplayer letitgo.mp4

模拟鼠标

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

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

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

  • 配置成开机自启

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

cd .config/
mkdir autostart
cd autostart/
sudo nano local.desktop

加入如下:

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

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

显示屏幕常亮

打开 lightdm.conf

sudo vi /etc/lightdm/lightdm.conf

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

#xserver-command=X

修改为

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

重启

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

选型列表

型号 分辨率 显示接口 面板材质 触摸类型 触摸接口 扬声器 音频输出
0.96inch LCD Module 80x160 SPI TFT - - - -
1.3inch LCD HAT 240x240 SPI IPS - - - -
1.3inch LCD Module 240x240 SPI TFT - - - -
1.3inch OLED (B) 128x64 I2C/SPI OLED(蓝色) - - - -
1.44inch LCD HAT 128x128 SPI TFT - - - -
1.5inch RGB OLED Module 128x128 SPI OLED(65K彩色) - - - -
1.8inch LCD Module 160x128 SPI TFT - - - -
2.23inch OLED HAT 128x32 I2C/SPI OLED(白色) - - - -
2inch LCD Module 320x240 SPI TFT - - - -
3.5HD480320SR TFT LCD 480x320 HDMI TFT 电阻式 SPI -
3.5HS480320SR TFT LCD 480x320 SPI (高速) TFT 电阻式 SPI - -
3.5inch HDMI LCD 480x320 HDMI IPS 电阻式 SPI -
3.5inch RPi LCD (A) 480x320 SPI TFT 电阻式 SPI - -
4.3inch DSI LCD 800x480 DSI IPS 电容式 I2C - -
4HD480800SR IPS LCD 800x480 HDMI IPS 电阻式 SPI -
4inch HDMI LCD 800x480 HDMI IPS 电阻式 SPI - -
4inch Resistive Touch LCD 800x480 8080 IPS 电阻式 SPI - -
5HD800480SR TFT LCD 800x480 HDMI TFT 电阻式 SPI - -
5HD800480UC TFT LCD 800x480 HDMI TFT 电阻式 USB -
5inch HDMI LCD 800x480 HDMI TFT 电阻式 SPI - -
7HD1024600UC IPS LCD 1024x600 HDMI IPS 电容式 USB - -
7HD1024600UCC IPS LCD 1024x600 HDMI IPS 电容式 USB
7HD800480UC TFT LCD 800x480 HDMI TFT 电容式 USB - -
7inch HDMI LCD (H) 1024x600 HDMI IPS 电容式 USB -
Display (1024×600, 7inch, IPS, HD, C) 1024x600 HDMI IPS 电容式 USB - -


FAQ

问题:
设置fbtft没有识别到fb1,或者屏幕不显示?
答复:

这里是两行语句,不能分开成多行。
1.3inch_LCD_HAT_FAQ1



问题:
设置fbtft后为什么程序控制了,报错没有SPI设备
答复:

这是两种控制方式,设置为fbtft方式控制后,SPI被系统占用了,不能再通过操作IO控制屏幕。
需要屏蔽/etc/module中的把

flexfb
fbtft_device

改成

#flexfb
#fbtft_device

然后重启树莓派



问题:
如何播放视频
答复:

播放视频必须先设置fbtft,并且通过f设置fbtft显示桌面后,再运行播放视频命令才会有显示



Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)