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

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...