This commit is contained in:
Thomas Peterson 2026-01-15 22:22:50 +01:00
parent 36d210e1e2
commit efde86778b
5 changed files with 273 additions and 57 deletions

View File

@ -14,5 +14,6 @@
"--background-index",
"--query-driver=/home/thomas/.espressif/tools/riscv32-esp-elf/esp-14.2.0_20251107/riscv32-esp-elf/bin/riscv32-esp-elf-gcc",
"--compile-commands-dir=/home/thomas/projekte/test1/display/build"
]
],
"idf.flashType": "UART"
}

View File

@ -1,4 +1,19 @@
dependencies:
espressif/button:
component_hash:
fccb18c37f1cfe0797b74a53a44d3f400f5fd01f4993b40052dfb7f401915089
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: '*'
- name: idf
require: private
version: '>=4.0'
source:
registry_url: https://components.espressif.com
type: service
version: 4.1.5
espressif/cmake_utilities:
component_hash:
351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f
@ -36,6 +51,100 @@ dependencies:
registry_url: https://components.espressif.com/
type: service
version: 1.2.0~1
espressif/esp_lv_decoder:
component_hash:
0eb7b2bceaf73484ef80f5004337ee31617b2450a3d40621812998a47e7dd349
dependencies:
- name: espressif/esp_new_jpeg
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: espressif/libpng
registry_url: https://components.espressif.com
require: private
version: 1.*
- name: idf
require: private
version: '>=5.3'
- name: lvgl/lvgl
registry_url: https://components.espressif.com
require: private
version: '>=8,<10'
source:
registry_url: https://components.espressif.com
type: service
targets:
- esp32
- esp32s2
- esp32s3
- esp32p4
- esp32c2
- esp32c3
- esp32c5
- esp32c6
version: 0.3.2
espressif/esp_lv_fs:
component_hash:
66896007884b817df34c964f9a114fff538ee2674e99fee7159162498b93f94b
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: espressif/esp_mmap_assets
registry_url: https://components.espressif.com
require: private
version: '>=1.2'
- name: idf
require: private
version: '>=4.4'
- name: lvgl/lvgl
registry_url: https://components.espressif.com
require: private
version: '>=8,<10'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.1
espressif/esp_lvgl_adapter:
component_hash:
4ba6ad754b2533cb582bff81ba672ea7a682f4724a02327e57f96e9c73d330c2
dependencies:
- name: espressif/button
registry_url: https://components.espressif.com
require: public
version: 4.*
- name: espressif/esp_lcd_touch
registry_url: https://components.espressif.com
require: public
version: 1.*
- name: espressif/esp_lv_decoder
registry_url: https://components.espressif.com
require: public
version: 0.*
- name: espressif/esp_lv_fs
registry_url: https://components.espressif.com
require: public
version: 1.*
- name: espressif/freetype
registry_url: https://components.espressif.com
require: public
version: 2.*
- name: espressif/knob
registry_url: https://components.espressif.com
require: public
version: 1.*
- name: idf
require: private
version: '>=5.5'
- name: lvgl/lvgl
registry_url: https://components.espressif.com
require: private
version: '>=8,<10'
source:
registry_url: https://components.espressif.com/
type: service
version: 0.3.0
espressif/esp_lvgl_port:
component_hash:
f872401524cb645ee6ff1c9242d44fb4ddcfd4d37d7be8b9ed3f4e85a404efcd
@ -51,6 +160,49 @@ dependencies:
registry_url: https://components.espressif.com/
type: service
version: 2.7.0
espressif/esp_mmap_assets:
component_hash:
91d785326b03db15e2f7f1314d8c976d38f21aa5759b570dcbbc89bcf247fd27
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.4.0
espressif/esp_new_jpeg:
component_hash:
e6af208a875abd0ecfc0213d3751a11b504b463ebde6930f24096047925fa5c1
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
targets:
- esp32
- esp32s2
- esp32s3
- esp32p4
- esp32c2
- esp32c3
- esp32c5
- esp32c6
version: 0.6.1
espressif/freetype:
component_hash:
cd5e2d8458e6e8d73f1120ac474467cabb669d8ea4b25050bf6a348c1e89225e
dependencies:
- name: idf
require: private
version: '>=4.4'
source:
registry_url: https://components.espressif.com
type: service
version: 2.13.3~1
espressif/i2c_bus:
component_hash:
4e990dc11734316186b489b362c61d41f23f79d58bc169795cec215e528cba14
@ -66,6 +218,47 @@ dependencies:
registry_url: https://components.espressif.com
type: service
version: 1.5.0
espressif/knob:
component_hash:
138ed090b4c9090a0a678f695b9d1884b368130c729b7333ed35bd7f4e8da80e
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: idf
require: private
version: '>=4.4.1'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.2
espressif/libpng:
component_hash:
6eb993575e30da281faa37cecda2338ccf6d11dbd12234937758278d1c78b4fd
dependencies:
- name: idf
require: private
version: '>=5.0'
- name: espressif/zlib
registry_url: https://components.espressif.com
require: private
version: ^1.2.13
source:
registry_url: https://components.espressif.com
type: service
version: 1.6.52
espressif/zlib:
component_hash:
d901723af51f13fc8e5824f39f32239c847956e8fd951a05266588dc5cfbb9ae
dependencies:
- name: idf
require: private
version: '>=4.4'
source:
registry_url: https://components.espressif.com
type: service
version: 1.3.1
idf:
source:
type: idf
@ -101,10 +294,11 @@ dependencies:
version: 1.0.4
direct_dependencies:
- espressif/esp_lcd_touch_gt911
- espressif/esp_lvgl_adapter
- espressif/esp_lvgl_port
- idf
- lvgl/lvgl
- waveshare/esp_lcd_jd9365_10_1
manifest_hash: 1b3972520800645b8020e1ad5d7fcfe89a9006c17fff1fcaa83ae8df9e2314ff
manifest_hash: df48f0c889a77855e4d9de37a676a02669553fe2b7fdf43547783bcf8f97c123
target: esp32p4
version: 2.0.0

