深圳晶彩智能ESP32-2432S028R实时观察LVGL9效果

深圳晶彩智能ESP32-2432S028R概述:

深圳晶彩智能出品ESP32-32432S028R为2.8寸彩色屏采用分辨率320x240彩色液晶屏,驱动芯片是ILI9431。板载乐鑫公司出品ESP-WROOM-32,Flash 4M。型号尾部“R”标识电阻膜的感压式触摸屏,驱动芯片是XPT2046。
他的屏幕驱动芯片ILI9431和电阻触碰芯片XPT2046没有采用共用SPI的接法,就不能直接使用TFT_eSPI库驱动,电阻触碰芯片采用第三方XPT2046_Touchscreen库。
这款产品发布后,由于其制作精良价格优惠,受到了国际玩家的普遍追捧,各位大虾称其为“Cheap Yellow Display”,简称CYD。
在这里插入图片描述
这是一个能干活的开发板,用于为您的物联网项目构建彩色显示屏,带有TFT屏幕的单独ESP32板更方便和实用,明显越升二次开发产品的格调。

在这里插入图片描述

完美得到LVGL9和lovyanGFX库支持

LVGL是最流行的免费和开源嵌入式图形库,可为任何MCU, MPU和显示类型创建漂亮的ui。
从消费电子产品到工业自动化,任何应用程序都可以利用LVGL的30多个内置小部件,100多个样式属性,web启发的布局和支持多种语言的排版系统。
LovyanGFX 是一个高效且功能丰富的图形库,专为连接到ESP32、ESP8266和ATSAMD51的显示器设计。它兼容多种通讯协议,如SPI、I2C和8位并行接口,适用于各种LCD、OLED和EPD显示屏。这个库不仅提供了与流行的AdafruitGFX和TFT_eSPI类似的功能,而且在速度和特性上有了显著提升,让开发变得更加便捷。
LGFX_AUTODETECT类中自动识别多款“Cheap Yellow Display”,其中就包括ESP32-2432S028R,本示例就结合这两个库,使用Arduino IDE的方法,用最快捷的方法让各位玩家来适配LVGL9,直接在液晶屏上操作各种组建,把构想变成实景图。

Arduino IDE SDK和LVGL9,LovyanGFX的版本

Arduino IDE SDK 3.0.2版本
在这里插入图片描述
lvgl 9.1.0版本
在这里插入图片描述
LovyanGFX 1.1.16版本
在这里插入图片描述

配置LVGL9库

1,修改 lv_conf.h

LVGL 有一个名为 lv_conf.h 的配置文件。当安装 LVGL 时,请遵循以下配置步骤:
进入已安装的 Arduino 库目录。
进入 lvgl 并复制 lv_conf_template.h 到Arduino 库目录中,该文件应位于 lvgl 库同级文件夹。然后重命名为 lv_conf.h 。
下图可见 lv_conf.h 的布局:
在这里插入图片描述
用Notepad++对 lv_conf.h 修改:
默认设置是“0”,设置为“1”以启用内容。

第15行 #if 1 

如果lvgl设置在屏幕上显示当前帧率(FPS):

第751行 #define LV_USE_SYSMON   1
第764行 #define LV_USE_PERF_MONITOR 1

在这里插入图片描述
本示例全面演示LVGL9的examples,widgets和demos,需要分别置1启用。譬如允许 examples构建示例:

第929行 #define LV_BUILD_EXAMPLES 1

2,移动examples和demos库的位置。
将Arduino\libraries\lvgl里的examples和demos库拖曳到src文件夹里面:
在这里插入图片描述
3,修改lv_examples.h
用Notepad++对C:\Users\用户名\Documents\Arduino\libraries\lvgl\src\examples\lv_examples.h修改为:

第16行 #include "lvgl.h"

用Notepad++对C:\Users\用户名\Documents\Arduino\libraries\lvgl\src\demos\lv_demos.h修改为:

第16行 #include "lvgl.h"

用最简单的程序展示LVGL9的绚丽功能

#include <SPI.h>                                      // SPI Library
#include <lvgl.h>                                     // LVGL9
#define LGFX_AUTODETECT
#include <LovyanGFX.hpp>

