当前位置: 首页 > news >正文

深圳晶彩智能ESP32-3248S035R使用LovyanGFX实现手写板

深圳晶彩智能ESP32-3248S035R介绍

深圳晶彩智能出品ESP32-3248S035R为3.5寸彩色屏采用分辨率480x320彩色液晶屏,驱动芯片是ST7796。板载乐鑫公司出品ESP-WROOM-32,Flash 4M。型号尾部“R”标识电阻膜的感压式触摸屏,驱动芯片是XPT2046。

LovyanGFX库介绍

LovyanGFX是一个为Arduino平台设计的图形驱动库,它专门用于驱动TFT LCD显示屏和触摸屏。这个库是由lovyan03开发的,旨在提供一个易于使用且高效的图形界面开发体验。

LovyanGFX支持多种微控制器平台,包括但不限于ESP32、ESP8266、SAMD21、SAMD51和RP2040。这使得开发者可以在多种硬件上实现图形用户界面的设计与实现。此外,LovyanGFX基于Adafruit-GFX-Library开发,这是一个广泛使用的图形库,为各种硬件平台提供了基础的图形操作功能。

使用LovyanGFX,开发者可以通过简单的API调用来控制显示屏,进行图形绘制和文字显示等操作。它提供了一系列的绘图函数,如绘制线条、圆形、矩形、位图以及使用不同的字体显示文本等。这些功能使得开发者能够快速构建出具有图形界面的应用程序。

LovyanGFX的另一个优点是它对ESP-IDF的支持非常友好。ESP-IDF是乐鑫官方提供的开发框架,以其高效的执行效率而受到开发者的青睐。使用ESP-IDF,开发者可以充分利用ESP32的强大功能,如集成的Wi-Fi和蓝牙模块,以及丰富的外设支持。这对于开发需要图形界面的商业产品尤其有利,因为ESP-IDF支持的功能更加全面,而且可以用于商业化产品,而使用Arduino开发的产品通常需要开源其代码。

此外,LovyanGFX的GitHub页面提供了详细的文档和示例代码,帮助开发者更好地理解和使用这个库。开发者还可以在WSL上使用SDL2进行模拟显示,这样就不需要反复烧录到硬件上查看效果,大大提高了开发效率。

总之,LovyanGFX是一个功能强大、易于使用且高效的图形驱动库,非常适合Arduino平台上的图形界面开发。无论是新手还是有经验的开发者,都可以利用这个库快速构建出具有吸引力的图形用户界面。

ESP32-3248S035R管脚分布

               MOSI	MISO	CLK	  CS	   DC 	RST

ST7796 12 13 14 15 2 -1
XPT2046 12 13 14 33

platformIO.ini设置

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduinoupload_speed = 921600
board_build.f_flash = 80000000L
board_build.flash_mode = dio
monitor_speed = 115200
;upload_port = COM3board_build.mcu = esp32
upload_protocol = esptool
; change MCU frequency
board_build.f_cpu = 240000000L
lib_ldf_mode = deep
board_build.partitions = huge_app.csvbuild_flags = -DCORE_DEBUG_LEVEL=3-DBOARD_HAS_PSRAM-mfix-esp32-psram-cache-issue    lib_deps =  lovyan03/LovyanGFX@^1.1.12            

写字板程序

