树莓派Pico3.5寸显示屏使用教程

资料

配套资料

文档

程序

开发软件

Pico快速上手

说明

产品简介

专门为Raspberry Pi Pico 设计的3.5 英寸电阻触摸屏扩展板,板载电阻式触摸控制芯片 XPT2046 和 Micro SD 卡槽,使用 SPI 接口通信

产品特性

  • 480 × 320 分辨率液晶屏,65K 彩色,能清晰地显示彩色图片
  • 板载触摸控制芯片,相比用 AD 引脚控制触摸板的方案,触摸效果更流畅
  • 板载 Micro SD 卡槽,方便放入图片直接进行显示
  • 背光灯可编程控制,更省电
  • 提供完善的配套资料手册 (Raspberry Pi Pico C/C++ 和 MicroPython 等示例程序)

产品参数

我的参数
工作电压5V分辨率480 × 320 Pixels
通信接口SPI显示尺寸73.44 × 48.96 mm
显示面板IPS像素大小0.153 × 0.153 mm
控制芯片ILI9488产品尺寸86.00 × 57.20 mm

硬件说明

引脚分布

Pico-ResTouch-LCD-3.5使用的内置控制器为ILI9488,是一款480 x 320像素的RGB LCD控制器,测试例程使用RGB565的颜色格式,该LCD是16Bits的并口屏幕,硬件上使用了并口转串口芯片 ,这样可以大大的节省GPIO口,测试最大SPI写速度是60MHz

 

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

产品尺寸


硬件连接

LCDPico功能
VCCVSYS电源输入
GNDGND电源地
SDIO_CLKGP5SDIO接口SCK引脚,从设备时钟输入
LCD_DCGP8数据/命令控制引脚(高电平数据,低电平命令)
LCD_CSGP9LCD片选引脚(低电平有效)
LCD_CLKGP10SPI通信CLK引脚,从设备时钟输入
MOSIGP11SPI通信MOSI引脚,从设备数据输入
MISOGP12SPI通信MISO引脚,从设备数据输出
LCD_BLGP13背光控制
LCD_RSTGP15LCD复位引脚(低电平有效)
TP_CSGP16触摸片选引脚(低电平有效)
TP_IRQGP17触摸中断引脚(低电平有效)
SDIO_CMDGP18SDIO接口的CMD引脚
D0GP19SDIO接口的D0引脚
D1GP20SDIO接口的D1引脚
D2GP21SDIO接口的D2引脚
SD_CS/D3GP22SDIO接口的CS/D3引脚

Pico-ResTouch-LCD-2.8 004.jpg

注意Pico接入方向,Pico的USB应同MicroSD卡同一方向

环境搭建

1. Arduino IDE安装Pico SDK , 点击菜单栏的Tools->Board->Boards Manager后搜索Raspberry Pi Pico ,找到对应库并点击Install进行安装 ,如下图所示

2. VScode(Cmake)编译环境请点击The C/C++ SDKget-start文档的9.2. Building on MS Windows进行参考并安装

3.请参考Micropython官方文档搭建python环境,在Thonny的Tools->Options->Interprete选择Raspberry Pi Pico设备,如下图所示

程序下载

1. 点击下载示例程序
2. VScode(Cmake)工程请使用VScode软件打开
3. 解压示例程序,Arduino示例程序直接点击.ino打开, Micorpython示例程序请上传到Pico文件系统,如图所示

例程使用

Arduino

1. 打开Arduino IDE或打开.ino示例程序,点击菜单栏选择Tools->Board->Raspberry Pi Pico.如下图所示

2. 安装TFT_eSPI库,点击菜单栏Tools->Manage Libraty,搜索TFT_eSPI后点击安装

3. 配置驱动文件, 打开 Arduino 库文件目录,通常在C:\Users\xxxx\Documents\Arduino\libraries\TFT_eSPI\ , 对于ResTouch-LCD-3.5 , 将TFT_eSPI库中(User_Setups\Setup60_RP2040_ILI9341.h) (User_Setup_Select.h) 的两个文件使用示例程序文件夹Arduino\ResTouch-LCD-3.5中的文件替换,ResTouch-LCD-2.8同理,如图所示

4. 选择菜单栏File-Examples->TFT_eSPI->480*320下的示例程序,再点击Edit下方upload下载代码到Pico

VScode(Cmake)

  • 使用VScode打开示例程序中的c工程,编译下载即可

Micropython

  • 打开Thonny IDE,将python/2inch8/下代码保存到Pico文件系统,如图所示,ResTouch-LCD-3.5同理


代码简析

本例程在运行后,先显示一些字符、图案,然后再显示图片,最后再显示触摸画板功能,C例程适配Pico-ResTouch-LCD-2.8和Pico-ResTouch-LCD-3.5. 在主函数中,我们将三个主要函数按顺序放置且将TP_DrawBoard();放在死循环中即可实现上述功能

