Skip to content

SPI LCD/OLED library which can be built for Arduino and Linux

License

Notifications You must be signed in to change notification settings

bitbank2/bb_spi_lcd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bb_spi_lcd (BitBank SPI Color LCD/OLED library)
Project started 5/15/2017
Copyright (c) 2017-2019 BitBank Software, Inc.
Written by Larry Bank
[email protected]

bb_spi_lcd
The purpose of this code is to easily control color OLED/LCD displays with a rich set of functions. The code can be built as both an Arduino and Linux library. For Arduino, there are a wide variety of target platforms and some don't have enough RAM to support every feature. Specifically, AVR (Uno/Nano/Mega) don't have enough RAM to have a back buffer. Without the back buffer, only text, pixel, rectangle and line drawing are possible. With a back buffer, a host of other functions become available such as ellipses, translucent/transparent rotating bitmaps, and transparent text.

Features

  • Supports the most popular display controllers (SSD1351, ST7735, ST7789, ILI9225, ILI9341, ILI9342, HX8357, ILI9468)
  • 5 built in font sizes (6x8, 8x8, 12x16, 16x16, 16x32)
  • Supports display modes: 0/90/180/270 degree rotated, inverted, BGR or RGB color order
  • Direct display drawing, backbuffer (RAM) drawing or both simultaneously
  • Display object structure (SPILCD) allows multiple simultaenous displays of different types to be controlled by a single MCU
  • Bit Bang option allows controlling SPI displays on any GPIO pins
  • Communication callback functions allows controlling parallel and custom connected displays
  • DMA on SAMD21, SAMD51 and ESP32 targets
  • Compiles on Arduino and Linux (e.g. Raspberry Pi)
  • Optimized primitives for text, lines, rectangles, ellipses and bitmap drawing
  • Fast (50x) drawing of Adafruit format custom fonts with optional blanking mode to erase old data without flickering
  • 50% scaled drawing of Adafruit_GFX fonts with antialiasing
  • Load and display 4, 8 and 16-bit Windows BMP files (including RLE)
  • Deferred rendering allows quickly preparing a back buffer, then displaying it
  • Callbacks allow working with non-SPI displays (e.g. 8/16-bit parallel)
  • Named display configurations of popular products (e.g. M5Stack Core2)

Named Displays

The following displays are supported through a named constant. Their GPIO connections and (special) initialization sequence are built-in to bb_spi_lcd so that using them is as simple as: lcd.begin(DISPLAY_CYD);
Special init sequences such as those required for the M5Stack products are included too (PMIC setup). This means that you no longer need to use the M5 unified libraries to work with their products.

Name Description
DISPLAY_PYBADGE_M4 Adafruit's EdgeBadge / PyBadge
DISPLAY_WIO_TERMINAL The original Seeed Studio SAMD51 Wio
DISPLAY_TEENSY_ILI9341 Teensy 4.x LCD shield
DISPLAY_LOLIN_S3_MINI_PRO Small white PCB with 0.85" 128x128 LCD
DISPLAY_M5STACK_STICKC The original Stick-C with 80x160 ST7735
DISPLAY_M5STACK_STICKCPLUS The newer Stick-C with 135x240 ST7789
DISPLAY_M5STACK_CORE2 The M5Stack ESP32 Core2 w/320x240 ILI9342
DISPLAY_M5STACK_CORES3 The ESP32-S3 w/320x240 ILI9342
DISPLAY_T_DONGLE_S3 LilyGo ESP32-S3 USB dongle with 80x160 ST7735
DISPLAY_T_DISPLAY_S3 LilyGo ESP32-S3 1.91" 170x320 ST7789
DISPLAY_T_DISPLAY_S3_PRO LilyGo ESP32-S3 2.23" 222x480 ST7796
DISPLAY_T_DISPLAY_S3_LONG LilyGo ESP32-S3 3.4" 180x640
DISPLAY_T_DISPLAY_S3_AMOLED LilyGo ESP32-S3 1.9" 536x240 AMOLED
DISPLAY_T_DISPLAY_S3_AMOLED_164 LilyGo ESP32-S3 1.64" 280x456 AMOLED
DISPLAY_T_DISPLAY LilyGo original ESP32 135x240 ST7789
DISPLAY_T_QT LilyGo ESP32-S3 w/0.85" 128x128
DISPLAY_T_QT_C6 LilyGo ESP32-C6 w/0.85" 128x128
DISPLAY_T_TRACK LilyGo ESP32-S3 126x294 AMOLED
DISPLAY_TUFTY2040 Pimoroni RP2040 w/2.4" parallel 240x320 ST7789
DISPLAY_MAKERFABS_S3 MakerFabs 3.5" ESP32-S3 w/3.5" 320x480 ILI9488 16-bit parallel
DISPLAY_M5STACK_ATOMS3 M5Stack ESP32-S3 Atom w/0.85" 128x128
DISPLAY_WT32_SC01_PLUS ESP32-S3 w/3.5" 320x480 ST7796 8-bit parallel
DISPLAY_CYD The original ESP32-2432S28R Cheap Yellow Display
DISPLAY_CYD_2USB The updated 2.8" CYD with 2 USB ports
DISPLAY_CYD_128 ESP32-C3 1.28" round 240x240
DISPLAY_CYD_28C ESP32 2.8" 240x320 w/capacitive touch
DISPLAY_CYD_24R ESP32 2.4" w/resistive touch
DISPLAY_CYD_24C ESP32 2.4" w/capacitive touch
DISPLAY_CYD_35 ESP32 w/ILI9488 SPI
DISPLAY_CYD_35R ESP32 w/ILI9488 SPI and resistive touch
DISPLAY_CYD_22C ESP32 w/8-bit parallel ST7789 and capactive touch
DISPLAY_CYD_543 JC4827W543 4.3" ESP32-S3 w/QSPI 480x270
DISPLAY_CYD_535 JC3248W535 3.5" ESP32-S3 w/320x480
DISPLAY_CYD_518 1.8" ESP32-S3 round 360x360 QSPI
DISPLAY_CYD_700 7.0" ESP32-S3 800x480 ST7262 RGB panel
DISPLAY_CYD_8048 4.3 and 5.5" 800x480 ESP32-S3 RGB panel
DISPLAY_CYD_4848 MakerFabs 4" 480x480 ESP32-S3 RGB panel
DISPLAY_CYD_XIAO_ROUND Seeed Studio round LCD shield 240x240
DISPLAY_CYD_P4_1024x600 Guition JC1060P470C ESP32-P4 1024x600 MIPI
DISPLAY_WS_AMOLED_18 Waveshare ESP32-S3 AMOLED Touch 1.8"
DISPLAY_WS_ROUND_146 Waveshare ESP32-S3 round 1.46" 412x412
DISPLAY_WS_AMOLED_241 Waveshare ESP32-S3 2.41" 600x450 AMMOLED
DISPLAY_WS_LCD_169 Waveshare ESP32-S3 1.69 240x280 ST7789
DISPLAY_UM_480x480 UnexpectedMaker ESP32-S3 4" 480x480 RGB Panel

If you find this code useful, please consider sponsoring me here on Github or sending a donation to support my work

paypal