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

本文主要是介绍深圳晶彩智能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实现手写板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904809

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当