当前位置: 首页 > 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;有兴趣的可以收藏关注一下&…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

GC1808:高性能音频ADC的卓越之选

在音频处理领域&#xff0c;高质量的音频模数转换器&#xff08;ADC&#xff09;是实现精准音频数字化的关键。GC1808&#xff0c;一款96kHz、24bit立体声音频ADC&#xff0c;以其卓越的性能和高性价比脱颖而出&#xff0c;成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...