Zero LCD HAT (A)

来自Waveshare Wiki
跳转至: 导航搜索
Zero LCD HAT (A)
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
显示尺寸 0.96英寸、1.3英寸
分辨率 160×80、240×240
' 无特性,不解释
' 无特性,不解释
接口 SPI

说明

产品简介

本产品主屏 1.3 英寸 LCD 屏幕,内置 ST7789驱动芯片,使用 SPI 接口通信,支持 65K 颜色显示,240×240 分辨率,清晰显示。双副屏 0.96 英寸LCD屏幕,内置 ST7735S 驱动芯片,使用 SPI 接口通信,160×80 分辨率,可用于显示关键信息、状态指示或小型图形
提供完善的配套树莓派例程。

产品参数

参数名称 参数
供电电压 3.3V
工作电流 840mA
产品尺寸 65.00 x 31.00(mm)
屏幕类型 0.96inch LCD 1.3inch LCD
控制芯片 ST7735S ST7789
通信接口 SPI
分辨率 160 × 80 240 × 240
显示尺寸 21.7mm × 10.8mm 23.4mm × 23.4mm
像素大小 0.1356mm × 0.135mm 0.0975mm × 0.0975mm

功能引脚

功能引脚 Board物理引脚序号
VCC 3.3V
GND GND
MOSI0 38
MOSI1 19
SCLK0 40
SCLK1 23
CS0 12
CS1 24
CS2 26
DC0 15
DC1 7
DC2 29
RST0 13
RST1 18
RST2 16
BL0 35
BL1 33
BL2 32
KEY1 22
KEY2 37

硬件说明

通信协议

  • SPI通信协议

0.96inch lcd module spi.png
从上的得知使用的是4线SPI通信,查阅数据手册可以得到如下的通信时序图,以传输RGB556为例:
注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏。
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,按位传输,高位在前,低位在后。

树莓派使用教程

开启SPI接口

PS:如果使用的是Bullseye分支的系统,需要将”apt-get“改成“apt",Bullseye分支的系统只支持Python3。
  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config
选择Interfacing Options -> SPI -> Yes 开启SPI接口

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

sudo reboot

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

安装库

Python

#python2
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo apt-get install python-numpy
sudo pip install RPi.GPIO
sudo pip install spidev
#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo -H pip3 install --upgrade luma.oled
sudo -H pip3 install --upgrade luma.lcd
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

下载测试程序

打开树莓派终端,执行:

sudo apt-get install unzip -y
sudo wget https://www.waveshare.net/w/upload/5/59/Zero_LCD_HAT_A_Demo.zip
sudo unzip ./Zero_LCD_HAT_A_Demo.zip
cd Zero_LCD_HAT_A_Demo

运行测试程序

python

  • 进入python程序目录
cd python/example
  • 运行示例程序
# 运行0inch96屏幕1:
sudo python 0inch96_spi0ce0.py

# 运行0inch96屏幕2:
sudo python 0inch96_spi0ce1.py

# 运行1inch3屏幕:
sudo python 1inch3_spi1ce0.py
(运行此命令前需要将dtoverlay=spi1-1cs添加到config.txt文件以打开SPI1设备)

# 同时运行两个0.96inch屏幕:
sudo python double_0inch96_spi.py
或
sudo python3 CPU.py

# 运行按键程序:
sudo python3 key_double.py

FBCP移植

注意:如果运行了FBCP移植,则不可以再运行1.3inch屏幕的其他程序,比如python显示程序,二者会有冲突。

下载驱动

打开树莓派终端,执行:

sudo apt-get install unzip -y
sudo apt-get install cmake -y
sudo wget https://www.waveshare.net/w/upload/1/1b/Zero_LCD_HAT_A_fbcp.zip
sudo unzip ./Zero_LCD_HAT_A_fbcp.zip
sudo cp Zero_LCD_HAT_A.dtbo /boot/overlays/
sudo wget https://www.waveshare.net/w/upload/6/66/Rpi-fbcp.zip
sudo unzip ./Rpi-fbcp.zip
cd rpi-fbcp/
sudo mkdir build
cd build
sudo cmake ..
sudo make -j8
sudo install fbcp /usr/local/bin/fbcp
sudo ./fbcp

编辑config.txt文件

sudo nano /boot/config.txt

屏蔽下图对应的语句
FBCP CLOSE.jpg
在config.txt最后加入以下代码

dtparam=spi=on
dtoverlay=Zero_LCD_HAT_A

hdmi_force_hotplug=1
max_usb_current=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 240 240 60 6 0 0 0
hdmi_drive=2
dtoverlay=spi1-1cs
display_rotate=0

设置开机自启动

sudo cp ~/rpi-fbcp/build/fbcp /usr/local/bin/fbcp
sudo nano /etc/rc.local

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

随后需要进行重启

sudo reboot

重启后即可正常显示

API详解(请选读c或python部分)

RaspberryPi系列均可以共用一套程序,因为他们都是嵌入式系统,兼容性比较强。
程序分为底层硬件接口、中间层液晶屏驱动、上层应用;

Python(适用于Raspberry Pi)

适用于python和python3
对于python而言他的调用没有C复杂

lcdconfig.py

  • 模块初始化与退出的处理:
def module_init()
def module_exit()
 注意:
 1.这里是处理使用液晶屏前与使用完之后一些GPIO的处理。
2.module_init()函数会在液晶屏的init()初始化程序自动调用,但module_exit()需要自行调用
  • GPIO读写:
