深圳晶彩智能ESP32-3248S035R介绍
深圳晶彩智能出品ESP32-3248S035R为3.5寸彩色屏采用分辨率480x320彩色液晶屏,驱动芯片是ST7796。板载乐鑫公司出品ESP-WROOM-32,Flash 4M。型号尾部“R”标识电阻膜的感压式触摸屏,驱动芯片是XPT2046。
LovyanGFX库介绍
LovyanGFX是一个为Arduino平台设计的图形驱动库,它专门用于驱动TFT LCD显示屏和触摸屏。这个库是由lovyan03开发的,旨在提供一个易于使用且高效的图形界面开发体验。
这个库模仿AdafruitGFX和TFT_eSPI api,同时旨在实现更高的功能覆盖率和性能。
支持ArduinoESP32和ESP-IDF。
支持16位和24位颜色模式。(实际颜色数量视显示器规格而定)
在使用DMA传输的通信操作期间执行另一个进程。
快速旋转/扩展屏幕外缓冲区(精灵)。
同时使用多个显示器。
单色显示器彩色还原图的自动处理。
OpenCV,SDL2可以用作绘图目标,并且可以在PC上运行。
复合视频信号(NTSC, PAL)输出(仅ESP32)
PlatformIO IDE使用的LovyanGFX库地址
https://registry.platformio.org/libraries/lovyan03/LovyanGFX
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 = arduino
upload_speed = 921600
board_build.f_flash = 80000000L
board_build.flash_mode = dio
monitor_speed = 115200
;upload_port = COM3
board_build.mcu = esp32
upload_protocol = esptool
; change MCU frequency
board_build.f_cpu = 240000000L
lib_ldf_mode = deep
board_build.partitions = huge_app.csv
build_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);
}
}
(完)