first commit

This commit is contained in:
David R.
2025-09-05 18:58:05 +02:00
parent fc13e0779b
commit ed05c83ac6
3678 changed files with 832193 additions and 0 deletions
@@ -0,0 +1,3 @@
**/squareline/backup/**
**/squareline/autosave/**
components/lvgl/**
@@ -0,0 +1,10 @@
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
add_compile_options(-Wno-format)
add_compile_options(-Wno-ignored-qualifiers)
project(lvgl_demo_v8)
@@ -0,0 +1,170 @@
# LVGL Demo v8
[中文版本](./README_CN.md)
This example demonstrates how to port LVGL v8 and conduct performance testing using LVGL's built-in demos. The example utilizes the development board's MIPI-DSI interface. Based on this example, applications based on LVGL v8 can be developed.
## Getting Started
### Prerequisites
* An ESP32-P4-Function-EV-Board.
* A 7-inch 1024 x 600 LCD screen powered by the [EK79007](https://dl.espressif.com/dl/schematics/display_driver_chip_EK79007AD_datasheet.pdf) IC, accompanied by a 32-pin FPC connection [adapter board](https://dl.espressif.com/dl/schematics/esp32-p4-function-ev-board-lcd-subboard-schematics.pdf) ([LCD Specifications](https://dl.espressif.com/dl/schematics/display_datasheet.pdf)).
* A USB-C cable for power supply and programming.
* Please refer to the following steps for the connection:
* **Step 1**. According to the table below, connect the pins on the back of the screen adapter board to the corresponding pins on the development board.
| Screen Adapter Board | ESP32-P4-Function-EV-Board |
| -------------------- | -------------------------- |
| 5V (any one) | 5V (any one) |
| GND (any one) | GND (any one) |
| PWM | GPIO26 |
| LCD_RST | GPIO27 |
* **Step 2**. Connect the FPC of LCD through the `MIPI_DSI` interface.
* **Step 3**. Use a USB-C cable to connect the `USB-UART` port to a PC (Used for power supply and viewing serial output).
* **Step 4**. Turn on the power switch of the board.
### ESP-IDF Required
- This example supports ESP-IDF release/v5.3 and later branches. By default, it runs on ESP-IDF release/v5.3.
- Please follow the [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html) to set up the development environment. **We highly recommend** you [Build Your First Project](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#build-your-first-project) to get familiar with ESP-IDF and make sure the environment is set up correctly.
### Get the esp-dev-kits Repository
To start from the examples in esp-dev-kits, clone the repository to the local PC by running the following commands in the terminal:
```
git clone --recursive https://github.com/espressif/esp-dev-kits.git
```
### Configuration
Run ``idf.py menuconfig`` and go to ``Board Support Package(ESP32-P4)``:
```
menuconfig > Component config > Board Support Package
```
## How to Use the Example
### Build and Flash the Example
Build the project and flash it to the board, then run monitor tool to view serial output (replace `PORT` with your board's serial port name):
```c
idf.py -p PORT flash monitor
```
To exit the serial monitor, type ``Ctrl-]``.
See the [ESP-IDF Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects.
### Example Output
- The complete log is as follows:
```c
I (25) boot: ESP-IDF v5.4-dev-2167-gdef35b1ca7-dirty 2nd stage bootloader
I (26) boot: compile time Sep 27 2024 16:56:08
I (27) boot: Multicore bootloader
I (32) boot: chip revision: v0.1
I (35) qio_mode: Enabling default flash chip QIO
I (40) boot.esp32p4: SPI Speed : 80MHz
I (45) boot.esp32p4: SPI Mode : QIO
I (49) boot.esp32p4: SPI Flash Size : 16MB
I (54) boot: Enabling RNG early entropy source...
I (60) boot: Partition Table:
I (63) boot: ## Label Usage Type ST Offset Length
I (70) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (78) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (85) boot: 2 factory factory app 00 00 00010000 00800000
I (93) boot: 3 storage Unknown data 01 82 00810000 00700000
I (101) boot: End of partition table
I (105) esp_image: segment 0: paddr=00010020 vaddr=48060020 size=7573ch (481084) map
I (189) esp_image: segment 1: paddr=00085764 vaddr=30100000 size=00020h ( 32) load
I (191) esp_image: segment 2: paddr=0008578c vaddr=30100020 size=0003ch ( 60) load
I (196) esp_image: segment 3: paddr=000857d0 vaddr=4ff00000 size=0a848h ( 43080) load
I (212) esp_image: segment 4: paddr=00090020 vaddr=48000020 size=58208h (360968) map
I (270) esp_image: segment 5: paddr=000e8230 vaddr=4ff0a848 size=0e2b8h ( 58040) load
I (283) esp_image: segment 6: paddr=000f64f0 vaddr=4ff18b00 size=031b4h ( 12724) load
I (291) boot: Loaded app from partition at offset 0x10000
I (292) boot: Disabling RNG early entropy source...
I (303) hex_psram: vendor id : 0x0d (AP)
I (304) hex_psram: Latency : 0x01 (Fixed)
I (304) hex_psram: DriveStr. : 0x00 (25 Ohm)
I (307) hex_psram: dev id : 0x03 (generation 4)
I (313) hex_psram: density : 0x07 (256 Mbit)
I (318) hex_psram: good-die : 0x06 (Pass)
I (323) hex_psram: SRF : 0x02 (Slow Refresh)
I (329) hex_psram: BurstType : 0x00 ( Wrap)
I (334) hex_psram: BurstLen : 0x03 (2048 Byte)
I (340) hex_psram: BitMode : 0x01 (X16 Mode)
I (345) hex_psram: Readlatency : 0x04 (14 cycles@Fixed)
I (351) hex_psram: DriveStrength: 0x00 (1/1)
I (356) MSPI DQS: tuning success, best phase id is 2
I (544) MSPI DQS: tuning success, best delayline id is 11
I esp_psram: Found 32MB PSRAM device
I esp_psram: Speed: 200MHz
I (545) mmu_psram: flash_drom_paddr_start: 0x10000
I (575) mmu_psram: flash_irom_paddr_start: 0x90000
I (594) hex_psram: psram CS IO is dedicated
I (594) cpu_start: Multicore app
I (1050) esp_psram: SPI SRAM memory test OK
W (1060) clk: esp_perip_clk_init() has not been implemented yet
I (1067) cpu_start: Pro cpu start user code
I (1067) cpu_start: cpu freq: 360000000 Hz
I (1067) app_init: Application information:
I (1070) app_init: Project name: lvgl_demo_v8
I (1076) app_init: App version: 7e53cd00-dirty
I (1081) app_init: Compile time: Sep 27 2024 16:55:57
I (1087) app_init: ELF file SHA256: f111a533d...
I (1093) app_init: ESP-IDF: v5.4-dev-2167-gdef35b1ca7-dirty
I (1100) efuse_init: Min chip rev: v0.1
I (1104) efuse_init: Max chip rev: v0.99
I (1109) efuse_init: Chip rev: v0.1
I (1114) heap_init: Initializing. RAM available for dynamic allocation:
I (1122) heap_init: At 4FF1DCE0 len 0001D2E0 (116 KiB): RAM
I (1128) heap_init: At 4FF3AFC0 len 00004BF0 (18 KiB): RAM
I (1134) heap_init: At 4FF40000 len 00040000 (256 KiB): RAM
I (1140) heap_init: At 50108080 len 00007F80 (31 KiB): RTCRAM
I (1147) heap_init: At 3010005C len 00001FA4 (7 KiB): TCM
I (1153) esp_psram: Adding pool of 31360K of PSRAM memory to heap allocator
I (1161) spi_flash: detected chip: generic
I (1165) spi_flash: flash io: qio
W (1169) i2c: This driver is an old driver, please migrate your application code to adapt `driver/i2c_master.h`
I (1180) main_task: Started on CPU0
I (1203) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (1203) main_task: Calling app_main()
I (1205) LVGL: Starting LVGL task
W (1209) ledc: GPIO 26 is not usable, maybe conflict with others
I (1216) ESP32_P4_EV: MIPI DSI PHY Powered on
I (1222) ESP32_P4_EV: Install MIPI DSI LCD control panel
I (1227) ESP32_P4_EV: Install EK79007 LCD control panel
I (1233) ek79007: version: 0.1.0
I (1237) gpio: GPIO[27]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1403) ESP32_P4_EV: Display initialized
E (1404) lcd_panel: esp_lcd_panel_swap_xy(50): swap_xy is not supported by this panel
W (1405) GT911: Unable to initialize the I2C address
I (1411) GT911: TouchPad_ID:0x39,0x31,0x31
I (1415) GT911: TouchPad_Config_Version:89
I (1420) ESP32_P4_EV: Setting LCD backlight: 100%
I (1489) main_task: Returned from app_main()
...
```
## Technical Support and Feedback
Please use the following feedback channels:
- For technical queries, go to the [esp32.com](https://esp32.com/viewforum.php?f=22) forum.
- For a feature request or bug report, create a [GitHub issue](https://github.com/espressif/esp-dev-kits/issues).
We will get back to you as soon as possible.
@@ -0,0 +1,166 @@
# LVGL Demo v8
[英文版本](./README.md)
该示例演示了如何移植 LVGL v8 并使用 LVGL 内置的示例进行性能测试。该示例使用了开发板的 MIPI-DSI 接口。基于此示例,可以开发基于 LVGL v8 的应用。
## 快速入门
### 准备工作
* 一块 ESP32-P4-Function-EV-Board 开发板。
* 一块由 [EK79007](https://dl.espressif.com/dl/schematics/display_driver_chip_EK79007AD_datasheet.pdf) 芯片驱动的 7 英寸 1024 x 600 LCD 屏幕,配有 32 针 FPC 连接 [适配板](https://dl.espressif.com/dl/schematics/esp32-p4-function-ev-board-lcd-subboard-schematics.pdf) ([LCD 规格](https://dl.espressif.com/dl/schematics/display_datasheet.pdf))。
* 用于供电和编程的 USB-C 电缆。
* 请参考以下步骤进行连接:
* **步骤 1**. 根据下表,将屏幕适配板背面的引脚连接到开发板的相应引脚。
| 屏幕适配板 | ESP32-P4-Function-EV-Board |
| -------------------- | -------------------------- |
| 5V(任意一个) | 5V(任意一个) |
| GND(任意一个) | GND(任意一个) |
| PWM | GPIO26 |
| LCD_RST | GPIO27 |
* **步骤 2**. 通过 `MIPI_DSI` 接口连接 LCD 的 FPC。
* **步骤 3**. 使用 USB-C 电缆将 `USB-UART` 端口连接到 PC(用于供电和查看串行输出)。
* **步骤 4**. 打开开发板的电源开关。
### ESP-IDF 要求
- 此示例支持 ESP-IDF release/v5.3 及以上版本。默认情况下,在 ESP-IDF release/v5.3 上运行。
- 请参照 [ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html) 设置开发环境。**强烈推荐** 通过 [编译第一个工程](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#id8) 来熟悉 ESP-IDF,并确保环境设置正确。
### 获取 esp-dev-kits 仓库
在编译 esp-dev-kits 仓库中的示例之前,请先在终端中运行以下命令,将该仓库克隆到本地:
```
git clone --recursive https://github.com/espressif/esp-dev-kits.git
```
### 配置
运行 ``idf.py menuconfig`` 并修改 ``Board Support Package(ESP32-P4)`` 配置:
```
menuconfig > Component config > Board Support Package
```
## 如何使用示例
### 编译和烧录示例
编译项目并将其烧录到开发板上,运行监视工具可查看串行端口输出(将 `PORT` 替换为所用开发板的串行端口名):
```c
idf.py -p PORT flash monitor
```
输入``Ctrl-]`` 可退出串口监视。
有关配置和使用 ESP-IDF 来编译项目的完整步骤,请参阅 [ESP-IDF 快速入门指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html) 。
### 示例输出
- 完整日志如下所示:
```c
I (25) boot: ESP-IDF v5.4-dev-2167-gdef35b1ca7-dirty 2nd stage bootloader
I (26) boot: compile time Sep 27 2024 16:56:08
I (27) boot: Multicore bootloader
I (32) boot: chip revision: v0.1
I (35) qio_mode: Enabling default flash chip QIO
I (40) boot.esp32p4: SPI Speed : 80MHz
I (45) boot.esp32p4: SPI Mode : QIO
I (49) boot.esp32p4: SPI Flash Size : 16MB
I (54) boot: Enabling RNG early entropy source...
I (60) boot: Partition Table:
I (63) boot: ## Label Usage Type ST Offset Length
I (70) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (78) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (85) boot: 2 factory factory app 00 00 00010000 00800000
I (93) boot: 3 storage Unknown data 01 82 00810000 00700000
I (101) boot: End of partition table
I (105) esp_image: segment 0: paddr=00010020 vaddr=48060020 size=7573ch (481084) map
I (189) esp_image: segment 1: paddr=00085764 vaddr=30100000 size=00020h ( 32) load
I (191) esp_image: segment 2: paddr=0008578c vaddr=30100020 size=0003ch ( 60) load
I (196) esp_image: segment 3: paddr=000857d0 vaddr=4ff00000 size=0a848h ( 43080) load
I (212) esp_image: segment 4: paddr=00090020 vaddr=48000020 size=58208h (360968) map
I (270) esp_image: segment 5: paddr=000e8230 vaddr=4ff0a848 size=0e2b8h ( 58040) load
I (283) esp_image: segment 6: paddr=000f64f0 vaddr=4ff18b00 size=031b4h ( 12724) load
I (291) boot: Loaded app from partition at offset 0x10000
I (292) boot: Disabling RNG early entropy source...
I (303) hex_psram: vendor id : 0x0d (AP)
I (304) hex_psram: Latency : 0x01 (Fixed)
I (304) hex_psram: DriveStr. : 0x00 (25 Ohm)
I (307) hex_psram: dev id : 0x03 (generation 4)
I (313) hex_psram: density : 0x07 (256 Mbit)
I (318) hex_psram: good-die : 0x06 (Pass)
I (323) hex_psram: SRF : 0x02 (Slow Refresh)
I (329) hex_psram: BurstType : 0x00 ( Wrap)
I (334) hex_psram: BurstLen : 0x03 (2048 Byte)
I (340) hex_psram: BitMode : 0x01 (X16 Mode)
I (345) hex_psram: Readlatency : 0x04 (14 cycles@Fixed)
I (351) hex_psram: DriveStrength: 0x00 (1/1)
I (356) MSPI DQS: tuning success, best phase id is 2
I (544) MSPI DQS: tuning success, best delayline id is 11
I esp_psram: Found 32MB PSRAM device
I esp_psram: Speed: 200MHz
I (545) mmu_psram: flash_drom_paddr_start: 0x10000
I (575) mmu_psram: flash_irom_paddr_start: 0x90000
I (594) hex_psram: psram CS IO is dedicated
I (594) cpu_start: Multicore app
I (1050) esp_psram: SPI SRAM memory test OK
W (1060) clk: esp_perip_clk_init() has not been implemented yet
I (1067) cpu_start: Pro cpu start user code
I (1067) cpu_start: cpu freq: 360000000 Hz
I (1067) app_init: Application information:
I (1070) app_init: Project name: lvgl_demo_v8
I (1076) app_init: App version: 7e53cd00-dirty
I (1081) app_init: Compile time: Sep 27 2024 16:55:57
I (1087) app_init: ELF file SHA256: f111a533d...
I (1093) app_init: ESP-IDF: v5.4-dev-2167-gdef35b1ca7-dirty
I (1100) efuse_init: Min chip rev: v0.1
I (1104) efuse_init: Max chip rev: v0.99
I (1109) efuse_init: Chip rev: v0.1
I (1114) heap_init: Initializing. RAM available for dynamic allocation:
I (1122) heap_init: At 4FF1DCE0 len 0001D2E0 (116 KiB): RAM
I (1128) heap_init: At 4FF3AFC0 len 00004BF0 (18 KiB): RAM
I (1134) heap_init: At 4FF40000 len 00040000 (256 KiB): RAM
I (1140) heap_init: At 50108080 len 00007F80 (31 KiB): RTCRAM
I (1147) heap_init: At 3010005C len 00001FA4 (7 KiB): TCM
I (1153) esp_psram: Adding pool of 31360K of PSRAM memory to heap allocator
I (1161) spi_flash: detected chip: generic
I (1165) spi_flash: flash io: qio
W (1169) i2c: This driver is an old driver, please migrate your application code to adapt `driver/i2c_master.h`
I (1180) main_task: Started on CPU0
I (1203) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (1203) main_task: Calling app_main()
I (1205) LVGL: Starting LVGL task
W (1209) ledc: GPIO 26 is not usable, maybe conflict with others
I (1216) ESP32_P4_EV: MIPI DSI PHY Powered on
I (1222) ESP32_P4_EV: Install MIPI DSI LCD control panel
I (1227) ESP32_P4_EV: Install EK79007 LCD control panel
I (1233) ek79007: version: 0.1.0
I (1237) gpio: GPIO[27]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1403) ESP32_P4_EV: Display initialized
E (1404) lcd_panel: esp_lcd_panel_swap_xy(50): swap_xy is not supported by this panel
W (1405) GT911: Unable to initialize the I2C address
I (1411) GT911: TouchPad_ID:0x39,0x31,0x31
I (1415) GT911: TouchPad_Config_Version:89
I (1420) ESP32_P4_EV: Setting LCD backlight: 100%
I (1489) main_task: Returned from app_main()
...
```
## 技术支持与反馈
请通过以下渠道进行反馈:
- 有关技术问题,请访问 [esp32.com](https://esp32.com/viewforum.php?f=22) 论坛。
- 有关功能请求或错误报告,请创建新的 [GitHub 问题](https://github.com/espressif/esp-dev-kits/issues)。
我们会尽快回复。
@@ -0,0 +1,102 @@
dependencies:
espressif/cmake_utilities:
component_hash: 351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f
dependencies:
- name: idf
require: private
version: '>=4.1'
source:
registry_url: https://components.espressif.com
type: service
version: 0.5.3
espressif/esp_lcd_touch:
component_hash: 779b4ba2464a3ae85681e4b860caa5fdc35801458c23f3039ee761bae7f442a4
dependencies:
- name: idf
require: private
version: '>=4.4.2'
source:
registry_url: https://components.espressif.com
type: service
version: 1.1.2
espressif/esp_lcd_touch_gt911:
component_hash: acc1c184358aa29ef72506f618c9c76a8cc2bf12af38a2bff3d44d84f3a08857
dependencies:
- name: espressif/esp_lcd_touch
registry_url: https://components.espressif.com
require: public
version: ^1.1.0
- name: idf
require: private
version: '>=4.4.2'
source:
registry_url: https://components.espressif.com/
type: service
version: 1.1.3
espressif/esp_lvgl_port:
component_hash: e720c95cf0667554a204591bb5fade4655fb2990465557041200fa44b5bc7556
dependencies:
- name: idf
require: private
version: '>=4.4'
- name: lvgl/lvgl
registry_url: https://components.espressif.com
require: public
version: '>=8,<10'
source:
registry_url: https://components.espressif.com/
type: service
version: 2.6.0
espressif/i2c_bus:
component_hash: e3dddc78baa172f4768f3973fbecbd6c6c1f2cb23cc6a36cf3132758be092482
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: idf
require: private
version: '>=4.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.4.0
idf:
source:
type: idf
version: 6.0.0
lvgl/lvgl:
component_hash: d7c1ac037ae6e85d94897f807d6e7ba0946a83e720074fc95a4f6241da9f9f53
dependencies: []
source:
registry_url: https://components.espressif.com/
type: service
version: 8.4.0
waveshare/esp_lcd_jd9365_10_1:
component_hash: 148d03ade699a7fa0f08c98e86c1df3d32e92580fac421c04e0ee5b779e86267
dependencies:
- name: espressif/cmake_utilities
registry_url: https://components.espressif.com
require: private
version: 0.*
- name: espressif/i2c_bus
registry_url: https://components.espressif.com
require: private
version: ^1.3.0
- name: idf
require: private
version: '>=5.3'
source:
registry_url: https://components.espressif.com/
type: service
targets:
- esp32p4
version: 1.0.3
direct_dependencies:
- espressif/esp_lcd_touch_gt911
- espressif/esp_lvgl_port
- lvgl/lvgl
- waveshare/esp_lcd_jd9365_10_1
manifest_hash: 20a2057422e78de8dbc6744f0985070a13a76f7337d34a09e1b0ba474b066ee3
target: esp32p4
version: 2.0.0
@@ -0,0 +1,11 @@
idf_component_register(
SRCS main.c
INCLUDE_DIRS .)
idf_component_get_property(LVGL_LIB lvgl__lvgl COMPONENT_LIB)
target_compile_options(
${LVGL_LIB}
PRIVATE
-DLV_LVGL_H_INCLUDE_SIMPLE
-DLV_USE_DEMO_MUSIC
)
@@ -0,0 +1,5 @@
#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
@@ -0,0 +1,8 @@
## IDF Component Manager Manifest File
dependencies:
lvgl/lvgl:
version: 8.4.*
public: true
esp_lcd_touch_gt911: ^1
waveshare/esp_lcd_jd9365_10_1: ^1.0.3
espressif/esp_lvgl_port: "*"
@@ -0,0 +1,219 @@
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "driver/ledc.h"
#include "driver/i2c_master.h"
#include "nvs_flash.h"
#include "nvs.h"
#include "esp_log.h"
#include "esp_err.h"
#include "esp_check.h"
#include "esp_memory_utils.h"
#include "esp_lcd_panel_ops.h"
#include "esp_lcd_mipi_dsi.h"
#include "esp_ldo_regulator.h"
#include "esp_vfs_fat.h"
#include "sd_pwr_ctrl_by_on_chip_ldo.h"
#include "esp_lcd_jd9365_10_1.h"
#include "esp_lcd_touch_gt911.h"
#include "lvgl.h"
#include "lv_demos.h"
#include "esp_lvgl_port.h"
#define TAG "main"
#define BSP_MIPI_DSI_PHY_PWR_LDO_CHAN (3) // LDO_VO3 is connected to VDD_MIPI_DPHY
#define BSP_MIPI_DSI_PHY_PWR_LDO_VOLTAGE_MV (2500)
#define BSP_LCD_DPI_BUFFER_NUMS (2)
#define BSP_LCD_H_RES (800)
#define BSP_LCD_V_RES (1280)
#define BSP_I2C_NUM (I2C_NUM_1)
#define BSP_I2C_SDA (GPIO_NUM_7)
#define BSP_I2C_SCL (GPIO_NUM_8)
#define BSP_LCD_TOUCH_RST (GPIO_NUM_NC)
#define BSP_LCD_TOUCH_INT (GPIO_NUM_NC)
#define BSP_LCD_RST (GPIO_NUM_NC)
#define BSP_LCD_BACKLIGHT (GPIO_NUM_NC)
i2c_master_bus_handle_t i2c_handle = NULL;
static esp_err_t bsp_display_brightness_set(int brightness_percent)
{
if (brightness_percent > 100) {
brightness_percent = 100;
}
if (brightness_percent < 0) {
brightness_percent = 0;
}
uint8_t data = (uint8_t)(255 * brightness_percent * 0.01);
uint8_t chip_addr = 0x45;
uint8_t data_addr = 0x96;
uint8_t data_to_send[2] = {data_addr, data};
i2c_device_config_t i2c_dev_conf = {
.scl_speed_hz = 100 * 1000,
.device_address = chip_addr,
};
i2c_master_dev_handle_t dev_handle = NULL;
if (i2c_master_bus_add_device(i2c_handle, &i2c_dev_conf, &dev_handle) != ESP_OK)
{
return ESP_FAIL;
}
esp_err_t ret = i2c_master_transmit(dev_handle, data_to_send, sizeof(data_to_send), 50);
if (ret != ESP_OK)
{
i2c_master_bus_rm_device(dev_handle);
return ret;
}
i2c_master_bus_rm_device(dev_handle);
return ESP_OK;
}
void app_main(void)
{
i2c_master_bus_config_t i2c_bus_conf = {
.clk_source = I2C_CLK_SRC_DEFAULT,
.sda_io_num = BSP_I2C_SDA,
.scl_io_num = BSP_I2C_SCL,
.i2c_port = BSP_I2C_NUM,
};
i2c_new_master_bus(&i2c_bus_conf, &i2c_handle);
static esp_ldo_channel_handle_t phy_pwr_chan = NULL;
esp_ldo_channel_config_t ldo_cfg = {
.chan_id = BSP_MIPI_DSI_PHY_PWR_LDO_CHAN,
.voltage_mv = BSP_MIPI_DSI_PHY_PWR_LDO_VOLTAGE_MV,
};
esp_ldo_acquire_channel(&ldo_cfg, &phy_pwr_chan);
ESP_LOGI(TAG, "MIPI DSI PHY Powered on");
esp_lcd_dsi_bus_handle_t mipi_dsi_bus;
esp_lcd_dsi_bus_config_t bus_config = JD9365_PANEL_BUS_DSI_2CH_CONFIG();
esp_lcd_new_dsi_bus(&bus_config, &mipi_dsi_bus);
ESP_LOGI(TAG, "Install MIPI DSI LCD control panel");
// we use DBI interface to send LCD commands and parameters
esp_lcd_panel_io_handle_t io;
esp_lcd_dbi_io_config_t dbi_config =JD9365_PANEL_IO_DBI_CONFIG();
esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &dbi_config, &io);
esp_lcd_panel_handle_t disp_panel = NULL;
esp_lcd_dpi_panel_config_t dpi_config = JD9365_800_1280_PANEL_60HZ_DPI_CONFIG(LCD_COLOR_PIXEL_FORMAT_RGB565);
dpi_config.num_fbs = BSP_LCD_DPI_BUFFER_NUMS;
jd9365_vendor_config_t vendor_config = {
.flags = {
.use_mipi_interface = 1,
},
.mipi_config = {
.dsi_bus = mipi_dsi_bus,
.dpi_config = &dpi_config,
.lane_num = 2
},
};
esp_lcd_panel_dev_config_t lcd_dev_config = {
.bits_per_pixel = 16,
.rgb_ele_order = ESP_LCD_COLOR_SPACE_RGB,
.reset_gpio_num = BSP_LCD_RST,
.vendor_config = &vendor_config,
};
esp_lcd_new_panel_jd9365(io, &lcd_dev_config, &disp_panel);
esp_lcd_panel_reset(disp_panel);
esp_lcd_panel_init(disp_panel);
const esp_lcd_touch_config_t tp_cfg = {
.x_max = BSP_LCD_H_RES,
.y_max = BSP_LCD_V_RES,
.rst_gpio_num = BSP_LCD_TOUCH_RST, // Shared with LCD reset
.int_gpio_num = BSP_LCD_TOUCH_INT,
.levels = {
.reset = 0,
.interrupt = 0,
},
.flags = {
.swap_xy = 0,
.mirror_x = 0,
.mirror_y = 0,
},
};
esp_lcd_panel_io_handle_t tp_io_handle = NULL;
esp_lcd_touch_handle_t tp;
esp_lcd_panel_io_i2c_config_t tp_io_config = ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG();
tp_io_config.scl_speed_hz = 100000;
esp_lcd_new_panel_io_i2c(i2c_handle, &tp_io_config, &tp_io_handle);
esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, &tp);
lvgl_port_cfg_t lv_Port = ESP_LVGL_PORT_INIT_CONFIG();
lvgl_port_init(&lv_Port);
ESP_LOGD(TAG, "Add LCD screen");
const lvgl_port_display_cfg_t disp_cfg = {
.io_handle = io,
.panel_handle = disp_panel,
.control_handle = NULL,
.buffer_size = BSP_LCD_H_RES *80,
.double_buffer = false,
.hres = BSP_LCD_H_RES,
.vres = BSP_LCD_V_RES,
.monochrome = false,
/* Rotation values must be same as used in esp_lcd for initial settings of the screen */
.rotation = {
.swap_xy = false,
.mirror_x = false,
.mirror_y = false,
},
// .color_format = LV_COLOR_FORMAT_RGB565,
.flags = {
.buff_dma = true,
.buff_spiram =false,
.sw_rotate = false, /* Avoid tearing is not supported for SW rotation */
.direct_mode = true,
// .full_refresh = true,
}
};
const lvgl_port_display_dsi_cfg_t dpi_cfg = {
.flags = {
.avoid_tearing = true,
}
};
lv_display_t *disp =lvgl_port_add_disp_dsi(&disp_cfg, &dpi_cfg);
const lvgl_port_touch_cfg_t touch_cfg = {
.disp = disp,
.handle = tp,
};
lvgl_port_add_touch(&touch_cfg);
bsp_display_brightness_set(100);
lvgl_port_lock(0);
// lv_demo_music();
// lv_demo_benchmark();
lv_demo_widgets();
lvgl_port_unlock();
}
@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, , 8M,
storage, data, spiffs, , 7M,
1 # Name, Type, SubType, Offset, Size, Flags
2 # Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
3 nvs, data, nvs, 0x9000, 0x6000,
4 phy_init, data, phy, 0xf000, 0x1000,
5 factory, app, factory, , 8M,
6 storage, data, spiffs, , 7M,
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,53 @@
# This file was generated using idf.py save-defconfig. It can be edited manually.
# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Minimal Configuration
#
CONFIG_IDF_TARGET="esp32p4"
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_SPEED_200M=y
CONFIG_SPIRAM_XIP_FROM_PSRAM=y
CONFIG_CACHE_L2_CACHE_256KB=y
CONFIG_CACHE_L2_CACHE_LINE_128B=y
CONFIG_ESP_MAIN_TASK_STACK_SIZE=10240
CONFIG_FREERTOS_HZ=1000
CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
CONFIG_LV_COLOR_SCREEN_TRANSP=y
CONFIG_LV_MEM_CUSTOM=y
CONFIG_LV_MEMCPY_MEMSET_STD=y
CONFIG_LV_DISP_DEF_REFR_PERIOD=15
CONFIG_LV_CIRCLE_CACHE_SIZE=10
CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=102400
CONFIG_LV_IMG_CACHE_DEF_SIZE=5
CONFIG_LV_GRAD_CACHE_DEF_SIZE=10240
CONFIG_LV_USE_PERF_MONITOR=y
CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y
CONFIG_LV_FONT_MONTSERRAT_8=y
CONFIG_LV_FONT_MONTSERRAT_10=y
CONFIG_LV_FONT_MONTSERRAT_12=y
CONFIG_LV_FONT_MONTSERRAT_16=y
CONFIG_LV_FONT_MONTSERRAT_18=y
CONFIG_LV_FONT_MONTSERRAT_20=y
CONFIG_LV_FONT_MONTSERRAT_22=y
CONFIG_LV_FONT_MONTSERRAT_24=y
CONFIG_LV_FONT_MONTSERRAT_26=y
CONFIG_LV_FONT_MONTSERRAT_28=y
CONFIG_LV_FONT_MONTSERRAT_30=y
CONFIG_LV_FONT_MONTSERRAT_32=y
CONFIG_LV_FONT_MONTSERRAT_34=y
CONFIG_LV_FONT_MONTSERRAT_36=y
CONFIG_LV_FONT_MONTSERRAT_38=y
CONFIG_LV_FONT_MONTSERRAT_40=y
CONFIG_LV_FONT_MONTSERRAT_42=y
CONFIG_LV_FONT_MONTSERRAT_44=y
CONFIG_LV_FONT_FMT_TXT_LARGE=y
CONFIG_LV_USE_FONT_COMPRESSED=y
CONFIG_LV_USE_DEMO_WIDGETS=y
CONFIG_LV_USE_DEMO_BENCHMARK=y
CONFIG_LV_USE_DEMO_STRESS=y
CONFIG_LV_USE_DEMO_MUSIC=y
CONFIG_LV_DEMO_MUSIC_AUTO_PLAY=y
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
File diff suppressed because it is too large Load Diff