This commit is contained in:
2026-02-12 01:27:25 -08:00
parent 0e91b56966
commit bf3aca0d38
322 changed files with 297928 additions and 93 deletions

View File

@@ -0,0 +1,96 @@
// General software SPI
// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, GFX_NOT_DEFINED /* MISO */);
// hardware SPI (default DataBus, comment below block if you are not using hardware SPI)
#if defined(ARDUINO_ARCH_NRF52840)
// Arduino_DataBus *bus = new Arduino_mbedSPI(TFT_DC, TFT_CS);
Arduino_DataBus *bus = new Arduino_NRFXSPI(TFT_DC, TFT_CS, 13 /* SCK */, 11 /* MOSI */, 12 /* MISO */);
#elif defined(TARGET_RP2040) || defined(PICO_RP2350)
Arduino_DataBus *bus = new Arduino_RPiPicoSPI(TFT_DC /* DC */, TFT_CS /* CS */, 18 /* SCK */, 19 /* MOSI */, 16 /* MISO */, spi0 /* spi */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, GFX_NOT_DEFINED /* MISO */, VSPI /* spi_num */);
#elif defined(ESP32) && ((CONFIG_IDF_TARGET_ESP32C2) || (CONFIG_IDF_TARGET_ESP32C3))
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 4 /* SCK */, 6 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32C5)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 10 /* SCK */, 8 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32C6)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 21 /* SCK */, 19 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32H2)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 10 /* SCK */, 25 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32P4)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 36 /* SCK */, 32 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S2)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 36 /* SCK */, 35 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S3)
Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 36 /* SCK */, 35 /* MOSI */, GFX_NOT_DEFINED /* MISO */, FSPI /* spi_num */);
#elif defined(ESP8266)
Arduino_DataBus *bus = new Arduino_ESP8266SPI(TFT_DC, TFT_CS);
#else
// General hardware SPI
Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS);
#endif
// General Software parallel 8-bit
// Arduino_DataBus *bus = new Arduino_SWPAR8(A2 /* DC */, A3 /* CS */, A1 /* WR */, A0 /* RD */, 8 /* D0 */, 9 /* D1 */, 2 /* D2 */, 3 /* D3 */, 4 /* D4 */, 5 /* D5 */, 6 /* D6 */, 7 /* D7 */);
// General Software parallel 16-bit
// Arduino_DataBus *bus = new Arduino_SWPAR16(32 /* DC */, GFX_NOT_DEFINED /* CS */, 21 /* WR */, GFX_NOT_DEFINED /* RD */, 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */);
// Arduino UNO / UNO R4 MINIMA / UNO R4 WIFI parallel 8-bit
// Arduino_DataBus *bus = new Arduino_UNOPAR8();
// AVR PORT parallel 8-bit
// Arduino Pro Micro port 2(PB): 17, 15, 16, 14, 8, 9, 10, 11
// Arduino_DataBus *bus = new Arduino_AVRPAR8(4 /* DC */, 5 /* CS */, 18 /* WR */, 19 /* RD */, 2 /* PORT */);
// AVR PORT parallel 16-bit
// Arduino MEGA 2560
// port 3(PC): 37, 36, 35, 34, 33, 32, 31, 30
// port 1(PA): 22, 23, 24, 25, 26, 27, 28, 29
// Arduino_DataBus *bus = new Arduino_AVRPAR16(38 /* DC */, 40 /* CS */, 39 /* WR */, 43 /* RD */, 3 /* PORT LOW */, 1 /* PORT HIGH */);
// ESP32 parallel 8-bit
// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 25 /* WR */, 32 /* RD */, 23 /* D0 */, 19 /* D1 */, 18 /* D2 */, 26 /* D3 */, 21 /* D4 */, 4 /* D5 */, 0 /* D6 */, 2 /* D7 */);
// ESP32 parallel 16-bit
// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD.
// CS connect to GND (enable); RD connect to Vcc (disable).
// Arduino_DataBus *bus = new Arduino_ESP32PAR16(
// 32 /* DC */, GFX_NOT_DEFINED /* CS */, 21 /* WR */, GFX_NOT_DEFINED /* RD */,
// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */,
// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */);
// ESP32 QSPI
// Arduino_DataBus *bus = new Arduino_ESP32QSPI(
// 6 /* CS */, 0 /* SCK */, 1 /* D0 */, 2 /* D1 */, 3 /* D2 */, 4 /* D3 */);
// ESP32S2 parallel 8-bit
// Display D0-D7 connect to GPIO 0-7
// Arduino_DataBus *bus = new Arduino_ESP32S2PAR8(TFT_DC, TFT_CS, 16 /* WR */, 17 /* RD */);
// ESP32S2 parallel 16-bit
// Display D0-D15 connect to GPIO 0-15
// Arduino_DataBus *bus = new Arduino_ESP32S2PAR16(TFT_DC, TFT_CS, 16 /* WR */, 17 /* RD */);
// ESP32S3 i80 LCD parallel 8-bit
// Arduino_DataBus *bus = new Arduino_ESP32LCD8(
// TFT_DC, TFT_CS, 16 /* WR */, 17 /* RD */,
// 0 /* D0 */, 1 /* D1 */, 2 /* D2 */, 3 /* D3 */, 4 /* D4 */, 5 /* D5 */, 6 /* D6 */, 7 /* D7 */);
// ESP32S3 i80 LCD parallel 16-bit
// Arduino_DataBus *bus = new Arduino_ESP32LCD16(
// TFT_DC, TFT_CS, 16 /* WR */, 17 /* RD */,
// 0 /* D0 */, 1 /* D1 */, 2 /* D2 */, 3 /* D3 */, 4 /* D4 */, 5 /* D5 */, 6 /* D6 */, 7 /* D7 */,
// 8 /* D8 */, 9 /* D9 */, 10 /* D10 */, 11 /* D11 */, 12 /* D12 */, 13 /* D13 */, 14 /* D14 */, 15 /* D15 */);
// Raspberry Pi Pico parallel 8-bit
// Display D0-D7 connect to GPIO 0-7
// Arduino_DataBus *bus = new Arduino_RPiPicoPAR8(TFT_DC, TFT_CS, 18 /* WR */, 19 /* RD */);
// Raspberry Pi Pico parallel 16-bit
// Display D0-D15 connect to GPIO 0-15
// Arduino_DataBus *bus = new Arduino_RPiPicoPAR16(TFT_DC, TFT_CS, 18 /* WR */, 19 /* RD */);
// RTL8722 parallel 8-bit
// Reduce GPIO usage: CS connect to GND (enable); RD connect to Vcc (disable); No Backlight pins.
// Arduino_DataBus *bus = new Arduino_RTLPAR8(0 /* DC */, GFX_NOT_DEFINED /* CS */, 1 /* WR */, GFX_NOT_DEFINED /* RD */, 18 /* D0 */, 22 /* D1 */, 17 /* D2 */, 20 /* D3 */, 19 /* D4 */, 23 /* D5 */, 21 /* D6 */, 16 /* D7 */);

