9.5 KiB
ucg Module
Ucglib is a graphics library developed at olikraus/ucglib with support for color TFT displays. The NodeMCU firmware supports a subset of these:
- ILI9163
- ILI9341
- PCF8833
- SEPS225
- SSD1331
- SSD1351
- ST7735
This integration is based on v1.3.3.
Overview
SPI Connection
The HSPI module is used (more information), so certain pins are fixed:
- HSPI CLK = GPIO14
- HSPI MOSI = GPIO13
- HSPI MISO = GPIO12 (not used)
All other pins can be assigned to any available GPIO:
- CS
- D/C
- RES (optional for some displays)
Also refer to the initialization sequence eg in GraphicsTest.lua:
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
Library Usage
The Lua bindings for this library closely follow ucglib's object oriented C++ API. Based on the ucg class, you create an object for your display type.
ILI9341 via SPI:
cs = 8 -- GPIO15, pull-down 10k to GND
dc = 4 -- GPIO2
res = 0 -- GPIO16, RES is optional YMMV
disp = ucg.ili9341_18x240x320_hw_spi(cs, dc, res)
This object provides all of ucglib's methods to control the display. Again, refer to GraphicsTest.lua to get an impression how this is achieved with Lua code. Visit the ucglib homepage for technical details.
Displays
To get access to the display constructors, add the desired entries to the display table in app/include/ucg_config.h:
#define UCG_DISPLAY_TABLE \
UCG_DISPLAY_TABLE_ENTRY(ili9341_18x240x320_hw_spi, ucg_dev_ili9341_18x240x320, ucg_ext_ili9341_18) \
UCG_DISPLAY_TABLE_ENTRY(st7735_18x128x160_hw_spi, ucg_dev_st7735_18x128x160, ucg_ext_st7735_18) \
Fonts
ucglib comes with a wide range of fonts for small displays. Since they need to be compiled into the firmware image, you'd need to include them in app/include/ucg_config.h and recompile. Simply add the desired fonts to the font table:
#define UCG_FONT_TABLE \
UCG_FONT_TABLE_ENTRY(font_7x13B_tr) \
UCG_FONT_TABLE_ENTRY(font_helvB12_hr) \
UCG_FONT_TABLE_ENTRY(font_helvB18_hr) \
UCG_FONT_TABLE_ENTRY(font_ncenR12_tr) \
UCG_FONT_TABLE_ENTRY(font_ncenR14_hr)
They'll be available as ucg.<font_name>
in Lua.
Display Drivers
Initialize a display via Hardware SPI.
ili9163_18x128x128_hw_spi()
ili9341_18x240x320_hw_spi()
pcf8833_16x132x132_hw_spi()
seps225_16x128x128_univision_hw_spi()
ssd1351_18x128x128_hw_spi()
ssd1351_18x128x128_ft_hw_spi()
ssd1331_18x96x64_univision_hw_spi()
st7735_18x128x160_hw_spi()
Syntax
ucg.st7735_18x128x160_hw_spi(cs, dc, [res])
Parameters
cs
GPIO pin for /CSdc
GPIO pin for DCres
GPIO pin for /RES (optional)
Returns
ucg display object
Example
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8, 0)
cs = 8 -- GPIO15, pull-down 10k to GND
dc = 4 -- GPIO2
res = 0 -- GPIO16, RES is optional YMMV
disp = ucg.st7735_18x128x160_hw_spi(cs, dc, res)
Constants
ucg.FONT_MODE_TRANSPARENT
, ucg.FONT_MODE_SOLID
, ucg.DRAW_UPPER_RIGHT
,
ucg.DRAW_UPPER_LEFT
, ucg.DRAW_LOWER_RIGHT
, ucg.DRAW_LOWER_LEFT
, ucg.DRAW_ALL
ucg.font_7x13B_tr
, ...
ucg.disp Sub-Module
ucg.disp:begin()
See ucglib begin().
ucg.disp:clearScreen()
See ucglib clearScreen().
ucg.disp:draw90Line()
See ucglib draw90Line().
ucg.disp:drawBox()
See ucglib drawBox().
ucg.disp:drawCircle()
See ucglib drawCircle().
ucg.disp:drawDisc()
See ucglib drawDisc().
ucg.disp:drawFrame()
See ucglib drawFrame().
ucg.disp:drawGlyph()
See ucglib drawGlyph().
ucg.disp:drawGradientBox()
ucg.disp:drawGradientLine()
See ucglib drawGradientLine().
ucg.disp:drawHLine()
See ucglib drawHLine().
ucg.disp:drawLine()
See ucglib drawLine().
ucg.disp:drawPixel()
See ucglib drawPixel().
ucg.disp:drawRBox()
See ucglib drawRBox().
ucg.disp:drawRFrame()
See ucglib drawRFrame().
ucg.disp:drawString()
See ucglib drawString().
ucg.disp:drawTetragon()
ucg.disp:drawTriangle()
ucg.disp:drawVLine()
See ucglib drawVline().
ucg.disp:getFontAscent()
ucg.disp:getFontDescent()
ucg.disp:getHeight()
See ucglib getHeight().
ucg.disp:getStrWidth()
See ucglib getStrWidth().
ucg.disp:getWidth()
See ucglib getWidth().
ucg.disp:print()
See ucglib print().
ucg.disp:setClipRange()
ucg.disp:setColor()
See ucglib setColor().
ucg.disp:setFont()
ucglib comes with a wide range of fonts for small displays. Since they need to be compiled into the firmware image, you'd need to include them in app/include/ucg_config.h and recompile. Simply add the desired fonts to the font table:
#define UCG_FONT_TABLE \
UCG_FONT_TABLE_ENTRY(font_7x13B_tr) \
UCG_FONT_TABLE_ENTRY(font_helvB12_hr) \
UCG_FONT_TABLE_ENTRY(font_helvB18_hr) \
UCG_FONT_TABLE_ENTRY(font_ncenR12_tr) \
UCG_FONT_TABLE_ENTRY(font_ncenR14_hr)
They'll be available as ucg.<font_name>
in Lua.
Syntax
disp:setFont(font)
Parameters
font
constant to identify pre-compiled font
Returns
nil
Example
disp:setFont(ucg.font_7x13B_tr)
See also
ucg.disp:setFontMode()
See ucglib setFontMode().
ucg.disp:setFontPosBaseline()
See ucglib setFontPosBaseline().
ucg.disp:setFontPosBottom()
See ucglib setFontPosBottom().
ucg.disp:setFontPosCenter()
See ucglib setFontPosCenter().
ucg.disp:setFontPosTop()
ucg.disp:setMaxClipRange()
ucg.disp:setPrintDir()
See ucglib setPrintDir().
ucg.disp:setPrintPos()
See ucglib setPrintPos().
ucg.disp:setRotate90()
See ucglib setRotate90().
ucg.disp:setRotate180()
ucg.disp:setRotate270()
ucg.disp:setScale2x2()
See ucglib setScale2x2().
ucg.disp:undoClipRange()
ucg.disp:undoRotate()
See ucglib undoRotate().
ucg.disp:undoScale()
See ucglib undoScale().