Hello all!
Description
I’m trying to upload a screen (created with Squareline) to the Raspberry Pi Pico and show it on the GC9A01 display. After the upload the display shows only garbage.
What MCU/Processor/Board and compiler are you using?
RP2040 with Arduino framework on PlatformIO
What do you want to achieve?
I want to show the generated screen on the display.
What have you tried so far?
Code to reproduce
Add the relevant code snippets here.
Code of Platformio.ini
The code block(s) should be between ```c
and ```
tags:
[env:pico]
platform = raspberrypi
board = pico
framework = arduino
monitor_port = COM4
monitor_speed = 115200
lib_deps =
lvgl/lvgl@^8.3.6
https://github.com/Bodmer/TFT_eSPI
build_flags =
;###############################################################
; TFT_eSPI library setting here (no need to edit library files):
;###############################################################
-D USER_SETUP_LOADED=1 ; Set this settings as valid
-D GC9A01_DRIVER=1 ; Select ILI9163 driver
-D TFT_WIDTH=240 ; Set TFT size
-D TFT_HEIGHT=240
-D TFT_MOSI=7
-D TFT_SCLK=6
-D TFT_CS=5
-D TFT_DC=4 ; Data/Comand pin
-D TFT_RST=3 ; Reset pin
-D LOAD_GLCD=1 ; Load Fonts
-D SPI_FREQUENCY=27000000 ; Set SPI frequency
lib_ignore = Portenta_lvgl
main.cpp
#include <lvgl.h>
#include <TFT_eSPI.h>
#include <ui.h>
/*Don't forget to set Sketchbook location in File/Preferencesto the path of your UI project (the parent foder of this INO file)*/
/*Change to your screen resolution*/
static const uint16_t screenWidth = 240;
static const uint16_t screenHeight = 240;
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * screenHeight / 10 ];
TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */
#if LV_USE_LOG != 0
/* Serial debugging */
void my_print(const char * buf)
{
Serial.printf(buf);
Serial.flush();
}
#endif
/* Display flushing */
void my_disp_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 );
}
/*Read the touchpad*/
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{
uint16_t touchX = 0, touchY = 0;
bool touched = false;//tft.getTouch( &touchX, &touchY, 600 );
if( !touched )
{
data->state = LV_INDEV_STATE_REL;
}
else
{
data->state = LV_INDEV_STATE_PR;
/*Set the coordinates*/
data->point.x = touchX;
data->point.y = touchY;
Serial.print( "Data x " );
Serial.println( touchX );
Serial.print( "Data y " );
Serial.println( touchY );
}
}
void setup()
{
Serial.begin( 115200 ); /* prepare for possible serial debug */
String LVGL_Arduino = "Hello Arduino! ";
LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();
Serial.println( LVGL_Arduino );
Serial.println( "I am LVGL_Arduino" );
lv_init();
#if LV_USE_LOG != 0
lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endif
tft.begin(); /* TFT init */
tft.setRotation( 3 ); /* Landscape orientation, flipped */
lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * screenHeight / 10 );
/*Initialize the display*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init( &disp_drv );
/*Change the following line to your display resolution*/
disp_drv.hor_res = screenWidth;
disp_drv.ver_res = screenHeight;
disp_drv.flush_cb = my_disp_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 = my_touchpad_read;
lv_indev_drv_register( &indev_drv );
ui_init();
Serial.println( "Setup done" );
}
void loop()
{
lv_timer_handler(); /* let the GUI do its work */
delay(5);
}
Screenshot and/or video
If possible, add screenshots and/or videos about the current state.
Display shows me only garbage after the upload.
I’m a total noob with lvgl and hope someone can help me to show the screen correct on the display.
Thanks a lot and best regards