GUI_Show();
LCD_Show_bmp(Bmp_ScanDir , Lcd_ScanDir);	
TP_DrawBoard();

在使用LCD_ShowBMP用于显示图片实验前,先把资料中PIC文件夹下中的图片复制到SD卡根目录 ,然后将SD卡插入屏幕背面的SD卡卡槽里开始下载程序验证即可

  • 在这里要注意的是SD卡要是FAT格式的,对应不同屏幕需要不同像素大小图片,2.8寸图片像素大小是320×240,3.5寸像素大小是480×320,图片要是24位色深.BMP格式


本产品使用的显示控制器为ST7789(2.8inch)/ILI9488(3.5inch),我们需要通过SPI通讯协议对该控制器进行初始化,初始化函数都写在LCD_Driver.c里,可以看到在lcd_test.c文件中

 System_Init();//系统初始化、配置串口波特率、SPI及相关引脚等
  LCD_SCAN_DIR Lcd_ScanDir = SCAN_DIR_DFT; //设置扫描方式 
  LCD_Init( Lcd_ScanDir, 200);//初始化屏幕,并传递了扫描方式及背光亮度

关于屏幕显示的功能函数都写在LCD_GUI.c里,每个函数的功能及传递的参数在源代码里都有解释,需要使用时直接调用即可

  • 画点
void GUI_DrawPoint(POINT Xpoint, POINT Ypoint, COLOR Color,
                   DOT_PIXEL Dot_Pixel, DOT_STYLE DOT_STYLE)
  • 画线(实线或虚线)
void GUI_DrawLine(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                  COLOR Color, LINE_STYLE Line_Style, DOT_PIXEL Dot_Pixel)
  • 画矩形(空心或实心)
void GUI_DrawRectangle(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                       COLOR Color, DRAW_FILL Filled, DOT_PIXEL Dot_Pixel)
  • 画圆(空心或实心)
void GUI_DrawCircle(POINT X_Center, POINT Y_Center, LENGTH Radius,
                    COLOR Color, DRAW_FILL  Draw_Fill , DOT_PIXEL Dot_Pixel)
  • 显示字符
void GUI_DisChar(POINT Xpoint, POINT Ypoint, const char Acsii_Char,
                 sFONT* Font, COLOR Color_Background, COLOR Color_Foreground)
  • 显示字符串
void GUI_DisString_EN(POINT Xstart, POINT Ystart, const char * pString,
                      sFONT* Font, COLOR Color_Background, COLOR Color_Foreground )
  • 显示数字
void GUI_DisNum(POINT Xpoint, POINT Ypoint, int32_t Nummber,
                sFONT* Font, COLOR Color_Background, COLOR Color_Foreground )
  • 显示时间
void GUI_Showtime(POINT Xstart, POINT Ystart, POINT Xend, POINT Yend,
                  DEV_TIME *pTime, COLOR Color)


在这里也稍微做下解释,本例程显示BMP图片首先也是通过SPI协议来读取SD卡中BMP格式的图片数据,再把这些数据以图像显示出来即可
在lcd_test.c文件中,主要使用以下两个函数显示图片:

SD_Init();//SD卡初始化
LCD_Show_bmp(bmp_scan_dir,lcd_scan_dir);//显示BMP图片

这些函数都写在LCD_Bmp.c里,实际上从SD卡中读取特定文件名的BMP格式的图片数据再调用我们自己写好的显示函数把这些数据重新“表达”为图像
这种方式不管在哪个平台,其原理都是类似的,感兴趣的朋友可以查阅相关资料对照相关代码认真研究一下
在LCD_Touch.c文件中:

  TP_Init( Lcd_ScanDir );//触摸板初始化,传递参数为扫描方式
  TP_GetAdFac();//校准屏幕
  TP_Dialog();//清屏
  TP_DrawBoard();//开启画板

该例程运行后,屏幕右边会有五种颜色,系统默认为黑色,触摸以选择画笔颜色;点击AD按钮,按屏幕提示点击红色+号对屏幕进行校准;点击右上角 CLEAR按钮对画板清屏
触摸实验默认使用了四组校准值,可以满足四个方向的画笔操作,在右边有五种颜色的选择,画笔大小默认为 9 个像素点
关于触摸屏的相关函数都写在LCD_Touch.c里,且其功能及传递参数的用途均有解释

程序提供了像素点大小为

   Width 5,Height 8    font8
   Width 7,Height 12    font12
   Width 11,Height 16    font16
   Width 14,Height 20    font20
   Width 17,Height24    font24

五种大小的字体库

  • 如果你需要不同大小不同字体的字符,可以根据资料中提供的字模提取软件生成自己想要的字库
  • 事实上你也可以Image2Lcd图片取模软件将不同大小不同格式的图片转换成数组数据,再用我们写好的函数显示出来
  • 资料中给出了所有控制芯片的数据手册供大家参考,如果你想更加深入的了解底层函数为什么这样写,就去数据手册看看吧!