Gone are the days when a circular bezel was deemed necessary for achieving a perfectly round image over a rectangular display. Instead, the spotlight is now on round displays, offering an exciting and contemporary aesthetic that has the potential to distinguish your product from competitors. Moreover, studies underscore the magnetic allure of round shapes compared to non-symmetrical alternatives. In addition to their visual appeal, round displays boast practical advantages. Their efficiency in delivering information is exemplified by a simple dial-type graphical user interface, with a classic example being a clock face. This streamlined approach ensures a quick and intuitive interaction for users.
ORIC Electronics Product Page
By departing from the conventional circular bezel and embracing round displays, your product can project a forward-thinking and distinctive image. This departure from the norm becomes a strategic choice to captivate consumer interest and stand out in a competitive market. As technology advances, integrating innovative design elements, such as these round displays, becomes not only a stylistic decision but also a means to enhance user experience and functionality. With a keen eye on meeting the preferences and needs of your target audience, incorporating these modern display technologies may well be the key to a successful and unique product offering.
Choosing a round display could really set your product apart from your competition, no longer is it necessary to use a circular bezel over a 4:3 aspect ratio display to create the perfectly round image your product needs. Round displays are now a standard product within our display portfolio and are here to stay. Applications include household kitchen appliances and temperature controls for our heating systems to name just two, but more are on the way as product designers start to take full advantage of the modern look and high specifications.
Hello everyone! I am a beginner in programming, in the past couple of months i started to use arduino to work with small displays like GC9A01. I was able to make them work and meanwhile i searched for some information i came across 2,1inch RGB 480x480 round displays. I ordered some from aliexpress. Now I having a hard time to make it work, first i would like to use a simple HelloWorld code.
I bought the display from here with a board:
https://www.aliexpress.us/item/.html
To test it out i connected the display and the attached board to my PC with a USB and an HDMI cable, and it was working fine as an extra little touch monitor.
I also ordered this controller for programming:
https://learn.adafruit.com/adafruit-qualia-esp32-s3-for-rgb666-displays
I found CosmicOwl's topic about this type of displays and moononournation github page. CosmicOwl had to make some changes in libraries, but i can't find these: "Arduino_ST_RGBPanel.h" and "Arduino_ST_RGBPanel.cpp". Are these created by him? Where should i look for them?
https://forum.arduino.cc/t/esp32s3-and-sts//9
I tried to use the HelloWorld example from moononournation library with some changes as you can see below. I could upload to my display without an error, but nothing appears on the screen.
/*******************************************************************************
* Start of Arduino_GFX setting
*
* Arduino_GFX try to find the settings depends on selected board in Arduino IDE
* Or you can define the display dev kit not in the board list
* Defalult pin list for non display dev kit:
* ESP32 various dev board : CS: 5, DC: 27, RST: 33, BL: 22, SCK: 18, MOSI: 23, MISO: nil
* ESP32-C3 various dev board : CS: 7, DC: 2, RST: 1, BL: 3, SCK: 4, MOSI: 6, MISO: nil
* ESP32-S2 various dev board : CS: 34, DC: 38, RST: 33, BL: 21, SCK: 36, MOSI: 35, MISO: nil
* ESP32-S3 various dev board : CS: 40, DC: 41, RST: 42, BL: 48, SCK: 36, MOSI: 35, MISO: nil
* ESP various dev board : CS: 15, DC: 4, RST: 2, BL: 5, SCK: 14, MOSI: 13, MISO: 12
******************************************************************************/
#include
#define GFX_BL 1 // default backlight pin, you may replace DF_GFX_BL to actual backlight pin
/* More dev device declaration: https://github.com/moononournation/Arduino_GFX/wiki/Dev-Device-Declaration */
//#if defined(DISPLAY_DEV_KIT)
//Arduino_GFX *gfx = create_default_Arduino_GFX();
//#else /* !defined(DISPLAY_DEV_KIT) */
Arduino_DataBus *bus = new Arduino_SWSPI(
GFX_NOT_DEFINED /* DC */, 21 /* CS */,
47 /* SCK */, 41 /* MOSI */, GFX_NOT_DEFINED /* MISO */);
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
39 /* DE */, 48 /* VSYNC */, 40 /* HSYNC */, 45 /* PCLK */,
10 /* R0 */, 16 /* R1 */, 9 /* R2 */, 15 /* R3 */, 46 /* R4 */,
8 /* G0 */, 13 /* G1 */, 18 /* G2 */, 12 /* G3 */, 11 /* G4 */, 17 /* G5 */,
47 /* B0 */, 41 /* B1 */, 0 /* B2 */, 42 /* B3 */, 14 /* B4 */,
1 /* hsync_polarity */, 10 /* hsync_front_porch */, 10 /* hsync_pulse_width */, 10 /* hsync_back_porch */,
1 /* vsync_polarity */, 14 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 12 /* vsync_back_porch */);
Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
bus, GFX_NOT_DEFINED /* RST */, st_type7_init_operations, sizeof(st_type7_init_operations));
/* More data bus class: https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class */
//Arduino_DataBus *bus = create_default_Arduino_DataBus();
/* More display class: https://github.com/moononournation/Arduino_GFX/wiki/Display-Class */
//Arduino_GFX *gfx = new Arduino_ILI(bus, DF_GFX_RST, 0 /* rotation */, false /* IPS */);
//#endif /* !defined(DISPLAY_DEV_KIT) */
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/
void setup(void)
{
Serial.begin();
// Serial.setDebugOutput(true);
// while(!Serial);
Serial.println("Arduino_GFX Hello World example");
#ifdef GFX_EXTRA_PRE_INIT
GFX_EXTRA_PRE_INIT();
#endif
// Init Display
if (!gfx->begin())
{
Serial.println("gfx->begin() failed!");
}
gfx->fillScreen(BLACK);
#ifdef GFX_BL
pinMode(GFX_BL, OUTPUT);
digitalWrite(GFX_BL, HIGH);
#endif
gfx->setCursor(10, 10);
gfx->setTextColor(RED);
gfx->println("Hello World!");
delay(); // 5 seconds
}
void loop()
{
gfx->setCursor(random(gfx->width()), random(gfx->height()));
gfx->setTextColor(random(0xffff), random(0xffff));
gfx->setTextSize(random(6) /* x scale */, random(6) /* y scale */, random(2) /* pixel_margin */);
gfx->println("Hello World!");
delay(); // 1 second
}
I assume that i have a problem with this part of the code and some kind of communication can't happen between the controller and the display:
Arduino_DataBus *bus = new Arduino_SWSPI(
GFX_NOT_DEFINED /* DC */, 21 /* CS */,
47 /* SCK */, 41 /* MOSI */, GFX_NOT_DEFINED /* MISO */);
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
39 /* DE */, 48 /* VSYNC */, 40 /* HSYNC */, 45 /* PCLK */,
10 /* R0 */, 16 /* R1 */, 9 /* R2 */, 15 /* R3 */, 46 /* R4 */,
8 /* G0 */, 13 /* G1 */, 18 /* G2 */, 12 /* G3 */, 11 /* G4 */, 17 /* G5 */,
47 /* B0 */, 41 /* B1 */, 0 /* B2 */, 42 /* B3 */, 14 /* B4 */,
1 /* hsync_polarity */, 10 /* hsync_front_porch */, 10 /* hsync_pulse_width */, 10 /* hsync_back_porch */,
1 /* vsync_polarity */, 14 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 12 /* vsync_back_porch */);
Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
bus, GFX_NOT_DEFINED /* RST */, st_type7_init_operations, sizeof(st_type7_init_operations));
I would be very grateful if someone could explain in detail exactly what is happening in this code snippet and would really appreciate any further information from someone who succesfully used this display!
Thank you in advance!
Best regards: Zsolt
The company is the world’s best round tft display supplier. We are your one-stop shop for all needs. Our staff are highly-specialized and will help you find the product you need.
Thank you for answering!
I believe the ESP32 board delivered with the rainbow example uploaded on it. If i connect the display it works well, you can see on the right side of the picture below. I've done nothing with it, just plugged the USB cable in.
Next thing i tried is to upload the rainbow example to the left board. When i compile the code in IDE, it gives back this error:
AppData\Local\Temp.arduinoIDE-unsaved--1qiifjg.d5oz\sketch_feb22a\sketch_feb22a.ino:10:5: error: 'PCA_TFT_RESET' was not declared in this scope
PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI
I thought that i don't have to change PCA_TFT_RESET etc. because they are already declared in the included libraries. I'm not sure if the preuploaded code by the manufacturer is the same or not as the code available on the site. Because of this i thought i have to get the display initialization right and it will solve the problem. But I only got to the point where it uploads (helloworld code) without an error message and the display remains black.
I have a working display finally. Thanks two of my colleagues for their effort! We followed these steps:
It is the same what customcontroller suggested, just don't forget to add the additional board manager in the preferences:
In the tools menu:
With this setup i can upload the rainbow code without any problem. I also have a simple "hello world" code:
#include
/*-------------------------------------------------
Data Bus Initialization:
Arduino_DataBus *bus = new Arduino_SWSPI(...): This line creates an instance of the Arduino_SWSPI data bus class. It specifies the pins for communication with the display using SPI (Serial Peripheral Interface).
The parameters passed to Arduino_SWSPI include pin numbers for Data/Command (DC), Chip Select (CS), Serial Clock (SCK), and Master Out Slave In (MOSI).
The GFX_NOT_DEFINED placeholder is used for the Master In Slave Out (MISO) pin, indicating that it is not used in this configuration.*/
Arduino_XCASWSPI *expander = new Arduino_XCASWSPI(
PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
&Wire, 0x3F);
/*-------------------------------------------------
RGB Panel Initialization:
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(...): This line creates an instance of the Arduino_ESP32RGBPanel class, representing the RGB display panel.
The parameters specify various pins for controlling the display, including Data Enable (DE), Vertical Sync (VSYNC), Horizontal Sync (HSYNC), Pixel Clock (PCLK), and color channels (R, G, B).
Additional parameters define synchronization timings (polarity, front porch, pulse width, and back porch).*/
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
1 /* hsync_polarity */, 50 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
1 /* vsync_polarity */, 16 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 18 /* vsync_back_porch */
// ,1,
);
/*-------------------------------------------------
Display Initialization:
Arduino_RGB_Display *gfx = new Arduino_RGB_Display(...): This line creates an instance of the Arduino_RGB_Display class, which manages the display.
The parameters include the display dimensions (width and height), the RGB panel instance (rgbpanel),
rotation (0 for no rotation), auto-flush mode (true), the data bus (bus), and initialization operations for the display controller (ST in this case).*/
Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
// 2.1" 480x480 round display
480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
expander, GFX_NOT_DEFINED /* RST */, TL021WVC02_init_operations, sizeof(TL021WVC02_init_operations));
// 2.8" 480x480 round display
// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
// expander, GFX_NOT_DEFINED /* RST */, TL028WVC01_init_operations, sizeof(TL028WVC01_init_operations));
// 3.4" 480x480 square display
// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
// expander, GFX_NOT_DEFINED /* RST */, tl034wvs05_ba_init_operations, sizeof(tl034wvs05_ba_init_operations));
// 3.2" 320x820 rectangle bar display
// 320 /* width */, 820 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
// expander, GFX_NOT_DEFINED /* RST */, tl032fwv01_init_operations, sizeof(tl032fwv01_init_operations));
// 4.0" 720x720 square display
// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
// expander, GFX_NOT_DEFINED /* RST */, NULL, 0);
// 4.0" 720x720 round display
// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
// expander, GFX_NOT_DEFINED /* RST */, hdc40_init_operations, sizeof(hdc40_init_operations));
// needs also the rgbpanel to have these pulse/sync values:
// 1 /* hync_polarity */, 46 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
// 1 /* vsync_polarity */, 50 /* vsync_front_porch */, 16 /* vsync_pulse_width */, 16 /* vsync_back_porch */
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/
void setup(void)
{
Serial.begin();
//while (!Serial) delay(100);
#ifdef GFX_EXTRA_PRE_INIT
GFX_EXTRA_PRE_INIT();
#endif
Serial.println("Beginning");
// Init Display
Wire.setClock(); // speed up I2C
if (!gfx->begin()) {
Serial.println("gfx->begin() failed!");
}
Serial.println("Initialized!");
gfx->fillScreen(WHITE);
gfx->setCursor(70, 220);
gfx->setTextSize(5);
gfx->setTextColor(RED);
gfx->println("Hello World!");
}
void loop()
{
}
We are having issues right now with the touch screen (with the driver board which you can buy with the display on aliexpress it works fine). There are two options in the rainbow exapmle:
// The Capacitive touchscreen overlays uses hardware I2C (SCL/SDA)
// Most touchscreens use FocalTouch with I2C Address often but not always 0x48!
//#define I2C_TOUCH_ADDR 0x48
// 2.1" 480x480 round display use CST826 touchscreen with I2C Address at 0x15
#define I2C_TOUCH_ADDR 0x15 // often but not always 0x48!
None of the addresses working. I get this message in serial monitor:
How can i find the I2C address for the touchscreen?
I hope that the shared information will help somebody!
If you want to learn more, please visit our website square lcd display.