static const uint32_t screenWidth = 320;                   // LCD宽度
static const uint32_t screenHeight = 240;                  // LCD高度
static uint8_t draw_buf[screenWidth * screenHeight / 10];  // 缓冲器
static ulong lvgl_tick_millis = millis();                  // tick

#include <examples\lv_examples.h>                 // examples
//#include <examples\widgets\lv_example_widgets.h>  // widgets
//#include <demos\lv_demos.h>                       // demos

LGFX tft;

void init_display() {
  static lv_display_t *disp;
  disp = lv_display_create(screenWidth, screenHeight);
  lv_display_set_flush_cb(disp, flush);
  lv_display_set_buffers(disp, draw_buf, NULL, sizeof(draw_buf),
                         LV_DISPLAY_RENDER_MODE_PARTIAL);
}

void flush(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) {
  uint32_t w = (area->x2 - area->x1 + 1);
  uint32_t h = (area->y2 - area->y1 + 1);
  tft.startWrite();
  tft.setAddrWindow(area->x1, area->y1, w, h);
  //tft.pushColors((uint16_t *)px_map, w * h, true);
  tft.writePixelsDMA((lgfx::rgb565_t *)px_map, w * h);  // LGFX
  tft.endWrite();
  lv_display_flush_ready(disp);
}

void init_touch() {
  lv_indev_t *indev = lv_indev_create();
  lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);  
  lv_indev_set_read_cb(indev, my_touchpad_read);
}

void my_touchpad_read(lv_indev_t *indev, lv_indev_data_t *data) {
  uint16_t touchX, touchY;
  bool touched = tft.getTouch(&touchX, &touchY);
  if (!touched) {
    data->state = LV_INDEV_STATE_REL;
    return;
  }
  if (touchX < screenWidth && touchY < screenWidth) {
    data->state = LV_INDEV_STATE_PR;
    data->point.x = touchX;
    data->point.y = touchY;   
  }
}

void setup() {
  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(TFT_BLUE);
  lv_init();       // lvgl 初始化
  init_display();  // 显示和缓冲初始化
  init_touch();    // 触碰初始化
 
  // demos ------------------------------------------------------------
  //lv_demo_widgets();          // 34% memory used
  //lv_demo_benchmark();        // 38% memory used
  //lv_demo_keypad_encoder();   // 24% memory used
  //lv_demo_music();            // 56% memory used
  //get_started -------------------------------------------------------
  //lv_example_get_started_3(); // 2 button
  //lv_example_get_started_1(); // Hello World
  //lv_example_get_started_2(); // button couter
  //lv_example_get_started_4(); // Slider
  //others ------------------------------------------------------------
  //lv_example_observer_1();    // Slider
  //lv_example_observer_2();    // logged out
  //lv_example_observer_3();    // time & set
  lv_example_observer_4();    // Slider & Button
  //lv_example_observer_5();    // update
  //lv_example_observer_6();    // 10 button
  //widgets -----------------------------------------------------------
  //lv_example_image_3();
  //lv_example_animimg_1();
  //lv_example_arc_1();
  //lv_example_arc_2();
  //lv_example_bar_1();
  //lv_example_bar_2();
  //lv_example_bar_3();
  //lv_example_bar_4();
  //lv_example_bar_5();
  //lv_example_bar_6();
  //lv_example_bar_7();
  //lv_example_button_1();
  //lv_example_button_2();  // 24% memory used
  //lv_example_button_3();
  //lv_example_buttonmatrix_1();
  //lv_example_buttonmatrix_2();
  //lv_example_buttonmatrix_3();
  //lv_example_calendar_1();
  //lv_example_canvas_1 fail
  //lv_example_canvas_2();
  //lv_example_canvas_3();
  //lv_example_canvas_4();
  //lv_example_canvas_5();
  //lv_example_canvas_6();
  //lv_example_canvas_7();
  //lv_example_canvas_8 fail
  //lv_example_chart_1();
  //lv_example_chart_2();
  //lv_example_chart_3();
  //lv_example_chart_4();
  //lv_example_chart_5();
  //lv_example_chart_6();
  //lv_example_chart_7();
  //lv_example_chart_8();
  //lv_example_checkbox_1();
  //lv_example_checkbox_2();
  //lv_example_dropdown_1();
  //lv_example_dropdown_2();
  //lv_example_dropdown_3();
  //lv_example_image_1();
  //lv_example_image_2();
  //lv_example_image_4();
  //lv_example_imagebutton_1_fail
  //lv_example_keyboard_1();
  //lv_example_keyboard_2();
  //lv_example_label_1();
  //lv_example_label_2();
  //lv_example_label_3 fail
  //lv_example_label_4 fail
  //lv_example_label_5();
  //lv_example_led_1
  //lv_example_line_1
  //lv_example_menu_1
  //lv_example_menu_2
  //lv_example_menu_3
  //lv_example_menu_4
  //lv_example_menu_5
  //lv_example_msgbox_1
  //lv_example_obj_1
  //lv_example_obj_2
  //lv_example_roller_1
  //lv_example_roller_2 fail
  //lv_example_roller_3 fail
  //lv_example_scale_1();
  //lv_example_scale_2();
  //lv_example_scale_3();
  //lv_example_scale_4();
  //lv_example_scale_5();
  //lv_example_slider_1();
  //lv_example_slider_2();
  //lv_example_slider_3();
  //lv_example_slider_4();
  //lv_example_span_1();
  //lv_example_spinbox_1();
  //lv_example_spinner_1();
  //lv_example_switch_1();
  //lv_example_table_1();
  //lv_example_table_2();
  //lv_example_tabview_1();
  //lv_example_tabview_2();
  //lv_example_textarea_1();
  //lv_example_textarea_2();
  //lv_example_textarea_3();
  //lv_example_tileview_1();
  //lv_example_tileview_2 fail
  //lv_example_win_1();  
}

