Een van de vele mooie Waveshare-ontwikkelbordjes, hier geprogrammeerd met de snelle LovyanGFX-bibliotheek — te beginnen met een eenvoudige "Hello World"-sketch.
Waveshare heeft meerdere prachtige ontwikkelbordjes, waaronder dit. Ik kocht de versie zonder batterij en zonder touch control. Het heeft een display van 240×240 pixels, en drie knoppen op het kastje: GPIO 0 (flash), GPIO 5 (pwr) en GPIO 4 (key). We kunnen alle 3 deze knoppen gebruiken in een programma.
Zoals je ziet op de foto, heb ik een relatief complexe sketch gemaakt voor dit bord (energiebeheer voor de woning). De grafische bibliotheek LovyanGFX.hpp is geschikt om snelle sprites op het scherm uit te voeren. Maar het bleek een hele zoektocht hoe je de settings voor het display moest instellen. Daarom houden we het hier bij een eenvoudige "Hello World"-sketch.
/*
* Hello World – Waveshare ESP32-S3-LCD-1.54 (240×240, ST7789, IPS)
* Library : LovyanGFX
* Board : ESP32S3 Dev Module
* USB CDC On Boot: Enabled
*
* Confirmed pins:
* MOSI → 39 | SCLK → 38 | DC → 45 | CS → 21 | RST → 40 | BL → 46
*/
#define LGFX_USE_V1
#include <LovyanGFX.hpp>
class LGFX : public lgfx::LGFX_Device {
lgfx::Panel_ST7789 _panel;
lgfx::Bus_SPI _bus;
lgfx::Light_PWM _light;
public:
LGFX(void) {
{
auto cfg = _bus.config();
cfg.spi_host = SPI2_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 = 38;
cfg.pin_mosi = 39;
cfg.pin_miso = -1;
cfg.pin_dc = 45;
_bus.config(cfg);
_panel.setBus(&_bus);
}
{
auto cfg = _panel.config();
cfg.pin_cs = 21;
cfg.pin_rst = 40;
cfg.pin_busy = -1;
cfg.panel_width = 240;
cfg.panel_height = 240;
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 = true; // IPS panel
cfg.rgb_order = false;
cfg.dlen_16bit = false;
cfg.bus_shared = false;
_panel.config(cfg);
}
{
auto cfg = _light.config();
cfg.pin_bl = 46;
cfg.invert = false;
cfg.freq = 44100;
cfg.pwm_channel = 7;
_light.config(cfg);
_panel.setLight(&_light);
}
setPanel(&_panel);
}
};
LGFX display;
void setup(void) {
Serial.begin(115200);
display.init();
display.setRotation(0);
display.setBrightness(255);
display.fillScreen(TFT_BLACK);
display.setTextDatum(MC_DATUM);
display.setFont(&fonts::FreeSansBold12pt7b);
display.setTextColor(TFT_YELLOW);
display.drawString("ESP32-S3", display.width() / 2, 55);
display.setFont(&fonts::FreeSansBold18pt7b);
display.setTextColor(TFT_CYAN);
display.drawString("Hello", display.width() / 2, 110);
display.setFont(&fonts::FreeSansBold18pt7b);
display.setTextColor(TFT_GREEN);
display.drawString("World!", display.width() / 2, 150);
display.setFont(&fonts::Font2);
display.setTextColor(TFT_LIGHTGREY);
display.drawString("LovyanGFX 240x240", display.width() / 2, 200);
display.drawRoundRect(10, 10, display.width() - 20, display.height() - 20, 12, TFT_DARKGREY);
Serial.println("Ready.");
}
void loop(void) {}
Benieuwd naar andere displays? Bekijk het volledige overzicht met o.a. TM1637, SSD1306, SH1106, ST7735, ST7789, e-paper, de Lilygo TTGO T-Display en de T-Display S3. Zie ook het uitgebreide energiebeheer-project op deze Waveshare, met live P1-metergegevens.