View File

@@ -0,0 +1,187 @@
/***************************************
* Start of Canvas (framebuffer)
**************************************/
// #define CANVAS
// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM)
// Arduino_G *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// Arduino_GFX *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display);
// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping
// Arduino_G *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// Arduino_GFX *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */);
// 3-bit color Canvas, R1G1B1, 8 colors
// Arduino_G *output_display = new Arduino_ILI9488_3bit(bus, GFX_NOT_DEFINED /* RST */, 1 /* rotation */, false /* IPS */);
// Arduino_GFX *gfx = new Arduino_Canvas_3bit(480 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */);
// Mono color Canvas
// Arduino_G *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// Arduino_GFX *gfx = new Arduino_Canvas_Mono(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */);
/***************************************
* End of Canvas (framebuffer)
**************************************/
// GC9A01 IPS LCD 240x240
// Arduino_GFX *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// GC9C01 IPS LCD 360x360
// Arduino_GFX *g = new Arduino_GC9C01(bus, TFT_RST, 0 /* rotation */);
// #define CANVAS
// Arduino_Canvas *gfx = new Arduino_Canvas(360 /* width */, 360 /* height */, g);
// GC9106 IPS LCD 80x160
// Arduino_GFX *gfx = new Arduino_GC9106(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// GC9107 IPS LCD 128x128
// Arduino_GFX *gfx = new Arduino_GC9107(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8347C IPS LCD 240x320
// Arduino_GFX *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8347D IPS LCD 240x320
// Arduino_GFX *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8352C IPS LCD 240x400
// Arduino_GFX *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8357A IPS LCD 320x480 (currently only portrait works, i.e. rotation 0 and 2)
// Arduino_GFX *gfx = new Arduino_HX8357A(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8357B IPS LCD 320x480
// Arduino_GFX *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// HX8369A LCD 480x800
// Arduino_GFX *gfx = new Arduino_HX8369A(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 480, 800, 0, 7, 0, 57);
// ILI9225 LCD 176x220
// Arduino_GFX *gfx = new Arduino_ILI9225(bus, TFT_RST);
// ILI9341 LCD 240x320 (default Display, comment below line if you are not using ILI9341)
Arduino_GFX *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9342 LCD 320x240
// Arduino_GFX *gfx = new Arduino_ILI9342(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9481 parallel 8/16-bit LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9481(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9481 SPI LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9486 parallel 8/16-bit LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9486(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9486 SPI LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9488 parallel 8/16-bit LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9488(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9488 SPI LCD 320x480
// Arduino_GFX *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// ILI9806 LCD 480x854
// Arduino_GFX *gfx = new Arduino_ILI9806(bus, TFT_RST, 0 /* rotation */, false /* IPS */);
// JBT6K71 LCD 240x320
// Arduino_GFX *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0);
// NT35310 LCD 320x480
// Arduino_GFX *gfx = new Arduino_NT35310(bus, TFT_RST, 0 /* rotation */);
// NT35510 LCD 480x800
// Arduino_GFX *gfx = new Arduino_NT35510(bus, TFT_RST, 0 /* rotation */);
// NT39125 LCD 240x376
// Arduino_GFX *gfx = new Arduino_NT39125(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 240, 376, 0, 0, 0, 56);
// 1.65"/1.68" NV3007 LCD 142x428
// Arduino_GFX *gfx = new Arduino_NV3007(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 142 /* width */, 428 /* height */, 12 /* col offset 1 */, 0 /* row offset 1 */, 14 /* col offset 2 */, 0 /* row offset 2 */);
// 2.79" NV3007 LCD 142x428
// Arduino_GFX *gfx = new Arduino_NV3007(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 142 /* width */, 428 /* height */, 12 /* col offset 1 */, 0 /* row offset 1 */, 14 /* col offset 2 */, 0 /* row offset 2 */, nv3007_279_init_operations, sizeof(nv3007_279_init_operations));
// NV3041A IPS LCD
// Arduino_GFX *gfx = new Arduino_NV3041A(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// OTM8009A LCD 480x800
// Arduino_GFX *gfx = new Arduino_OTM8009A(bus, TFT_RST, 0 /* rotation */);
// R61529 IPS LCD 320x480
// Arduino_GFX *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// SEPS525 OLED 160x128
// Arduino_GFX *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */);
// SSD1283A OLED 130x130
// Arduino_GFX *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */);
// SSD1331 OLED 96x64
// Arduino_GFX *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */);
// SSD1351 OLED 128x128
// Arduino_GFX *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */);
// ST7735 LCD
// 0.42" 96x54
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 96 /* width */, 54 /* height */, 16 /* col offset 1 */, 106 /* row offset 1 */, 16 /* col offset 2 */, 0 /* row offset 2 */);
// 0.85" 128x128
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */);
// 1.8" REDTAB 128x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */);
// 1.8" BLACKTAB 128x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */);
// 1.8" GREENTAB A 128x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */);
// 1.8" GREENTAB B 128x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */);
// 1.8" Wide angle LCD 128x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */);
// 1.5" GREENTAB B 128x128
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */);
// 1.5" GREENTAB C 128x128
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */);
// 0.96" IPS LCD 80x160
// Arduino_GFX *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */);
// ST7789 LCD
// 2.4" LCD 240x320
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */);
// 2.4" IPS LCD 240x320
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// 2.25" LCD 76x284
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 76 /* width */, 284 /* height */, 82 /* col offset 1 */, 18 /* row offset 1 */, 82 /* col offset 2 */, 18 /* row offset 2 */);
// 1.9" IPS round corner LCD 170x320
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 170 /* width */, 320 /* height */, 35 /* col offset 1 */, 0 /* row offset 1 */, 35 /* col offset 2 */, 0 /* row offset 2 */);
// 1.69" IPS round corner LCD 240x280
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */);
// 1.47" IPS round corner LCD 172x320
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 172 /* width */, 320 /* height */, 34 /* col offset 1 */, 0 /* row offset 1 */, 34 /* col offset 2 */, 0 /* row offset 2 */);
// 1.3"/1.5" square IPS LCD 240x240
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 80 /* row offset 2 */);
// 1.14" IPS LCD 135x240
// Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 52 /* col offset 1 */, 40 /* row offset 1 */, 53 /* col offset 2 */, 40 /* row offset 2 */);
// 1.5" ST77916
// Arduino_GFX *gfx = new Arduino_ST77916(bus, 5 /* RST */, 0 /* rotation */, true /* IPS */, 360 /* width */, 360 /* height */,
// 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */,
// st77916_150_init_operations, sizeof(st77916_150_init_operations));
// 1.8" ST77916
// Arduino_GFX *gfx = new Arduino_ST77916(bus, 5 /* RST */, 0 /* rotation */, true /* IPS */, 360 /* width */, 360 /* height */,
// 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */,
// st77916_180_init_operations, sizeof(st77916_180_init_operations));
// ST7796 LCD
// 1.55" IPS LCD 320x360
// Arduino_GFX *gfx = new Arduino_ST7796(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 320 /* width */, 360 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 120 /* row offset 2 */);
// 4" LCD 320x480
// Arduino_GFX *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */);
// 4" IPS LCD 320x480
// Arduino_GFX *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
// WEA2012 LCD
// #define CANVAS
// Arduino_GFX *output_display = new Arduino_WEA2012(bus, TFT_RST);
// Arduino_GFX *gfx = new Arduino_Canvas(356 /* width */, 400 /* height */, output_display);

