From b67f091c4637fe7852b5805818f6b571ebcfd7c0 Mon Sep 17 00:00:00 2001
From: suchmememanyskill <38142618+suchmememanyskill@users.noreply.github.com>
Date: Thu, 9 Jan 2025 22:12:05 +0100
Subject: [PATCH 1/2] Add alt for esp32-8048S043C-SD (#135)
---
.../esp32-8048S043C-smartdisplay-alt.json | 143 ++++++++++++++++++
CYD-Klipper/platformio.ini | 2 +
_site/index.html | 1 +
ci.py | 4 +-
4 files changed, 149 insertions(+), 1 deletion(-)
create mode 100644 CYD-Klipper/boards/esp32-8048S043C-smartdisplay-alt.json
diff --git a/CYD-Klipper/boards/esp32-8048S043C-smartdisplay-alt.json b/CYD-Klipper/boards/esp32-8048S043C-smartdisplay-alt.json
new file mode 100644
index 0000000..70654c4
--- /dev/null
+++ b/CYD-Klipper/boards/esp32-8048S043C-smartdisplay-alt.json
@@ -0,0 +1,143 @@
+{
+ "build": {
+ "arduino": {
+ "ldscript": "esp32s3_out.ld",
+ "partitions": "default_16MB.csv",
+ "memory_type": "qio_opi"
+ },
+ "core": "esp32",
+ "extra_flags": [
+ "'-D ARDUINO_ESP32S3_DEV'",
+ "'-D BOARD_HAS_PSRAM'",
+ "'-D ARDUINO_USB_MODE=1'",
+ "'-D ARDUINO_RUNNING_CORE=1'",
+ "'-D ARDUINO_EVENT_RUNNING_CORE=1'",
+ "'-D ARDUINO_USB_CDC_ON_BOOT=0'",
+ "'-D ESP32_8048S043C'",
+ "'-D LCD_WIDTH=800'",
+ "'-D LCD_HEIGHT=480'",
+ "'-D LVGL_BUFFER_PIXELS=(LCD_WIDTH*LCD_HEIGHT)'",
+ "'-D LVGL_BUFFER_MALLOC_FLAGS=(MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT)'",
+ "'-D GPIO_BCKL=2'",
+ "'-D LCD_ST7262_PAR'",
+ "'-D ST7262_PANEL_CONFIG_CLK_SRC=LCD_CLK_SRC_PLL160M'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_PCLK_HZ=14000000'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_H_RES=LCD_WIDTH'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_V_RES=LCD_HEIGHT'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_HSYNC_PULSE_WIDTH=4'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_HSYNC_BACK_PORCH=8'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_HSYNC_FRONT_PORCH=8'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_VSYNC_PULSE_WIDTH=4'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_VSYNC_BACK_PORCH=8'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_VSYNC_FRONT_PORCH=8'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_FLAGS_HSYNC_IDLE_LOW=false'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_FLAGS_VSYNC_IDLE_LOW=false'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_FLAGS_DE_IDLE_HIGH=false'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_FLAGS_PCLK_ACTIVE_NEG=true'",
+ "'-D ST7262_PANEL_CONFIG_TIMINGS_FLAGS_PCLK_IDLE_HIGH=false'",
+ "'-D ST7262_PANEL_CONFIG_DATA_WIDTH=16'",
+ "'-D ST7262_PANEL_CONFIG_SRAM_TRANS_ALIGN=4'",
+ "'-D ST7262_PANEL_CONFIG_PSRAM_TRANS_ALIGN=64'",
+ "'-D ST7262_PANEL_CONFIG_HSYNC_GPIO_NUM=39'",
+ "'-D ST7262_PANEL_CONFIG_VSYNC_GPIO_NUM=41'",
+ "'-D ST7262_PANEL_CONFIG_DE_GPIO_NUM=40'",
+ "'-D ST7262_PANEL_CONFIG_PCLK_GPIO_NUM=42'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_R0=8'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_R1=3'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_R2=46'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_R3=9'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_R4=1'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G0=5'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G1=6'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G2=7'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G3=15'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G4=16'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_G5=4'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_B0=45'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_B1=48'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_B2=47'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_B3=21'",
+ "'-D ST7262_PANEL_CONFIG_DATA_GPIO_B4=14'",
+ "'-D ST7262_PANEL_CONFIG_DISP_GPIO_NUM=GPIO_NUM_NC'",
+ "'-D ST7262_PANEL_CONFIG_FLAGS_DISP_ACTIVE_LOW=false'",
+ "'-D ST7262_PANEL_CONFIG_FLAGS_RELAX_ON_IDLE=false'",
+ "'-D ST7262_PANEL_CONFIG_FLAGS_FB_IN_PSRAM=true'",
+ "'-D BOARD_HAS_TOUCH'",
+ "'-D TOUCH_GT911_I2C'",
+ "'-D GT911_I2C_HOST=I2C_NUM_0'",
+ "'-D GT911_I2C_CONFIG_SDA_IO_NUM=19'",
+ "'-D GT911_I2C_CONFIG_SCL_IO_NUM=20'",
+ "'-D GT911_I2C_CONFIG_SDA_PULLUP_EN=GPIO_PULLUP_DISABLE'",
+ "'-D GT911_I2C_CONFIG_SCL_PULLUP_EN=GPIO_PULLUP_DISABLE'",
+ "'-D GT911_I2C_CONFIG_MASTER_CLK_SPEED=400000'",
+ "'-D GT911_I2C_CONFIG_CLK_FLAGS=I2C_SCLK_SRC_FLAG_FOR_NOMAL'",
+ "'-D GT911_IO_I2C_CONFIG_DEV_ADDR=ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS'",
+ "'-D GT911_IO_I2C_CONFIG_CONTROL_PHASE_BYTES=1'",
+ "'-D GT911_IO_I2C_CONFIG_DC_BIT_OFFSET=0'",
+ "'-D GT911_IO_I2C_CONFIG_LCD_CMD_BITS=16'",
+ "'-D GT911_IO_I2C_CONFIG_LCD_PARAM_BITS=0'",
+ "'-D GT911_IO_I2C_CONFIG_FLAGS_DC_LOW_ON_DATA=false'",
+ "'-D GT911_IO_I2C_CONFIG_FLAGS_DISABLE_CONTROL_PHASE=true'",
+ "'-D GT911_TOUCH_CONFIG_X_MAX=LCD_WIDTH'",
+ "'-D GT911_TOUCH_CONFIG_Y_MAX=LCD_HEIGHT'",
+ "'-D GT911_TOUCH_CONFIG_RST_GPIO_NUM=38'",
+ "'-D GT911_TOUCH_CONFIG_INT_GPIO_NUM=18'",
+ "'-D GT911_TOUCH_CONFIG_LEVELS_RESET=0'",
+ "'-D GT911_TOUCH_CONFIG_LEVELS_INTERRUPT=0'",
+ "'-D TOUCH_SWAP_XY=false'",
+ "'-D TOUCH_SWAP_X=false'",
+ "'-D TOUCH_SWAP_Y=false'",
+ "'-D BOARD_HAS_TF'",
+ "'-D TF_CS=10'",
+ "'-D TF_SPI_MOSI=11'",
+ "'-D TF_SPI_SCLK=12'",
+ "'-D TF_SPI_MISO=13'",
+
+ "-DCYD_SCREEN_HEIGHT_PX=480",
+ "-DCYD_SCREEN_WIDTH_PX=800",
+ "-DROTATION_INVERTED=LV_DISP_ROT_180",
+ "-DROTATION_NORMAL=LV_DISP_ROT_NONE",
+ "-DCYD_SCREEN_GAP_PX=15",
+ "-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=60",
+ "-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=60",
+ "-DCYD_SCREEN_FONT=lv_font_montserrat_22",
+ "-DCYD_SCREEN_FONT_SMALL=lv_font_montserrat_16",
+ "-DCYD_SCREEN_SIDEBAR_SIZE_PX=70",
+ "-DCYD_SCREEN_DRIVER_ESP32_SMARTDISPLAY=1",
+ "-DCYD_SCREEN_DISABLE_TOUCH_CALIBRATION=1"
+ ],
+ "f_cpu": "240000000L",
+ "f_flash": "80000000L",
+ "flash_mode": "qio",
+ "hwids": [
+ [
+ "0x303A",
+ "0x1001"
+ ]
+ ],
+ "mcu": "esp32s3",
+ "variant": "esp32s3"
+ },
+ "connectivity": [
+ "wifi"
+ ],
+ "debug": {
+ "openocd_target": "esp32s3.cfg"
+ },
+ "frameworks": [
+ "arduino",
+ "espidf"
+ ],
+ "name": "esp32-8048S043C-SD-alt",
+ "upload": {
+ "flash_size": "16MB",
+ "maximum_ram_size": 327680,
+ "maximum_size": 16777216,
+ "use_1200bps_touch": true,
+ "wait_for_upload_port": true,
+ "require_upload_port": true,
+ "speed": 460800
+ },
+ "url": "https://www.aliexpress.com/item/1005006110360174.html",
+ "vendor": "Sunton"
+ }
\ No newline at end of file
diff --git a/CYD-Klipper/platformio.ini b/CYD-Klipper/platformio.ini
index 87de374..5c8ab5d 100644
--- a/CYD-Klipper/platformio.ini
+++ b/CYD-Klipper/platformio.ini
@@ -84,3 +84,5 @@ board = esp32-4827S043C-smartdisplay
[env:esp32-8048S043C-SD]
board = esp32-8048S043C-smartdisplay
+[env:esp32-8048S043C-SD-alt]
+board = esp32-8048S043C-smartdisplay-alt
diff --git a/_site/index.html b/_site/index.html
index cba34c8..66f9db7 100644
--- a/_site/index.html
+++ b/_site/index.html
@@ -99,6 +99,7 @@
+
diff --git a/ci.py b/ci.py
index c397650..27c1e38 100644
--- a/ci.py
+++ b/ci.py
@@ -4,7 +4,8 @@ CYD_PORTS = [
"esp32-3248S035C",
"esp32-2432S028R",
"esp32-2432S032C-SD",
- "esp32-8048S043C-SD",
+ "esp32-8048S043C-SD",
+ "esp32-8048S043C-SD-alt",
"esp32-2432S024C-SD",
"esp32-4827S043C-SD",
"esp32-3248S035C-V",
@@ -13,6 +14,7 @@ CYD_PORTS = [
ESP_S3_CHIPS = [
"esp32-8048S043C-SD",
+ "esp32-8048S043C-SD-alt",
"esp32-4827S043C-SD",
]
From d0f90a56d09193baa237955c044395b11c1f79a9 Mon Sep 17 00:00:00 2001
From: Madrajib Lab
Date: Fri, 10 Jan 2025 02:45:03 +0530
Subject: [PATCH 2/2] Add support for crowpanel 2.8inch display (#134)
* Add support for crowpanel 2.8inch display
* Add support for crowpanel 2.8inch display
---------
Co-authored-by: Sims <38142618+suchmememanyskill@users.noreply.github.com>
---
CYD-Klipper/boards/esp32-CROWPANEL-28R.json | 63 +++++++++++
CYD-Klipper/platformio.ini | 10 ++
.../src/core/device/ESP32-CROWPANEL_28R.cpp | 100 ++++++++++++++++++
_site/index.html | 1 +
ci.py | 1 +
5 files changed, 175 insertions(+)
create mode 100644 CYD-Klipper/boards/esp32-CROWPANEL-28R.json
create mode 100644 CYD-Klipper/src/core/device/ESP32-CROWPANEL_28R.cpp
diff --git a/CYD-Klipper/boards/esp32-CROWPANEL-28R.json b/CYD-Klipper/boards/esp32-CROWPANEL-28R.json
new file mode 100644
index 0000000..81ebe66
--- /dev/null
+++ b/CYD-Klipper/boards/esp32-CROWPANEL-28R.json
@@ -0,0 +1,63 @@
+{
+ "build": {
+ "arduino": {
+ "ldscript": "esp32_out.ld"
+ },
+ "core": "esp32",
+ "extra_flags": [
+ "-DUSER_SETUP_LOADED=1",
+ "-DILI9341_2_DRIVER=1",
+ "-DTFT_BACKLIGHT_ON=HIGH",
+ "-DTFT_BL=27",
+ "-DTFT_MISO=12",
+ "-DTFT_MOSI=13",
+ "-DTFT_SCLK=14",
+ "-DTFT_CS=15",
+ "-DTFT_DC=2",
+ "-DTFT_RST=-1",
+ "-DLOAD_GCLD=1",
+ "-DSPI_FREQUENCY=15999999",
+ "-DSPI_READ_FREQUENCY=20000000",
+ "-DSPI_TOUCH_FREQUENCY=600000",
+ "-DTOUCH_CS=33",
+
+ "-DCYD_SCREEN_HEIGHT_PX=240",
+ "-DCYD_SCREEN_WIDTH_PX=320",
+ "-DCYD_SCREEN_GAP_PX=8",
+ "-DCYD_SCREEN_MIN_BUTTON_HEIGHT_PX=35",
+ "-DCYD_SCREEN_MIN_BUTTON_WIDTH_PX=35",
+ "-DCYD_SCREEN_FONT=lv_font_montserrat_14",
+ "-DCYD_SCREEN_FONT_SMALL=lv_font_montserrat_10",
+ "-DCYD_SCREEN_SIDEBAR_SIZE_PX=40",
+ "-DCYD_SCREEN_DRIVER_ESP32_CROWPANEL_28R=1"
+ ],
+ "f_cpu": "240000000L",
+ "f_flash": "40000000L",
+ "flash_mode": "dio",
+ "mcu": "esp32",
+ "variant": "esp32"
+ },
+ "connectivity": [
+ "wifi",
+ "bluetooth",
+ "ethernet",
+ "can"
+ ],
+ "debug": {
+ "openocd_board": "esp-wroom-32.cfg"
+ },
+ "frameworks": [
+ "arduino",
+ "espidf"
+ ],
+ "name": "esp32-crowpanel-28R",
+ "upload": {
+ "flash_size": "4MB",
+ "maximum_ram_size": 327680,
+ "maximum_size": 4194304,
+ "require_upload_port": true,
+ "speed": 460800
+ },
+ "url": "https://www.aliexpress.com/item/1005004502250619.html",
+ "vendor": "Sunton"
+ }
\ No newline at end of file
diff --git a/CYD-Klipper/platformio.ini b/CYD-Klipper/platformio.ini
index 5c8ab5d..4331f84 100644
--- a/CYD-Klipper/platformio.ini
+++ b/CYD-Klipper/platformio.ini
@@ -86,3 +86,13 @@ board = esp32-8048S043C-smartdisplay
[env:esp32-8048S043C-SD-alt]
board = esp32-8048S043C-smartdisplay-alt
+
+[env:esp32-CROWPANEL-28R]
+board = esp32-CROWPANEL-28R
+lib_deps =
+ SPI
+ https://github.com/suchmememanyskill/lvgl
+ https://github.com/Bodmer/TFT_eSPI.git
+ bblanchon/ArduinoJson@^7.0.0
+ plageoj/UrlEncode@^1.0.1
+ erriez/ErriezCRC32 @ ^1.0.1
diff --git a/CYD-Klipper/src/core/device/ESP32-CROWPANEL_28R.cpp b/CYD-Klipper/src/core/device/ESP32-CROWPANEL_28R.cpp
new file mode 100644
index 0000000..a3674e7
--- /dev/null
+++ b/CYD-Klipper/src/core/device/ESP32-CROWPANEL_28R.cpp
@@ -0,0 +1,100 @@
+#ifdef CYD_SCREEN_DRIVER_ESP32_CROWPANEL_28R
+#include "../screen_driver.h"
+
+#ifdef CYD_SCREEN_VERTICAL
+ #error "Vertical screen not supported with the ESP32_CROWPANEL_28R driver"
+#endif
+
+#include
+#include
+#include "../../conf/global_config.h"
+#include "lvgl.h"
+#include
+#include "../lv_setup.h"
+
+#define TOUCH_THRESHOLD 600
+
+static lv_disp_draw_buf_t draw_buf;
+static lv_color_t buf[CYD_SCREEN_HEIGHT_PX * CYD_SCREEN_WIDTH_PX / 10];
+
+TFT_eSPI tft = TFT_eSPI();
+
+uint16_t touchX, touchY;
+
+void screen_setBrightness(byte brightness)
+{
+ // calculate duty, 4095 from 2 ^ 12 - 1
+ uint32_t duty = (4095 / 255) * brightness;
+
+ // write duty to LEDC
+ ledcWrite(0, duty);
+}
+
+void screen_lv_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
+{
+ uint32_t w = (area->x2 - area->x1 + 1);
+ uint32_t h = (area->y2 - area->y1 + 1);
+
+ tft.startWrite();
+ tft.setAddrWindow(area->x1, area->y1, w, h);
+ tft.pushColors((uint16_t *)&color_p->full, w * h, true);
+ tft.endWrite();
+
+ lv_disp_flush_ready(disp);
+}
+
+void screen_lv_touchRead(lv_indev_drv_t *indev_driver, lv_indev_data_t *data)
+{
+ if (tft.getTouch( &touchX, &touchY, TOUCH_THRESHOLD))
+ {
+ data->state = LV_INDEV_STATE_PR;
+ data->point.x = touchX;
+ data->point.y = touchY;
+ }
+ else
+ {
+ data->state = LV_INDEV_STATE_REL;
+ }
+}
+
+void set_invert_display(){
+ tft.invertDisplay(get_current_printer_config()->invert_colors);
+}
+
+void screen_setup()
+{
+ uint16_t calData[5] = { 189, 3416, 359, 3439, 1};
+
+ lv_init();
+
+ tft.init();
+ tft.fillScreen(TFT_BLACK);
+ tft.invertDisplay(false);
+ delay(300);
+
+ tft.setRotation(1);
+ tft.setTouch( calData );
+
+ ledcSetup(0, 5000, 12);
+ ledcAttachPin(TFT_BL, 0);
+
+ lv_disp_draw_buf_init(&draw_buf, buf, NULL, CYD_SCREEN_HEIGHT_PX * CYD_SCREEN_WIDTH_PX / 10);
+
+ /*Initialize the display*/
+ static lv_disp_drv_t disp_drv;
+ lv_disp_drv_init(&disp_drv);
+ disp_drv.hor_res = CYD_SCREEN_WIDTH_PX;
+ disp_drv.ver_res = CYD_SCREEN_HEIGHT_PX;
+ disp_drv.flush_cb = screen_lv_flush;
+ disp_drv.draw_buf = &draw_buf;
+ lv_disp_drv_register(&disp_drv);
+
+ /*Initialize the (dummy) input device driver*/
+ static lv_indev_drv_t indev_drv;
+ lv_indev_drv_init(&indev_drv);
+ indev_drv.type = LV_INDEV_TYPE_POINTER;
+ indev_drv.read_cb = screen_lv_touchRead;
+ lv_indev_drv_register(&indev_drv);
+}
+
+#endif // CYD_SCREEN_DRIVER_ESP32_CROWPANEL_28R
\ No newline at end of file
diff --git a/_site/index.html b/_site/index.html
index 66f9db7..62444d5 100644
--- a/_site/index.html
+++ b/_site/index.html
@@ -100,6 +100,7 @@
+
diff --git a/ci.py b/ci.py
index 27c1e38..3917a62 100644
--- a/ci.py
+++ b/ci.py
@@ -10,6 +10,7 @@ CYD_PORTS = [
"esp32-4827S043C-SD",
"esp32-3248S035C-V",
#"esp32-4827S043R-SD",
+ "esp32-CROWPANEL-28R",
]
ESP_S3_CHIPS = [