View File

@ -1,4 +1,4 @@
idf_component_register(SRCS "hello_world_main.c"
PRIV_REQUIRES spi_flash esp_lcd
REQUIRES esp_timer lvgl
PRIV_REQUIRES spi_flash esp_driver_ppa esp_lcd
REQUIRES esp_mm esp_driver_ppa esp_timer lvgl
INCLUDE_DIRS "")

View File

@ -16,6 +16,8 @@
#include "esp_ldo_regulator.h"
#include "esp_lcd_touch_gt911.h"
#include "lvgl.h"
#include "esp_timer.h"
#include "esp_lv_adapter.h"
#include "esp_lcd_jd9365_10_1.h"
#define TAG "JD9365_LVGL"
@ -43,26 +45,19 @@
static esp_lcd_panel_handle_t panel_handle = NULL;
static esp_lcd_touch_handle_t touch_handle = NULL;
static lv_display_t *display = NULL;
static uint8_t *buf1 = NULL;
static uint8_t *buf2 = NULL;
// ================= Callbacks ===================
static bool on_color_trans_done(esp_lcd_panel_handle_t panel, esp_lcd_dpi_panel_event_data_t *event_data, void *user_ctx)
{
BaseType_t high_task_awoken = pdFALSE;
if (display) {
lv_display_flush_ready(display);
}
return high_task_awoken == pdTRUE;
return false;
}
// ================= Flush Callback ===================
static void lvgl_flush_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *color_p)
{
// Warte bis vorheriger Transfer fertig ist
esp_lcd_panel_draw_bitmap(panel_handle, area->x1, area->y1,
area->x2 + 1, area->y2 + 1, color_p);
}
static void lvgl_touch_cb(lv_indev_t *indev, lv_indev_data_t *data)
{
uint16_t x[1], y[1];
@ -98,6 +93,10 @@ static void lcd_init(void)
esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &io_cfg, &mipi_dbi_io);
esp_lcd_dpi_panel_config_t dpi_cfg = JD9365_800_1280_PANEL_60HZ_DPI_CONFIG(LCD_COLOR_PIXEL_FORMAT_RGB565);
dpi_cfg.num_fbs = esp_lv_adapter_get_required_frame_buffer_count(
ESP_LV_ADAPTER_TEAR_AVOID_MODE_DEFAULT_MIPI_DSI, // Tearing mode
ESP_LV_ADAPTER_ROTATE_90 // Rotation
);
jd9365_vendor_config_t vendor_cfg = {
.flags = { .use_mipi_interface = 1 },
.mipi_config = { .dsi_bus = mipi_dsi_bus, .dpi_config = &dpi_cfg, .lane_num = MIPI_DSI_LANE_NUM }
@ -109,13 +108,13 @@ static void lcd_init(void)
.vendor_config = &vendor_cfg
};
esp_lcd_new_panel_jd9365(mipi_dbi_io, &panel_cfg, &panel_handle);
esp_lcd_panel_reset(panel_handle);
esp_lcd_panel_init(panel_handle);
ESP_ERROR_CHECK(esp_lcd_dpi_panel_get_frame_buffer(panel_handle, 2, (void **)&buf1, (void **)&buf2));
esp_lcd_panel_disp_on_off(panel_handle, true);
esp_lcd_dpi_panel_event_callbacks_t cbs = { .on_color_trans_done = on_color_trans_done };
esp_lcd_dpi_panel_register_event_callbacks(panel_handle, &cbs, NULL);
}
// ================= Touch init ===================
@ -143,7 +142,7 @@ static void touch_init(void)
.rst_gpio_num = TOUCH_RST_GPIO,
.int_gpio_num = TOUCH_INT_GPIO,
.levels = { .reset = 0, .interrupt = 0 },
.flags = { .swap_xy = 0, .mirror_x = 0, .mirror_y = 0 },
.flags = { .swap_xy = 1, .mirror_x = 1, .mirror_y = 0 },
};
ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_gt911(touch_io, &touch_cfg, &touch_handle));
}
@ -151,54 +150,74 @@ static void touch_init(void)
// ================= LVGL init ===================
static void lvgl_init(void)
{
lv_init();
esp_lv_adapter_config_t cfg = ESP_LV_ADAPTER_DEFAULT_CONFIG();
ESP_ERROR_CHECK(esp_lv_adapter_init(&cfg));
lv_display_t *disp = lv_display_create(LCD_H_RES, LCD_V_RES);
display = disp;
lv_display_set_color_format(disp, LV_COLOR_FORMAT_RGB565);
esp_lv_adapter_display_config_t disp_cfg = ESP_LV_ADAPTER_DISPLAY_MIPI_DEFAULT_CONFIG(
panel_handle, // LCD panel handle
NULL, // LCD panel IO handle (can be NULL for some interfaces)
LCD_H_RES, // Horizontal resolution
LCD_V_RES, // Vertical resolution
ESP_LV_ADAPTER_ROTATE_90 // Rotation
);
display = esp_lv_adapter_register_display(&disp_cfg);
assert(display != NULL);
// Full-screen double buffer für bessere Performance mit DPI Panel
size_t buf_size = LCD_H_RES * 200 * sizeof(uint16_t);
uint8_t *buf1 = heap_caps_aligned_alloc(64, buf_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_DMA);
uint8_t *buf2 = heap_caps_aligned_alloc(64, buf_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_DMA);
esp_lv_adapter_touch_config_t touch_cfg = ESP_LV_ADAPTER_TOUCH_DEFAULT_CONFIG(display, touch_handle);
lv_indev_t *touch = esp_lv_adapter_register_touch(&touch_cfg);
lv_indev_set_read_cb(touch, lvgl_touch_cb);
assert(touch != NULL);
if (!buf1 || !buf2) {
ESP_LOGE(TAG, "Failed to allocate buffers!");
return;
}
ESP_ERROR_CHECK(esp_lv_adapter_start());
}
lv_display_set_buffers(disp, buf1, buf2, buf_size, LV_DISPLAY_RENDER_MODE_PARTIAL);
lv_display_set_flush_cb(disp, lvgl_flush_cb);
lv_display_set_default(disp);
static lv_obj_t * label2;
lv_indev_t *indev = lv_indev_create();
lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);
lv_indev_set_read_cb(indev, lvgl_touch_cb);
lv_indev_set_display(indev, disp);
static void slider_event_cb(lv_event_t * e)
{
lv_obj_t * slider = lv_event_get_target_obj(e);
/*Refresh the text*/
lv_label_set_text_fmt(label2, "%" LV_PRId32, lv_slider_get_value(slider));
//lv_obj_align_to(label2, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); /*Align top of the slider*/
}
uint32_t my_get_milliseconds()
{
return esp_timer_get_time() / 1000;
}
// ================= UI ===================
static void create_ui(void)
{
lv_obj_t *tileview = lv_tileview_create(lv_screen_active());
if (esp_lv_adapter_lock(-1) == ESP_OK) {
lv_obj_t *tileview = lv_tileview_create(lv_scr_act());
// Page 1 - Blue
lv_obj_t *tile1 = lv_tileview_add_tile(tileview, 0, 0, LV_DIR_BOTTOM);
lv_obj_set_style_bg_color(tile1, lv_color_hex(0x2196F3), 0);
lv_obj_t *label1 = lv_label_create(tile1);
lv_label_set_text(label1, "Seite 1\n\nSwipe nach oben");
lv_obj_set_style_text_color(label1, lv_color_white(), 0);
lv_obj_set_style_text_font(label1, &lv_font_montserrat_28, 0);
lv_obj_center(label1);
// Page 1 - Blue
lv_obj_t *tile1 = lv_tileview_add_tile(tileview, 0, 0, LV_DIR_BOTTOM);
lv_obj_set_style_bg_color(tile1, lv_color_hex(0x2196F3), 0);
lv_obj_t *label1 = lv_label_create(tile1);
lv_label_set_text(label1, "Seite 1\n\nSwipe nach oben");
lv_obj_set_style_text_color(label1, lv_color_black(), 0);
lv_obj_set_style_text_font(label1, &lv_font_montserrat_14, 0);
lv_obj_center(label1);
// Page 2 - Green
lv_obj_t *tile2 = lv_tileview_add_tile(tileview, 0, 1, LV_DIR_TOP);
lv_obj_set_style_bg_color(tile2, lv_color_hex(0x4CAF50), 0);
lv_obj_t *label2 = lv_label_create(tile2);
lv_label_set_text(label2, "Seite 2\n\nSwipe nach unten");
lv_obj_set_style_text_color(label2, lv_color_white(), 0);
lv_obj_set_style_text_font(label2, &lv_font_montserrat_28, 0);
lv_obj_center(label2);
lv_obj_t * slider = lv_slider_create(tile1);
lv_obj_set_width(slider, 200); /*Set the width*/
lv_obj_center(slider); /*Align to the center of the parent (screen)*/
lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
// Page 2 - Green
lv_obj_t *tile2 = lv_tileview_add_tile(tileview, 0, 1, LV_DIR_TOP);
lv_obj_set_style_bg_color(tile2, lv_color_hex(0x4CAF50), 0);
label2 = lv_label_create(tile2);
lv_label_set_text(label2, "Seite 2\n\nSwipe nach unten");
lv_obj_set_style_text_color(label2, lv_color_black(), 0);
lv_obj_set_style_text_font(label2, &lv_font_montserrat_14, 0);
lv_obj_center(label2);
esp_lv_adapter_unlock();
}
}
// ================= Main ===================
@ -208,12 +227,13 @@ void app_main(void)
lcd_init();
touch_init();
lvgl_init();
create_ui();
//lv_tick_set_cb(xTaskGetTickCount);
//lv_tick_set_cb(my_get_milliseconds);
while (1) {
lv_tick_inc(10);
lv_task_handler();
lv_timer_handler();
vTaskDelay(pdMS_TO_TICKS(10));
}
}

View File

@ -18,3 +18,4 @@ dependencies:
lvgl/lvgl: ^9.4.0
espressif/esp_lvgl_port: ^2.3.0
espressif/esp_lcd_touch_gt911: '*'
espressif/esp_lvgl_adapter: '*'