View File

@@ -0,0 +1,94 @@
#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
// PJRC Teensy 4.x
#define TFT_CS 39 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 41
#define TFT_RST 40
#define GFX_BL 22
#elif defined(ARDUINO_BLACKPILL_F411CE)
#define TFT_CS 4 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 3
#define TFT_RST 2
#define GFX_BL 1
#elif defined(TARGET_RP2040) || defined(PICO_RP2350)
#define TFT_CS 17 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 27
#define TFT_RST 26
#define GFX_BL 28
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32)
#define TFT_CS 5 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 27 // GFX_NOT_DEFINED for display without DC pin (9-bit SPI)
#define TFT_RST 33
#define GFX_BL 22
#elif defined(ESP32) && ((CONFIG_IDF_TARGET_ESP32C2) || (CONFIG_IDF_TARGET_ESP32C3))
#define TFT_CS 7 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 2
#define TFT_RST 1
#define GFX_BL 3
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32C5)
#define TFT_CS 23 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 24
#define TFT_RST 25
#define GFX_BL 26
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32C6)
#define TFT_CS 18 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 22
#define TFT_RST 23
#define GFX_BL 15
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32H2)
#define TFT_CS 0 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 12
#define TFT_RST 8
#define GFX_BL 22
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32P4)
#define TFT_CS 26 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 27
#define TFT_RST 25
#define GFX_BL 24
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S2)
#define TFT_CS 34 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 38
#define TFT_RST 33
#define GFX_BL 21
#elif defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S3)
#define TFT_CS 40 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 41
#define TFT_RST 42
#define GFX_BL 48
#elif defined(ESP8266)
#define TFT_CS 15 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 4
#define TFT_RST 2
#define GFX_BL 5
#elif defined(RTL8722DM)
#if defined(BOARD_RTL8720DN_BW16)
#define TFT_CS 9
#define TFT_DC 8
#define TFT_RST 6
#define GFX_BL 3
#elif defined(BOARD_RTL8722DM)
#define TFT_CS 18
#define TFT_DC 17
#define TFT_RST 22
#define GFX_BL 23
#elif defined(BOARD_RTL8722DM_MINI)
#define TFT_CS 12
#define TFT_DC 14
#define TFT_RST 15
#define GFX_BL 13
#else // old version
#define TFT_CS 18 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 17
#define TFT_RST 2
#define GFX_BL 23
#endif
#elif defined(SEEED_XIAO_M0)
#define TFT_CS 3 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 2
#define TFT_RST 1
#define GFX_BL 0
#else
#define TFT_CS 9 // GFX_NOT_DEFINED for display without CS pin
#define TFT_DC 8
#define TFT_RST 7
#define GFX_BL 6
#endif

