ESP32-WROVER-KIT
Wrover-Kit
The ESP32-WROVER-KIT is a development board for the ESP32-WROVER module. It features a nice display and a lot of expansion headers.
The espp::WroverKit component provides a singleton hardware abstraction for initializing the display subsystems.
API Reference
Header File
Classes
-
class WroverKit : public espp::BaseComponent
The WroverKit class provides an interface to the ESP32-WROVER-KIT ESP32 development board.
The class provides access to the following features:
The class is a singleton and can be accessed using the get() method.
Example
espp::WroverKit &wrover = espp::WroverKit::get(); wrover.set_log_level(espp::Logger::Verbosity::INFO); // initialize the LCD if (!wrover.initialize_lcd()) { logger.error("Failed to initialize LCD!"); return; } // set the pixel buffer to be 50 lines high static constexpr size_t pixel_buffer_size = wrover.lcd_width() * 50; // initialize the LVGL display for the wrover-kit if (!wrover.initialize_display(pixel_buffer_size)) { logger.error("Failed to initialize display!"); return; } // create the GUI: builds the UI (label, circle layer) and starts the task // which updates LVGL. All of its public methods are thread-safe, so the // button callback and drawing loop below can call them directly. static Gui gui({.log_level = espp::Logger::Verbosity::INFO}); gui.set_label_text("Drawing circles to the screen."); // initialize the button, which we'll use to cycle the rotation of the display espp::Button button(espp::Button::Config{ .name = "Boot Button", .interrupt_config = espp::Interrupt::PinConfig{.gpio_num = GPIO_NUM_0, .callback = [](const auto &event) { if (event.active) { gui.next_rotation(); } }, .active_level = espp::Interrupt::ActiveLevel::LOW, .interrupt_type = espp::Interrupt::Type::ANY_EDGE, .pullup_enabled = false, .pulldown_enabled = false}, }); // set the display brightness to be 75% wrover.brightness(75.0f); while (true) { auto start = esp_timer_get_time(); // if there are 10 circles on the screen, clear them if (gui.circle_count() >= Gui::MAX_CIRCLES) { gui.clear_circles(); } else { // draw a circle of circles on the screen (just draw the next circle) int middle_x = wrover.rotated_display_width() / 2; int middle_y = wrover.rotated_display_height() / 2; static constexpr int radius = 50; float angle = gui.circle_count() * 2.0f * std::numbers::pi_v<float> / Gui::MAX_CIRCLES; int x = middle_x + radius * std::cos(angle); int y = middle_y + radius * std::sin(angle); gui.draw_circle(x, y, 10); } auto end = esp_timer_get_time(); auto elapsed = end - start; std::this_thread::sleep_for(100ms - std::chrono::microseconds(elapsed)); }
Public Types
-
using Pixel = lv_color16_t
Alias for the pixel type used by the wrover-kit display.
Public Functions
-
bool initialize_lcd()
Initialize the LCD (low level display driver)
- Returns:
true if the LCD was successfully initialized, false otherwise
-
bool initialize_display(size_t pixel_buffer_size)
Initialize the display (lvgl display driver)
Note
This will also allocate two full frame buffers in the SPIRAM
- Parameters:
pixel_buffer_size – The size of the pixel buffer
- Returns:
true if the display was successfully initialized, false otherwise
-
size_t rotated_display_width() const
Get the display width in pixels, according to the current orientation
- Returns:
The display width in pixels, according to the current orientation
-
size_t rotated_display_height() const
Get the display height in pixels, according to the current orientation
- Returns:
The display height in pixels, according to the current orientation
-
std::shared_ptr<Display<Pixel>> display() const
Get a shared pointer to the display
- Returns:
A shared pointer to the display
-
inline const std::shared_ptr<DisplayDriver> &display_driver() const
Get a shared pointer to the low-level display driver
- Returns:
A shared pointer to the display driver
-
void brightness(float brightness)
Set the brightness of the backlight
Note
This function will only work after initialize_lcd() has been called
- Parameters:
brightness – The brightness of the backlight as a percentage (0 - 100)
-
float brightness() const
Get the brightness of the backlight
Note
This function will only work after initialize_lcd() has been called
- Returns:
The brightness of the backlight as a percentage (0 - 100)
-
Pixel *vram0() const
Get the VRAM 0 pointer (DMA memory used by LVGL)
Note
This is the memory used by LVGL for rendering
Note
This is null unless initialize_display() has been called
- Returns:
The VRAM 0 pointer
-
Pixel *vram1() const
Get the VRAM 1 pointer (DMA memory used by LVGL)
Note
This is the memory used by LVGL for rendering
Note
This is null unless initialize_display() has been called
- Returns:
The VRAM 1 pointer
-
uint8_t *frame_buffer0() const
Get the frame buffer 0 pointer
Note
This memory is designed to be used by the application developer and is provided as a convenience. It is not used by the display driver.
Note
This is null unless initialize_display() has been called
- Returns:
The frame buffer 0 pointer
-
uint8_t *frame_buffer1() const
Get the frame buffer 1 pointer
Note
This memory is designed to be used by the application developer and is provided as a convenience. It is not used by the display driver.
Note
This is null unless initialize_display() has been called
- Returns:
The frame buffer 1 pointer
-
void write_lcd_frame(const uint16_t x, const uint16_t y, const uint16_t width, const uint16_t height, uint8_t *data)
Write a frame to the LCD
Note
This method queues the data to be written to the LCD, only blocking if there is an ongoing SPI transaction
- Parameters:
x – The x coordinate
y – The y coordinate
width – The width of the frame, in pixels
height – The height of the frame, in pixels
data – The data to write
-
void write_lcd_lines(int xs, int ys, int xe, int ye, const uint8_t *data, uint32_t user_data)
Write lines to the LCD
Note
This method queues the panel transfer asynchronously and may return before the write has completed.
- Parameters:
xs – The x start coordinate
ys – The y start coordinate
xe – The x end coordinate
ye – The y end coordinate
data – The data to write
user_data – User data to pass to the SPI transaction callback
-
inline const std::string &get_name() const
Get the name of the component
Note
This is the tag of the logger
- Returns:
A const reference to the name of the component
-
inline void set_log_tag(const std::string_view &tag)
Set the tag for the logger
- Parameters:
tag – The tag to use for the logger
-
inline espp::Logger::Verbosity get_log_level() const
Get the log level for the logger
See also
See also
- Returns:
The verbosity level of the logger
-
inline void set_log_level(espp::Logger::Verbosity level)
Set the log level for the logger
See also
See also
- Parameters:
level – The verbosity level to use for the logger
-
inline void set_log_verbosity(espp::Logger::Verbosity level)
Set the log verbosity for the logger
See also
See also
See also
Note
This is a convenience method that calls set_log_level
- Parameters:
level – The verbosity level to use for the logger
-
inline espp::Logger::Verbosity get_log_verbosity() const
Get the log verbosity for the logger
See also
See also
See also
Note
This is a convenience method that calls get_log_level
- Returns:
The verbosity level of the logger
-
inline void set_log_rate_limit(std::chrono::duration<float> rate_limit)
Set the rate limit for the logger
See also
Note
Only calls to the logger that have _rate_limit suffix will be rate limited
- Parameters:
rate_limit – The rate limit to use for the logger
Public Static Functions
-
static inline WroverKit &get()
Access the singleton instance of the WroverKit class.
- Returns:
Reference to the singleton instance of the WroverKit class
-
static inline constexpr size_t lcd_width()
Get the width of the LCD in pixels
- Returns:
The width of the LCD in pixels
-
static inline constexpr size_t lcd_height()
Get the height of the LCD in pixels
- Returns:
The height of the LCD in pixels
-
static inline constexpr auto get_lcd_dc_gpio()
Get the GPIO pin for the LCD data/command signal
- Returns:
The GPIO pin for the LCD data/command signal
Public Static Attributes
-
struct TouchpadData
The data structure for the touchpad.
Public Functions
-
bool operator==(const TouchpadData &rhs) const = default
Compare two TouchpadData objects for equality.
- Parameters:
rhs – The right hand side of the comparison
- Returns:
true if the two TouchpadData objects are equal, false otherwise
-
bool operator==(const TouchpadData &rhs) const = default
-
using Pixel = lv_color16_t