タッチパネルをソフトウェアSPIで使用してSPI2系統を液晶とSDカードで使う
#ifndef _H_my_LovyanGFX_setting_
#define _H_my_LovyanGFX_setting_
#include <LovyanGFX.hpp>
#define LGFX_USE_V1
class LGFX : public lgfx::LGFX_Device
{
lgfx::Panel_ILI9341 _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();
// SPIバスの設定
cfg.spi_host = VSPI_HOST;
cfg.spi_mode = 0;
cfg.freq_write = 40000000;
cfg.freq_read = 16000000;
cfg.spi_3wire = true;
cfg.use_lock = true;
cfg.dma_channel = SPI_DMA_CH_AUTO;
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.panel_width = 240;
cfg.panel_height = 320;
cfg.offset_x = 0;
cfg.offset_y = 0;
cfg.offset_rotation = 0;
cfg.dummy_read_pixel = 8;
cfg.dummy_read_bits = 1;
cfg.readable = true;
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 = 21; // 変更
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 = 300; // 変更
cfg.x_max = 3900; // 変更
cfg.y_min = 3700; // 変更
cfg.y_max = 200; // 変更
cfg.pin_int = -1; // 変更
cfg.bus_shared = false; // 変更
cfg.offset_rotation = 0;
cfg.spi_host = -1; // 変更(-1でソフトウェアSPIになる)
cfg.freq = 1000000;
cfg.pin_sclk = 25; // 変更
cfg.pin_mosi = 32; // 変更
cfg.pin_miso = 39; // 変更
cfg.pin_cs = 33; // 変更
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance);
}
setPanel(&_panel_instance);
}
};
#endif
SD(HSPIで使う)
SPIClass SPISD(HSPI);
void lv_port_fs_init(void)
{
/*----------------------------------------------------
* Initialize your storage device and File System
* -------------------------------------------------*/
fs_init();
/*---------------------------------------------------
* Register the file system interface in LVGL
*--------------------------------------------------*/
/*Add a simple drive to open images*/
static lv_fs_drv_t fs_drv;
lv_fs_drv_init(&fs_drv);
/*Set up fields...*/
fs_drv.letter = 'P';
fs_drv.open_cb = fs_open;
fs_drv.close_cb = fs_close;
fs_drv.read_cb = fs_read;
fs_drv.write_cb = fs_write;
fs_drv.seek_cb = fs_seek;
fs_drv.tell_cb = fs_tell;
fs_drv.dir_close_cb = fs_dir_close;
fs_drv.dir_open_cb = fs_dir_open;
fs_drv.dir_read_cb = fs_dir_read;
lv_fs_drv_register(&fs_drv);
}
/**********************
* STATIC FUNCTIONS
**********************/
/*Initialize your Storage device and File system.*/
static void fs_init(void)
{
/*E.g. for FatFS initialize the SD card and FatFS itself*/
enum { spi_sck = 18, spi_miso = 19, spi_mosi = 23, spi_ss = 5 };
/*You code here*/
// LittleFS.begin();
SPISD.begin(spi_sck, spi_miso, spi_mosi, spi_ss);
if (!SD.begin(spi_ss, SPISD,24000000)) {
Serial.println("Card Mount Failed");
}
}