def  digital_write(pin, value)
def  digital_read(pin)
  • SPI写数据
def spi_writebyte(data)

关于旋转设置

如果在python程序中你需要设置屏幕旋转,可以通过语句im_r= image1.rotate(270)设置。

im_r= image1.rotate(270)
旋转效果,以1.14为例, 按顺序分别为0°, 90°,180°, 270°
LCD Rotate.jpg

画图GUI

由于python有一个image库pil官方库链接,他十分的强大,不需要像C从逻辑层出发编写代码,可以直接引用image库进行图像处理,以下将以1.54inch LCD为例,对程序中使用了的进行简要说明

  • 需要使用image库,需要安装库
sudo apt-get install python3-pil  安装库

然后导入库

from PIL import Image,ImageDraw,ImageFont

其中Image为基本库、ImageDraw为画图功能、ImageFont为文字

  • 定义一个图像缓存,以方便在图片上进行画图、写字等功能
image1 = Image.new("RGB", (disp.width, disp.height), "WHITE")

第一个参数定义图片的颜色深度,定义为"RGB"说明是RGB888彩色图,第二个参数是一个元组,定义好图片的宽度和高度,第三个参数是定义缓存的默认颜色,定义为“WHITE”。

  • 创建一个基于image1的画图对象,所有的画图操作都在这个对象上
draw = ImageDraw.Draw(image1)


  • 画线
draw.line([(20, 10),(70, 60)], fill = "RED",width = 1)

第一个参数为一个4个元素的元组,以(20,10)为起始点,(70,60)为终止点,画一条直线,fill="RED"表示线为红色,width=1表示线宽为1个像素。


  • 画框
draw.rectangle([(20,10),(70,60)],fill = "WHITE",outline="BLUE")

第一个参数为一个4个元素的元组,(20,10)矩形左上角坐标值,(70,60)为矩形右下角坐标值,fill= "WHITE"表示内部填充黑色,outline="BLUE"表示外边框为蓝色。


  • 画圆
draw.arc((150,15,190,55),0, 360, fill =(0,255,0))

在正方形内画一个内切圆,第一个参数为一个4个元素的元组,以(150,15)为正方形的左上角顶点,(190,55)为正方形右下角顶点,规定矩形框的水平中位线为0度角,角度顺时针变大,第二个参数表示开始角度,第三个参数标识结束角度,fill =(0,255,0)表示线为绿色
如果不是正方形,画出来的就是椭圆,这个实际上是圆弧的绘制。

除了arc可以画圆之外,还有ellipse可以画实心圆

draw.ellipse((150,65,190,105), fill = (0,255,0))

实质是椭圆的绘制,第一个参数指定弦的圆外切矩形,fill =(0,255,0)表示内部填充颜色为绿色,如果椭圆的外切矩阵为正方形,椭圆就是圆了。

  • 写字符

写字符往往需要写不同大小的字符,需要导入ImageFont模块,并实例化:

    Font1 = ImageFont.truetype("../Font/Font01.ttf",25)
    Font2 = ImageFont.truetype("../Font/Font01.ttf",35)
    Font3 = ImageFont.truetype("../Font/Font02.ttf",32)

为了有比较好的视觉体验,这里使用的是来自网络的免费字体,如果是其他的ttf结尾的字库文件也是支持的。
注:每字库包含的字符均有不同;如果某些字符不能显示,建议根据字库使用的编码集来使用
写英文字符直接使用即可,写中文,由于编码是GB2312所以需要在前面加个u:

draw.text((40, 50), 'WaveShare', fill = (128,255,128),font=Font2)
text= u"微雪电子"
draw.text((74, 150),text, fill = "WHITE",font=Font3)

第一个参数为一个2个元素的元组,以(40,50)为左顶点,字体为Font2,fill为字体颜色,你可以直接让 fill = "WHITE",因为常规的颜色的值已经定义好了,当然你也可以使用fill = (128,255,128),括号里对应的是RGB三种颜色的值,这样你就能精确的控制你想要的颜色。第二句显示微雪电子,使用Font3,字体颜色为白色。

  • 读取本地图片
image = Image.open('../pic/LCD_1inch28.jpg')

参数为图片路径。

  • 其他功能

python的image库十分强大,如果需要实现其他的更多功能,可以上官网学习http://effbot.org/imagingbook pil,官方的是英文的,如果感觉对你不友好,当然我们国内也有很多的优秀的博客都有讲解。

FAQ

a) 检查打开了SPI;

b) 检查背光引脚是否有输出,无输出可尝试悬空BL控制线;


如果运行wiringPi例程正常,再运行python或者BCM2835可能会屏幕无法正常刷新,因为bcm2835库是树莓派cpu芯片的库函数,底层是直接操作寄存器,而wiringPi库和python的底层都是通过读写linux系统的设备文件操作设备,可能导致GPIO口异常,重启树莓派可完美解决。


C语言控制可以使用函数Paint_SetRotate(Rotate);但是在C语言中翻转的角度只能为0、90、180、270度;Python可以调用rotate(Rotate)来翻转任意角度。


对于有些树莓派系统可能并没有 image 这个库,运行:sudo apt-get install python-imaging 安装 python-imaging 库


售后

联系人:吴工
EMAIL:3005496359@qq.com
电话:0755-83043099
QQ:3005496359
微信:扫下方二维码添加
Wxy.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证