void loop() {
  lv_task_handler();
  unsigned long tick_millis = millis() - lvgl_tick_millis;
  lvgl_tick_millis = millis();
  lv_tick_inc(tick_millis);
  yield();
  delay(5);
}

多选下拉列表效果展示:

【深圳晶彩智能ESP32-2432S028R实时观察LVGL9效果】
https://www.bilibili.com/video/BV1tTa3eSExr?vd_source=7350ed30aaee73c2cb1cac26a00a8b30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

以腾讯为例,手把手教你搭建产品帮助中心

一个精心设计的产品帮助中心对于提高用户满意度和体验至关重要。腾讯&#xff0c;作为全球领先的互联网企业&#xff0c;通过其多样化的产品线&#xff08;包括微信、QQ、腾讯游戏、腾讯视频等&#xff09;吸引了亿万用户。下面将以腾讯为例&#xff0c;向您展示如何搭建一个高…

数据库系统原理 | 查询作业1

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql…

进程的控制-ps和kill命令

ps 查看进程信息 部分参数&#xff1a; a : 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序 u: 以用户为主的格式来显示程序状况 x: 显示所有程序&#xff0c;不以 终端机来区分 kill 向指定的进程发送信号 kill 可将指定的信息送至程序。预设的信息为 SIG…

linux下高级IO模型

高级IO 1.高级IO模型基本概念1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 IO多路转接1.5 异步IO 2. 模型代码实现2.1 非阻塞IO2.2 多路转接-selectselect函数介绍什么才叫就绪呢&#xff1f;demoselect特点 2.3 多路转接-pollpoll函数介绍poll优缺点demo 2.4 多路转接-epoll&…

24西安电子科技大学马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS&#xff1a;马院24年院线相对于23年院线增加15分&#xff0c;反映了大家对于马克思主义理论学习与研究的热情高涨&#xff0c;也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

集成学习(一)Bagging

前边学习了&#xff1a;十大集成学习模型&#xff08;简单版&#xff09;-CSDN博客 Bagging又称为“装袋法”&#xff0c;它是所有集成学习方法当中最为著名、最为简单、也最为有效的操作之一。 在Bagging集成当中&#xff0c;我们并行建立多个弱评估器&#xff08;通常是决策…

限时免费!国产Sora快手可灵Web网页端及全新功能上线!国货之光!

大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 快手可灵&#xff08;Kling&#xff09;这回是真的出息了&…

DP:二维费用背包问题

文章目录 &#x1f3b5;二维费用背包问题&#x1f3b6;引言&#x1f3b6;问题定义&#x1f3b6;动态规划思想&#x1f3b6;状态定义和状态转移方程&#x1f3b6;初始条件和边界情况 &#x1f3b5;例题&#x1f3b6;1.一和零&#x1f3b6;2.盈利计划 &#x1f3b5;总结 &#x1…

