-
Notifications
You must be signed in to change notification settings - Fork 33
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for crowpanel 2.8inch display
- Loading branch information
Showing
3 changed files
with
184 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#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 <SPI.h> | ||
#include <TFT_eSPI.h> | ||
#include "../../conf/global_config.h" | ||
#include "lvgl.h" | ||
#include <TFT_eSPI.h> | ||
#include "../lv_setup.h" | ||
|
||
#define CPU_FREQ_HIGH 240 | ||
#define CPU_FREQ_LOW 80 | ||
#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 ); | ||
|
||
if (global_config.display_mode) { | ||
// <3 https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/blob/main/cyd.md#the-display-doesnt-look-as-good | ||
tft.writecommand(ILI9341_GAMMASET); //Gamma curve selected | ||
tft.writedata(2); | ||
delay(120); | ||
tft.writecommand(ILI9341_GAMMASET); //Gamma curve selected | ||
tft.writedata(1); | ||
} | ||
|
||
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 |