View File

@@ -0,0 +1,680 @@
/*
Adapted from the Adafruit and Xark's PDQ graphicstest sketch.
See end of file for original header text and MIT license info.
*/
/*******************************************************************************
* Start of Arduino_GFX setting
******************************************************************************/
#include <Arduino_GFX_Library.h>
/* OPTION 1: Uncomment a dev device in Arduino_GFX_dev_device.h */
#include "Arduino_GFX_dev_device.h"
/* Check if not Uncommented any GFX_DEV_DEVICE in OPTION 1, include OPTION 2 header files */
#ifndef GFX_DEV_DEVICE
/* OPTION 2: Manual define hardware */
/* Step 1: Define pins in Arduino_GFX_databus.h */
#include "Arduino_GFX_pins.h"
/* Step 2: Uncomment your databus in Arduino_GFX_databus.h */
#include "Arduino_GFX_databus.h"
/* Step 3: Uncomment your display driver in Arduino_GFX_display.h */
#include "Arduino_GFX_display.h"
#endif /* Manual define hardware */
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/
#ifdef ESP32
#undef F
#define F(s) (s)
#endif
int32_t w, h, n, n1, cx, cy, cx1, cy1, cn, cn1;
uint8_t tsa, tsb, tsc, ds;
void setup()
{
#ifdef DEV_DEVICE_INIT
DEV_DEVICE_INIT();
#endif
Serial.begin(115200);
// Serial.setDebugOutput(true);
// while(!Serial);
Serial.println("Arduino_GFX PDQgraphicstest example!");
// Init Display
if (!gfx->begin())
// if (!gfx->begin(80000000)) /* specify data bus speed */
{
Serial.println("gfx->begin() failed!");
}
w = gfx->width();
h = gfx->height();
n = min(w, h);
n1 = n - 1;
cx = w / 2;
cy = h / 2;
cx1 = cx - 1;
cy1 = cy - 1;
cn = min(cx1, cy1);
cn1 = cn - 1;
tsa = ((w <= 176) || (h <= 160)) ? 1 : (((w <= 240) || (h <= 240)) ? 2 : 3); // text size A
tsb = ((w <= 272) || (h <= 220)) ? 1 : 2; // text size B
tsc = ((w <= 220) || (h <= 220)) ? 1 : 2; // text size C
ds = (w <= 160) ? 9 : ((w <= 280) ? 10 : 12); // digit size
#ifdef GFX_BL
pinMode(GFX_BL, OUTPUT);
digitalWrite(GFX_BL, HIGH);
#endif
}
static inline uint32_t micros_start() __attribute__((always_inline));
static inline uint32_t micros_start()
{
uint8_t oms = millis();
while ((uint8_t)millis() == oms)
;
return micros();
}
void loop(void)
{
Serial.println(F("Benchmark\tmicro-secs"));
int32_t usecFillScreen = testFillScreen();
serialOut(F("Screen fill\t"), usecFillScreen, 100, true);
int32_t usecText = testText();
serialOut(F("Text\t"), usecText, 3000, true);
int32_t usecPixels = testPixels();
serialOut(F("Pixels\t"), usecPixels, 100, true);
int32_t usecLines = testLines();
serialOut(F("Lines\t"), usecLines, 100, true);
int32_t usecFastLines = testFastLines();
serialOut(F("Horiz/Vert Lines\t"), usecFastLines, 100, true);
int32_t usecFilledRects = testFilledRects();
serialOut(F("Rectangles (filled)\t"), usecFilledRects, 100, false);
int32_t usecRects = testRects();
serialOut(F("Rectangles (outline)\t"), usecRects, 100, true);
int32_t usecFilledTrangles = testFilledTriangles();
serialOut(F("Triangles (filled)\t"), usecFilledTrangles, 100, false);
int32_t usecTriangles = testTriangles();
serialOut(F("Triangles (outline)\t"), usecTriangles, 100, true);
int32_t usecFilledCircles = testFilledCircles(10);
serialOut(F("Circles (filled)\t"), usecFilledCircles, 100, false);
int32_t usecCircles = testCircles(10);
serialOut(F("Circles (outline)\t"), usecCircles, 100, true);
int32_t usecFilledArcs = testFillArcs();
serialOut(F("Arcs (filled)\t"), usecFilledArcs, 100, false);
int32_t usecArcs = testArcs();
serialOut(F("Arcs (outline)\t"), usecArcs, 100, true);
int32_t usecFilledRoundRects = testFilledRoundRects();
serialOut(F("Rounded rects (filled)\t"), usecFilledRoundRects, 100, false);
int32_t usecRoundRects = testRoundRects();
serialOut(F("Rounded rects (outline)\t"), usecRoundRects, 100, true);
#ifdef CANVAS
uint32_t start = micros_start();
gfx->flush();
int32_t usecFlush = micros() - start;
serialOut(F("flush (Canvas only)\t"), usecFlush, 0, false);
#endif
Serial.println(F("Done!"));
uint16_t c = 4;
int8_t d = 1;
for (int32_t i = 0; i < h; i++)
{
gfx->drawFastHLine(0, i, w, c);
c += d;
if (c <= 4 || c >= 11)
{
d = -d;
}
}
gfx->setCursor(0, 0);
gfx->setTextSize(tsa);
gfx->setTextColor(RGB565_MAGENTA);
gfx->println(F("Arduino GFX PDQ"));
if (h > w)
{
gfx->setTextSize(tsb);
gfx->setTextColor(RGB565_LIME);
gfx->print(F("\nBenchmark "));
gfx->setTextSize(tsc);
if (ds == 12)
{
gfx->print(F(" "));
}
gfx->println(F("micro-secs"));
}
printnice(F("Screen fill "), usecFillScreen);
printnice(F("Text "), usecText);
printnice(F("Pixels "), usecPixels);
printnice(F("Lines "), usecLines);
printnice(F("H/V Lines "), usecFastLines);
printnice(F("Rectangles F"), usecFilledRects);
printnice(F("Rectangles "), usecRects);
printnice(F("Triangles F "), usecFilledTrangles);
printnice(F("Triangles "), usecTriangles);
printnice(F("Circles F "), usecFilledCircles);
printnice(F("Circles "), usecCircles);
printnice(F("Arcs F "), usecFilledArcs);
printnice(F("Arcs "), usecArcs);
printnice(F("RoundRects F"), usecFilledRoundRects);
printnice(F("RoundRects "), usecRoundRects);
if ((h > w) || (h > 240))
{
gfx->setTextSize(tsc);
gfx->setTextColor(RGB565_LIME);
gfx->print(F("\nBenchmark Complete!"));
}
#ifdef CANVAS
gfx->flush();
#endif
delay(60 * 1000L);
}
#ifdef ESP32
void serialOut(const char *item, int32_t v, uint32_t d, bool clear)
#else
void serialOut(const __FlashStringHelper *item, int32_t v, uint32_t d, bool clear)
#endif
{
#ifdef CANVAS
gfx->flush();
#endif
Serial.print(item);
if (v < 0)
{
Serial.println(F("N/A"));
}
else
{
Serial.println(v);
}
delay(d);
if (clear)
{
gfx->fillScreen(RGB565_BLACK);
}
}
#ifdef ESP32
void printnice(const char *item, long int v)
#else
void printnice(const __FlashStringHelper *item, long int v)
#endif
{
gfx->setTextSize(tsb);
gfx->setTextColor(RGB565_CYAN);
gfx->print(item);
gfx->setTextSize(tsc);
gfx->setTextColor(RGB565_YELLOW);
if (v < 0)
{
gfx->println(F(" N / A"));
}
else
{
char str[32] = {0};
#ifdef RTL8722DM
sprintf(str, "%d", (int)v);
#else
sprintf(str, "%ld", v);
#endif
for (char *p = (str + strlen(str)) - 3; p > str; p -= 3)
{
memmove(p + 1, p, strlen(p) + 1);
*p = ',';
}
while (strlen(str) < ds)
{
memmove(str + 1, str, strlen(str) + 1);
*str = ' ';
}
gfx->println(str);
}
}
int32_t testFillScreen()
{
uint32_t start = micros_start();
// Shortened this tedious test!
gfx->fillScreen(RGB565_WHITE);
gfx->fillScreen(RGB565_RED);
gfx->fillScreen(RGB565_LIME);
gfx->fillScreen(RGB565_BLUE);
gfx->fillScreen(RGB565_BLACK);
return micros() - start;
}
int32_t testText()
{
uint32_t start = micros_start();
gfx->setCursor(0, 0);
gfx->setTextSize(1);
gfx->setTextColor(RGB565_WHITE, RGB565_BLACK);
gfx->println(F("Hello World!"));
gfx->setTextSize(2);
gfx->setTextColor(gfx->color565(0xff, 0x00, 0x00));
gfx->print(F("RED "));
gfx->setTextColor(gfx->color565(0x00, 0xff, 0x00));
gfx->print(F("GREEN "));
gfx->setTextColor(gfx->color565(0x00, 0x00, 0xff));
gfx->println(F("BLUE"));
gfx->setTextSize(tsa);
gfx->setTextColor(RGB565_YELLOW);
gfx->println(1234.56);
gfx->setTextColor(RGB565_WHITE);
gfx->println((w > 128) ? 0xDEADBEEF : 0xDEADBEE, HEX);
gfx->setTextColor(RGB565_CYAN, RGB565_WHITE);
gfx->println(F("Groop,"));
gfx->setTextSize(tsc);
gfx->setTextColor(RGB565_MAGENTA, RGB565_WHITE);
gfx->println(F("I implore thee,"));
gfx->setTextSize(1);
gfx->setTextColor(RGB565_NAVY, RGB565_WHITE);
gfx->println(F("my foonting turlingdromes."));
gfx->setTextColor(RGB565_DARKGREEN, RGB565_WHITE);
gfx->println(F("And hooptiously drangle me"));
gfx->setTextColor(RGB565_DARKCYAN, RGB565_WHITE);
gfx->println(F("with crinkly bindlewurdles,"));
gfx->setTextColor(RGB565_MAROON, RGB565_WHITE);
gfx->println(F("Or I will rend thee"));
gfx->setTextColor(RGB565_PURPLE, RGB565_WHITE);
gfx->println(F("in the gobberwartsb"));
gfx->setTextColor(RGB565_OLIVE, RGB565_WHITE);
gfx->println(F("with my blurglecruncheon,"));
gfx->setTextColor(RGB565_DARKGREY, RGB565_WHITE);
gfx->println(F("see if I don't!"));
gfx->setTextSize(2);
gfx->setTextColor(RGB565_RED);
gfx->println(F("Size 2"));
gfx->setTextSize(3);
gfx->setTextColor(RGB565_ORANGE);
gfx->println(F("Size 3"));
gfx->setTextSize(4);
gfx->setTextColor(RGB565_YELLOW);
gfx->println(F("Size 4"));
gfx->setTextSize(5);
gfx->setTextColor(RGB565_GREENYELLOW);
gfx->println(F("Size 5"));
gfx->setTextSize(6);
gfx->setTextColor(RGB565_LIME);
gfx->println(F("Size 6"));
gfx->setTextSize(7);
gfx->setTextColor(RGB565_BLUE);
gfx->println(F("Size 7"));
gfx->setTextSize(8);
gfx->setTextColor(RGB565_PURPLE);
gfx->println(F("Size 8"));
gfx->setTextSize(9);
gfx->setTextColor(RGB565_LIGHTPINK);
gfx->println(F("Size 9"));
return micros() - start;
}
int32_t testPixels()
{
uint32_t start = micros_start();
for (int16_t y = 0; y < h; y++)
{
for (int16_t x = 0; x < w; x++)
{
gfx->drawPixel(x, y, gfx->color565(x << 3, y << 3, x * y));
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
}
return micros() - start;
}
int32_t testLines()
{
uint32_t start;
int32_t x1, y1, x2, y2;
start = micros_start();
x1 = y1 = 0;
y2 = h - 1;
for (x2 = 0; x2 < w; x2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x2 = w - 1;
for (y2 = 0; y2 < h; y2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x1 = w - 1;
y1 = 0;
y2 = h - 1;
for (x2 = 0; x2 < w; x2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x2 = 0;
for (y2 = 0; y2 < h; y2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x1 = 0;
y1 = h - 1;
y2 = 0;
for (x2 = 0; x2 < w; x2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x2 = w - 1;
for (y2 = 0; y2 < h; y2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x1 = w - 1;
y1 = h - 1;
y2 = 0;
for (x2 = 0; x2 < w; x2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
x2 = 0;
for (y2 = 0; y2 < h; y2 += 6)
{
gfx->drawLine(x1, y1, x2, y2, RGB565_BLUE);
}
#ifdef ESP8266
yield(); // avoid long run triggered ESP8266 WDT restart
#endif
return micros() - start;
}
int32_t testFastLines()
{
uint32_t start;
int32_t x, y;
start = micros_start();
for (y = 0; y < h; y += 5)
{
gfx->drawFastHLine(0, y, w, RGB565_RED);
}
for (x = 0; x < w; x += 5)
{
gfx->drawFastVLine(x, 0, h, RGB565_BLUE);
}
return micros() - start;
}
int32_t testFilledRects()
{
uint32_t start;
int32_t i, i2;
start = micros_start();
for (i = n; i > 0; i -= 6)
{
i2 = i / 2;
gfx->fillRect(cx - i2, cy - i2, i, i, gfx->color565(i, i, 0));
}
return micros() - start;
}
int32_t testRects()
{
uint32_t start;
int32_t i, i2;
start = micros_start();
for (i = 2; i < n; i += 6)
{
i2 = i / 2;
gfx->drawRect(cx - i2, cy - i2, i, i, RGB565_LIME);
}
return micros() - start;
}
int32_t testFilledCircles(uint8_t radius)
{
uint32_t start;
int32_t x, y, r2 = radius * 2;
start = micros_start();
for (x = radius; x < w; x += r2)
{
for (y = radius; y < h; y += r2)
{
gfx->fillCircle(x, y, radius, RGB565_MAGENTA);
}
}
return micros() - start;
}
int32_t testCircles(uint8_t radius)
{
uint32_t start;
int32_t x, y, r2 = radius * 2;
int32_t w1 = w + radius;
int32_t h1 = h + radius;
// Screen is not cleared for this one -- this is
// intentional and does not affect the reported time.
start = micros_start();
for (x = 0; x < w1; x += r2)
{
for (y = 0; y < h1; y += r2)
{
gfx->drawCircle(x, y, radius, RGB565_WHITE);
}
}
return micros() - start;
}
int32_t testFillArcs()
{
int16_t i, r = (360 > cn) ? (360 / cn) : 1;
uint32_t start = micros_start();
for (i = 6; i < cn; i += 6)
{
gfx->fillArc(cx1, cy1, i, i - 3, 0, i * r, RGB565_RED);
}
return micros() - start;
}
int32_t testArcs()
{
int16_t i, r = (360 > cn) ? (360 / cn) : 1;
uint32_t start = micros_start();
for (i = 6; i < cn; i += 6)
{
gfx->drawArc(cx1, cy1, i, i - 3, 0, i * r, RGB565_WHITE);
}
return micros() - start;
}
int32_t testFilledTriangles()
{
uint32_t start;
int32_t i;
start = micros_start();
for (i = cn1; i > 10; i -= 5)
{
gfx->fillTriangle(cx1, cy1 - i, cx1 - i, cy1 + i, cx1 + i, cy1 + i,
gfx->color565(0, i, i));
}
return micros() - start;
}
int32_t testTriangles()
{
uint32_t start;
int32_t i;
start = micros_start();
for (i = 0; i < cn; i += 5)
{
gfx->drawTriangle(
cx1, cy1 - i, // peak
cx1 - i, cy1 + i, // bottom left
cx1 + i, cy1 + i, // bottom right
gfx->color565(0, 0, i));
}
return micros() - start;
}
int32_t testFilledRoundRects()
{
uint32_t start;
int32_t i, i2;
start = micros_start();
for (i = n1; i > 20; i -= 6)
{
i2 = i / 2;
gfx->fillRoundRect(cx - i2, cy - i2, i, i, i / 8, gfx->color565(0, i, 0));
}
return micros() - start;
}
int32_t testRoundRects()
{
uint32_t start;
int32_t i, i2;
start = micros_start();
for (i = 20; i < n1; i += 6)
{
i2 = i / 2;
gfx->drawRoundRect(cx - i2, cy - i2, i, i, i / 8, gfx->color565(i, 0, 0));
}
return micros() - start;
}
/***************************************************
Original sketch text:
This is an example sketch for the Adafruit 2.2" SPI display.
This library works with the Adafruit 2.2" TFT Breakout w/SD card
----> http://www.adafruit.com/products/1480
Check out the links above for our tutorials and wiring diagrams
These displays use SPI to communicate, 4 or 5 pins are required to
interface (RST is optional)
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
MIT license, all text above must be included in any redistribution
****************************************************/