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

深圳晶彩智能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);
  }
}

(完)

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值