#include <Arduino.h>
#define LGFX_USE_V1
#include <LovyanGFX.hpp>class LGFX : public lgfx::LGFX_Device
{lgfx::Panel_ST7796 _panel_instance;lgfx::Bus_SPI _bus_instance;lgfx::Light_PWM _light_instance;lgfx::Touch_XPT2046 _touch_instance;//----------------------------------------------------------------------
public:LGFX(void){{                                    auto cfg = _bus_instance.config(); cfg.spi_host = SPI2_HOST;          cfg.spi_mode = 0;                  cfg.freq_write = 40000000;         cfg.freq_read = 16000000;          cfg.spi_3wire = false;             cfg.use_lock = true;               cfg.dma_channel = 1;               cfg.pin_sclk = 14;                 cfg.pin_mosi = 13;                cfg.pin_miso = 12;               cfg.pin_dc = 2;                        _bus_instance.config(cfg);             _panel_instance.setBus(&_bus_instance);}{                                      auto cfg = _panel_instance.config(); cfg.pin_cs = 15;                     cfg.pin_rst = -1;                    cfg.pin_busy = -1;                   cfg.memory_width = 320;             cfg.memory_height = 480;             cfg.panel_width = 320;               cfg.panel_height = 480;              cfg.offset_x = 0;                   cfg.offset_y = 0;                    cfg.offset_rotation = 0;             cfg.dummy_read_pixel = 8;            cfg.dummy_read_bits = 1;             cfg.readable = false;                cfg.invert = false;                  cfg.rgb_order = false;               cfg.dlen_16bit = false;              cfg.bus_shared = false;              _panel_instance.config(cfg);}{                                      auto cfg = _light_instance.config(); cfg.pin_bl = 27;                     cfg.invert = false;                  cfg.freq = 44100;                    cfg.pwm_channel = 7;                 _light_instance.config(cfg);_panel_instance.setLight(&_light_instance); }{ auto cfg = _touch_instance.config();cfg.x_min = 360;         cfg.x_max = 4200;        cfg.y_min = 180;         cfg.y_max = 3900;        cfg.pin_int = -1;        cfg.bus_shared = true;   cfg.offset_rotation = 3;       cfg.spi_host = SPI2_HOST; cfg.freq = 1000000;       cfg.pin_sclk = 14;        cfg.pin_mosi = 13;        cfg.pin_miso = 12;        cfg.pin_cs = 33;          _touch_instance.config(cfg);_panel_instance.setTouch(&_touch_instance); }setPanel(&_panel_instance); }
};
uint32_t count = ~0;static LGFX display;
static LGFX_Sprite sprite(&display);void setup(void)
{ display.init();display.setColorDepth(1);sprite.setColorDepth(1); display.setTextSize((std::max(display.width(), display.height()) + 255) >> 8);display.fillScreen(TFT_BLACK);
}void loop(void)
{display.startWrite();display.setRotation(++count & 7);display.setColorDepth((count & 8) ? 16 : 24);display.setTextColor(TFT_BLACK);display.drawNumber(display.getRotation(), 16, 0);display.setTextColor(0xFF0000U);display.drawString("R", 25, 16);display.setTextColor(0x00FF00U);display.drawString("G", 32, 16);display.setTextColor(0x0000FFU);display.drawString("B", 39, 16);display.setTextColor(0x0467FFU);display.drawString("JCZN", 25, 3);display.drawRect(30, 30, display.width() - 60, display.height() - 60, count * 7);display.drawFastHLine(0, 0, 10);display.endWrite();int32_t x, y;if (display.getTouch(&x, &y)){display.fillRect(x - 2, y - 2, 5, 5, count * 7);}
}

相关文章:

深圳晶彩智能ESP32-3248S035R使用LovyanGFX实现手写板

深圳晶彩智能ESP32-3248S035R介绍 深圳晶彩智能出品ESP32-3248S035R为3.5寸彩色屏采用分辨率480x320彩色液晶屏&#xff0c;驱动芯片是ST7796。板载乐鑫公司出品ESP-WROOM-32&#xff0c;Flash 4M。型号尾部“R”标识电阻膜的感压式触摸屏&#xff0c;驱动芯片是XPT2046。 Lo…...

【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring Boot】深入解密Spring Boot日志&#xff1a;最佳实践与策略解析 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 Spring Boot 日志一. 日志的概念?…...

ISTQB选择国内版,还是国际版呢

1, ISTQB简介 ISTQB&#xff08;International Software Testing Qualifications Board&#xff09;是一个国际软件测试资格认证机构&#xff0c;旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年&#xff0c;是非盈利性的组织&#xff0c;由世界各地的国家或地区软件测…...

头歌-机器学习 第11次实验 softmax回归

第1关&#xff1a;softmax回归原理 任务描述 本关任务&#xff1a;使用Python实现softmax函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.softmax回归原理&#xff0c;2.softmax函数。 softmax回归原理 与逻辑回归一样&#xff0c;softmax回归同样…...

Qt for MCUs 2.7正式发布

本文翻译自&#xff1a;Qt for MCUs 2.7 released 原文作者&#xff1a;Qt Group高级产品经理Yoann Lopes 翻译&#xff1a;Macsen Wang Qt for MCUs的新版本已发布&#xff0c;为Qt Quick Ultralite引擎带来了新功能&#xff0c;增加了更多MCU平台的支持&#xff0c;并且我们…...

共享IP和独享IP如何选择,两者有何区别?

有跨境用户在选择共享IP和独享IP时会有疑问&#xff0c;不知道该如何进行选择&#xff0c;共享IP和独享IP各有其特点和应用场景&#xff0c;选择哪种方式主要取决于具体需求和预算。以下是对两者的详细比较&#xff1a; 首先两者的主要区别在于使用方式和安全性&#xff1a;共…...

文心一言VSchatGPT4