身体(body)的觉醒:如果你贪婪,给你整个宇宙都不够

佛&#xff0c;是一个梵文的汉语音译词&#xff0c;指觉醒者。 何谓觉醒&#xff1f;什么的觉醒&#xff1f;其实很简单&#xff0c;就是身体的觉醒。 佛的另一个名字&#xff0c;叫菩提&#xff0c;佛就是菩提&#xff0c;菩提老祖&#xff0c;就是佛祖。 一、body&#xff…

跟《经济学人》学英文:2024年07月06日这期:Finishing schools for the age of TikTok

Finishing schools for the age of TikTok Unsure how to be polite at work? Ask a digital etiquette guru 不确定如何在工作中保持礼貌&#xff1f;请教一位数字礼仪大师 “Finishing schools” 是指专门为年轻女性提供礼仪、社交技巧、文化修养等教育的学校&#xff0c;…

WordPress网站添加插件和主题时潜在危险分析

WordPress 最初只是一个简单的博客软件&#xff0c;现在据估计为全球前 1000 万个网站中的 30% 提供支持。WordPress受欢迎的因素之一是可以轻松创建插件和主题来扩展它并提供比默认设置更多的功能。 目前&#xff0c;WordPress 网站列出了 56,000 多个插件以及数千个主题。插件…

【刷题汇总--大数加法、 链表相加(二)、大数乘法】

C日常刷题积累 今日刷题汇总 - day0061、大数加法1.1、题目1.2、思路1.3、程序实现 2、 链表相加(二)2.1、题目2.2、思路2.3、程序实现 3、大数乘法3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日刷题汇总 - day006 1、大数加法 1.1、题目 1.2、思路 读完题,明白大数相加…

【C++干货基地】C++模板深度解析:进阶技巧与高级特性掌握(按需实例化、全特化与偏特化)文末送书

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

带你解刨自动化测试框架详细总结

自动化测试框架概念 自动化测试框架是一个集成体系&#xff0c;这个体系中包含测试功能的函数库、测试数据源、测试对象以及可重用的模块。 框架&#xff08;framework&#xff09;是一个框子——指其约束性&#xff0c;也是一个架子——指其支撑性。是一个基本概念上的结构&…

go zero入门

一、goctl安装 goctl 是 go-zero 的内置脚手架&#xff0c;可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。 # Go 1.16 及以后版本 go install github.com/zeromicro/go-zero/tools/goctllatest检查是否安装成功 $ goctl -v goctl version 1.6.6 darwin/amd64vscod…

String类对象比较:==和equals的具体细节

public class test {public static void main(String[] args) {String name1 "zzz";String name2 "zzz";String name3 new String("zzz");// hashCode() 方法&#xff1a;基于字符串的内容计算哈希值&#xff0c;因此内容相同的字符串对象其 …

macOS查看系统日志的方法

1、command空格键打开搜索框&#xff0c;输入‘控制台’并打开 2、选择日志报告&#xff0c;根据日期打开自己需要的文件就可以

ESP32——物联网小项目汇总

商品级ESP32智能手表 [文章链接] 用ESP32&#xff0c;做了个siri&#xff1f;&#xff01;开源了&#xff01; [文章链接]

win11中配制了系统的环境变量mvn/java,但是mvn/java就是提示不存在的解决方法。

1、已经配制了环境变量&#xff0c;但是提示mvn不存在 2、然后我们在开始程序中查看到cmd&#xff0c;然后以管理员运行&#xff1a; 这样的话&#xff0c;是可以mvn这个命令的&#xff0c;而且只有这种方式是可以的&#xff0c;其它的方式&#xff0c;就算设置了以管理员身份运…

Canary,三种优雅姿势绕过

Canary&#xff08;金丝雀&#xff09;&#xff0c;栈溢出保护 canary保护是防止栈溢出的一种措施&#xff0c;其在调用函数时&#xff0c;在栈帧的上方放入一个随机值 &#xff0c;绕过canary时首先需要泄漏这个随机值&#xff0c;然后再钩爪ROP链时将其作为垃圾数据写入&…