ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL演示
陈拓 2022/08/30-2022/09/01
1. 开发板和显示屏
上网看看你就会发现在同等尺寸的情况下彩色显示屏的价格已经低于单色屏。用彩色屏代替单色屏可以提高产品的档次,并降低成本。
彩色屏的使用比单色屏复杂,在软件开发时通常要借助于驱动库,本文介绍用LVGL库驱动基于ST7735控制芯片的TFT LCD显示屏。ST7735的分辨率为132x162或者128x160,我们用的显示屏是128x160的。
1.1 esp32开发板
市面上最常见的esp32开发板。
1.2 TFT LCD显示屏
显示屏细节见《用MicroPython开发ESP32-用TFT-LCD(ST7735S)显示图像》
https://blog.csdn.net/chentuo2000/article/details/126598546?spm=1001.2014.3001.5502
2. LVGL
2.1 概述
LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor。
LVGL是一个C语言编写的免费的开源图形库,其提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗极低内存的情况下构建视觉效果丰富多彩的GUI。LVGL可以驱动单色OLED、彩色TFT显示器、监视器或任何其他显示器。
2.2 LVGL官方ESP32项目
ESP-IDF的官方例程虽然支持LVGL,但不直接支持st7735这样的小屏,所以我们使用LVGL官方的ESP32项目。
https://github.com/lvgl/lv_port_esp32
这是一个ESP32演示项目,展示了支持多个显示控制器和触摸控制器的LVGL v7。演示应用程序是来自lv_examples存储库(https://github.com/lvgl/lv_demos)的lv_demo_widgets项目。
- ESP-IDF版本需要4.2以上。
- 使用的LVGL版本:7.9。
- 使用的lv_examples版本:7.9。
2.3 下载LVGL项目
- 进入esp工作命目录
cd ~/esp/
- 带--recurse-submodules(递归子模块)参数克隆该项目
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
3. 代码修改
- 修改st7735s.h以适合我们的显示屏。
~/esp/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_tft/st7735s.h
#define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 / 1 offset)
#define COLSTART 0 //26
#define ROWSTART 0 //1
原来的参数是针对160x80写的,要将COLSTART和ROWSTART都改为0。
其他地方都不用动。
4. 构建项目
- 进入lv_port_esp32目录
cd ~/esp/lv_port_esp32/
- 刷新esp-idf环境
get_idf
- 设定目标芯片
idf.py set-target esp32
- 配置项目
idf.py menuconfig
1) 将闪存设置为4MB
2) 选择显示屏控制芯片
3) SPI总线选择
默认是HSPI。
ESP32有4组SPI外设。
SPI0和SPI1在内部用于访问ESP32所连接的闪存。
SPI2和SPI3是通用SPI控制器,分别称为HSPI和VSPI。它们向用户开放。
SPI2和SPI3的默认引脚:
这些引脚是可以重新映射的,所以下面我们的接线和默认并不相同。
在我们的实验中没有使用MISO,所以下面的接线空着。
4) 定义引脚
接线表:
LCD ST7735 ESP32
GND GND
VCC 3V3
SCL IO14(CLK)
SDA IO13(MOSI)
RES IO17
DC IO16(DC)
CS1 IO18
BLK 空
5) 启用M5StickC开发板的AXP192电池管理单元
虽然我们不用AXP192,但是如果不开启这个选项编译通不过。以后在正式项目中可以删除不用的代码。
6) 屏幕方向
竖屏
横屏
注意:横竖屏转换时两个选项要同时修改。我们使用横屏。
7) 设置显示字体
因为屏幕小我们选用更小的字体,默认都是16。
8) 是否自动滑动演示
默认时启用以动画方式自动滑动演示。
9) 显示资源使用情况
你可以选择Show CPU and FPS count in the right bottom corner
在屏幕的右下角显示CUP和的占用和动画帧率。
保存,退出。
- 编译项目
idf.py build
- 烧写项目
查看USB转串口的COM口号:
烧写:
idf.py -p /dev/ttyS3 -b 115200 flash
- 启用监视器
idf.py monitor -p /dev/ttyS3
当示例正常运行时,将观察到以下输出:
有3行关于AXP192的错误,因为我们并没有该芯片,忽略这些错误。
5. 演示效果
5.1 基本演示效果
只显示了Hello world。
我们怎么能看到其他的演示效果呢?
5.2 高级效果
在文件/home/ccdc/esp/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_tft/Kconfig中可以看到:
config LV_TFT_DISPLAY_USER_CONTROLLER_ST7735Sbool "ST7735S"select LV_TFT_DISPLAY_CONTROLLER_ST7735Sselect LV_TFT_DISPLAY_PROTOCOL_SPI
只要选择了ST7735S控制器就会选择LV_TFT_DISPLAY_CONTROLLER_ST7735S
在代码里对应defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
#if defined CONFIG_LV_TFT_DISPLAY_MONOCHROME || \defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
在main.c文件的create_demo_application函数中将这个条件去掉:
static void create_demo_application(void)
{/* When using a monochrome display we only show "Hello World" centered on the* screen */
#if defined CONFIG_LV_TFT_DISPLAY_MONOCHROME/* use a pretty small demo for monochrome displays *//* Get the current screen */lv_obj_t * scr = lv_disp_get_scr_act(NULL);/*Create a Label on the currently active screen*/lv_obj_t * label1 = lv_label_create(scr, NULL);/*Modify the Label's text*/lv_label_set_text(label1, "Hello\nworld");/* Align the Label to the center* NULL means align on parent (which is the screen now)* 0, 0 at the end means an x, y offset after alignment*/lv_obj_align(label1, NULL, LV_ALIGN_CENTER, 0, 0);
#else/* Otherwise we show the selected demo */#if defined CONFIG_LV_USE_DEMO_WIDGETSlv_demo_widgets();#elif defined CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODERlv_demo_keypad_encoder();#elif defined CONFIG_LV_USE_DEMO_BENCHMARKlv_demo_benchmark();#elif defined CONFIG_LV_USE_DEMO_STRESSlv_demo_stress();#else#error "No demo application selected."#endif
#endif
}
lv_demo_widgets()、lv_demo_keypad_encoder()、lv_demo_benchmark()和lv_demo_stress()4个函数对应配置选项中的4个演示例子:
在配置中选择4个演示之一,重新编译构建烧写项目,演示是动画的。
你可以改变设置观看其他的演示,这是演示的截图:
5.3 更炫酷的DEMO
如果你有更大的显示屏可以试试https://github.com/lvgl/lv_demos中更炫酷的例子:
- Widgets
- Music player
6. 在ESP-IDF项目中使用lvgl_esp32_drivers
为了能够在ESP-IDF项目中使用lvgl_esp32_drivers需要将lvgl库放在ESP-IDF的components目录中。
6.1 直接复制
简单的方法就是直接复制~/esp/lv_port_esp32/components/下的3个目录:
cp -r ~/esp/lv_port_esp32/components/lv* ~/esp/esp-idf/components/
这样就可以在ESP-IDF的其他例程中使用LVGL了。
6.2 从github上克隆
你也可以用README.md中的方法:
- 用 git submodule add https://github.com/lvgl/lvgl.git components/lvgl在components目录中克隆lvgl存储库
- 用git submodule add https://github.com/lvgl/lvgl_esp32_drivers.git components/lvgl_esp32_drivers命令在components目录中克隆lvgl_esp32_drivers存储库
- lv_demos
如果要使用lv_demos还需要克隆https://github.com/lvgl/lv_demos
lv_demos目录应位于项目中的lvgl目录旁边。
参考文档
- [教程] esp32平台下运行lvgl,使用屏幕st7735s 128*128详细配置
https://www.bilibili.com/read/cv14795850 - esp32-lvgl-(st7789/ILI9341)(基于esp-idf框架)
https://blog.csdn.net/qq_37429313/article/details/122085869
ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL演示相关推荐
- 用ESP学习单片机之Arduino_Esp-32s获取2.8‘‘TFT LCD屏幕的触摸数据_ILI9341_SPI_XPT2046
简介 点亮该屏幕的笔记,既然都能显示了,肯定要获取触摸位置啊,从实物图中可知该屏幕的触摸IC为XPT2046 Arduino IDE需配置esp32开发环境 开发板:ESP 32 触摸过程 这里实现的 ...
- ESP32快速实现3.2英寸TFT LCD中jpeg图像(ILI9341)
此视频中,将向您展示了如何在ESP32中使用3.2英寸SPI TFT LCD.为了显示jpeg,您需要一个ESP32,Adafruit库,SPIFF和jpeg解码器. 要获得高速SPI,您需要使用正确 ...
- 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)
前言 之前使用ESP32 来控制TFT屏幕显示动图时,找到现有的工具,需要先将动图gif格式一帧帧转为jpg格式,再将一帧帧的jgp转为hex十六进制格式,整个过程好麻烦.现用python写了脚本 ...
- 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)
简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...
- TFT LCD显示原理详解
<什么是液晶> 我们一般认为物体有三态:固态.液态.气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一): ...
- TFT LCD显示屏在阳光下可读
显示屏作为公共场所广泛使用的电器,高亮度液晶显示屏越来越被人们所选择. 那么为什么越来越多的人想选择高亮度TFT LCD 显示屏? 阳光下的可读性显示屏使我们即使在阳光直射下也能看到清晰锐利的图像或视 ...
- 哪些原因会导致TFT LCD显示屏偏色?
tft lcd显示屏常常使用的智能产品中,而凡是电子产品在长期使用的过程中就容易出现不同的问题.今天我们就来谈一下,tft lcd显示屏使用久后会发黄的情况,那些原因会导致致TFT LCD显示屏变黄. ...
- AT32驱动TFT LCD显示示例
1.1 案例 TFT LCD显示 1.1.1 简介 TFT LCD液晶显示屏是薄膜晶体管型液晶显示屏,TFT液晶每个像素都可以单独控制,因而每个节点都相对独立,并可以连续控制,这不仅提高了显示的反应速 ...
- ESP8266-Arduino编程实例-2.8寸TFT LCD驱动(ILI9341控制器)
2.8寸TFT LCD驱动(ILI9341控制器) 液晶显示器 (LCD) 是一种平板显示器或其他电子调制光学设备,它利用液晶与偏振器的光调制特性.液晶不直接发光,而是使用背光或反射器来产生彩色或单色 ...
最新文章
- linux存储--页面置换算法(十一)
- CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版
- [ATF]-ATF的代码学习篇-一篇就够了
- java基础系列:集合总结(4)
- PHP程序员学习路线
- 修复png bug的脚本
- AI-多云互联,网络通信的“自动驾驶
- e站app里站hosts_硬核干货区 | E站的国际站运营知识星球上线啦
- Quartus II软件 基本使用(一)仿真一位全加器
- 汇编语言程序设计基础知识
- 物联网从业者必须知道的知识:IMSI号介绍与解析
- 计算机表格增加,怎样在表格中新增一行和上排一样格式的表格。
- 大地水准面 地球椭球体 大地基准面 地图投影理解
- 富勒x100滚轮无法调节音量怎么办?
- MySQL分组查询,获取分组后数据
- 唯独百度搜索打不开,其他网站软件上网正常的解决办法记录
- 王姨劝我学HarmonyOS鸿蒙2.0系列教程之五布局方法点击响应!
- iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
- 绩效考核的哲学窘境【人人都是产品经理:9030】
- Triangle Fun UVA - 11437(一个数学定理 + 三角形求面积)
热门文章
- 软件测评中心▏软件验收正式测试和非正式测试优缺点有哪些?
- 机巧围棋(CleverGo)项目总览及介绍
- 一个开源的网易云音乐api项目
- 2021年中国数据安全行业发展现状及未来发展前景分析:数据安全市场快速增长[图]
- android 小视频 应用,短视频应用专题 - 只给你好看的短视频合集 - Android 应用 - 【最美应用】...
- Oracle EBS R12 AP模块主要表结构整理
- 锁存器,D触发器和寄存器的关系与区别
- 21届秋招电信云笔试[技术类B卷]
- 史上最全亚马逊申诉模板!!!!
- 【原创】Visio软件绘图功能极佳----记我的第一次Visio软件绘制时序图