文心一言和GPT-4各有优势&#xff0c;具体表现在不同的测试场景下。 在某些测试场景中心一言的表现优于GPT-4&#xff0c;例如在故事的完整度和情节吸引力方面&#xff0c;文心一言表现得更加符合指令&#xff0c;情节更吸引人。这可能得益于其模型在训练时对中文语境的深入理…...

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin&#xff1a;存放着用户最经常使用的二进制可执行命令&#xff0c;如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot&#xff1a;存放启动系统使用的一些核心文件&#xff0c;如引导加载器&#xff08;bootstrap loader…...

【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)

【matlab】如何解决打开缓慢问题&#xff08;如何让matlab在十几秒内打开&#xff09; 找到我们解压缩时Crack中的license_standalone.lic文件&#xff0c;将其拷贝 在安装matlab的路径下新建一个文件&#xff0c;粘贴上面的license_standalone.lic文件 在桌面鼠标移动到matl…...

【stata】求滚动波动情况

0.计算对象 计算 t t t、 t 1 t1 t1、 t 2 t2 t2 这三起滚动波动情况 V o l i , t l n ( ∑ n t n t 2 ( g n − g ˉ ) 2 3 ) Vol_{i,t} ln(\sqrt{\frac{\sum_{nt}^{nt2}(g_{n}-\bar{g})^2}{3}}) Voli,t​ln(3∑ntnt2​(gn​−gˉ​)2​ ​) e . g e.g e.g: 假设 200…...

The C programming language (second edition,KR) exercise(CHAPTER 2)

E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1&#xff1a;输出结果如图1和图2所示&#xff0c;这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…...

rust实现循环链表

作为一个计算机技术专家&#xff0c;针对你的问题&#xff0c;我将首先解释如何使用Rust语言实现循环链表&#xff0c;并提供相应的代码示例。然后&#xff0c;我将解释一个可能的报错问题及其解决方法。 循环链表的实现 在Rust中实现循环链表&#xff0c;首先需要定义链表节…...

2. Spring的创建和Bean的存取

经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI &#xff0c;本节要讲的是如何Spring框架实现实现DI。 本节目标&#xff1a; Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…...

策略模式【行为模式C++】

1.概述 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景&#xff0c;如排序、搜索、数据压缩等。在这些情况下&#x…...

php中session相关知识(目前了解部分)

#记录学习知识 一.ini_set() 在PHP中&#xff0c;ini_set() 函数用于在脚本运行时设置指定的配置选项的值。这些配置选项可以是PHP的核心设置&#xff0c;例如文件上传的最大大小、脚本的最大执行时间、错误报告级别等。使用 ini_set() 可以临时改变PHP.ini文件中的设置&am…...

从零实现诗词GPT大模型:GPT是怎么生成内容的?

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 再开始编写GPT之前,我们得对GPT是怎么生成内容的有一个大致的了解。目前的神经网络我们大多都可以看成是一个黑盒,即我们把数据输送给网络后,网络给我我们输出,我们可以不用关心这个黑盒里到底是怎么实现…...

8路HDMI+8路AV高清视频流媒体编码器JR-3218HD

产品简介&#xff1a; JR-3218HD高清音视频编码产品支持8路高清HDMI音视频采集功能&#xff0c;8路AV视频采集功能&#xff0c;8路3.5MM独独立音频接口采集功能。编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质量可控制。支持HTTP/RTSP…...

LangChain入门:14.LLMChain:最简单的链的使用

摘要 本文将介绍LangChain库中LLMChain工具的使用方法。LLMChain将提示模板、语言模型&#xff08;LLM&#xff09;和输出解析器整合在一起&#xff0c;形成一个连贯的处理链&#xff0c;简化了与语言模型的交互过程。我们将探讨LLMChain的技术特点、应用场景以及它解决的问题…...

深入理解k8s kube-proxy

1、概述 我觉得只要大家知道kube-proxy是用来配置网络规则的而不是转发流量的&#xff0c;真正的流量由iptables/ipvs来转发就可以了。 网络是k8s的一个关键部分。理解k8s中网络组件如何工作可以帮助更好的设计和配置我们的应用。 kube-proxy就是K8s网络的核心组件。它把我们…...

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识

从这一系列开始&#xff0c;我会带着大家一起了解我们的机器学习&#xff0c;了解我们spark机器学习中的MLIib算法库&#xff0c;知道它大概的模型&#xff0c;熟悉并认识它。同时&#xff0c;本篇文章为个人spark免费专栏的系列文章&#xff0c;有兴趣的可以收藏关注一下&…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...