SKU: OT8724 Numero articolo: OT8724 EAN: 8721244302997
Questo display TFT LCD rotondo da 1,28 pollici è ideale per progetti Arduino che richiedono uno schermo chiaro e nitido. Con una risoluzione di 240×240 pixel e un display IPS a colori, offre una visualizzazione vivida e completamente visibile da ogni angolazione.
Questo schermo è adatto a diverse applicazioni in cui è necessario un display a colori compatto e di alta qualità. Grazie all'interfaccia SPI, è facile da collegare ad Arduino e a microcontrollori simili.
Ecco come collegare il 1,28″ TFT LCD rotondo 240×240 (GC9A01, SPI) per Arduino a un Arduino UNO o ESP32, con uno sketch di esempio che puoi caricare subito.
Questo progetto inizializza e disegna grafica animata su un display TFT SPI rotondo da 1.28 pollici (controller GC9A01). Disegna anelli concentrici colorati attorno allo schermo circolare e cambia continuamente il colore di un cerchio bersaglio interno.
/*
* ==================================================================
* Generated by Codey.online — https://www.codey.online
* ==================================================================
* Project : 1.28 Inch Round GC9A01 TFT LCD Demo
* Board : Arduino UNO (arduino:avr:uno)
* Parts : 1.28" Round TFT LCD 240x240 (GC9A01, SPI)
* Libraries : none (built-in)
*
* Codey Online is an AI-powered browser IDE for Arduino and ESP32.
* Describe your project and Codey writes the code, draws the wiring
* diagram and uploads it to your board, straight from the browser.
* This code is free to use, modify and share, without warranty.
* ==================================================================
*/
#include <SPI.h>
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8
#define COLOR_BLACK 0x0000
#define COLOR_BLUE 0x001F
#define COLOR_RED 0xF800
#define COLOR_GREEN 0x07E0
#define COLOR_CYAN 0x07FF
#define COLOR_MAGENTA 0xF81F
#define COLOR_YELLOW 0xFFE0
#define COLOR_WHITE 0xFFFF
const uint16_t palette[] = {COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_CYAN, COLOR_MAGENTA};
int colorIndex = 0;
void writeCommand(uint8_t c) {
digitalWrite(TFT_DC, LOW);
digitalWrite(TFT_CS, LOW);
SPI.transfer(c);
digitalWrite(TFT_CS, HIGH);
}
void writeData(uint8_t d) {
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
SPI.transfer(d);
digitalWrite(TFT_CS, HIGH);
}
void setWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
writeCommand(0x2A);
writeData(x0 >> 8); writeData(x0 & 0xFF);
writeData(x1 >> 8); writeData(x1 & 0xFF);
writeCommand(0x2B);
writeData(y0 >> 8); writeData(y0 & 0xFF);
writeData(y1 >> 8); writeData(y1 & 0xFF);
writeCommand(0x2C);
}
void fillScreen(uint16_t color) {
setWindow(0, 0, 239, 239);
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
uint8_t hi = color >> 8;
uint8_t lo = color & 0xFF;
for (uint32_t i = 0; i < 240UL * 240UL; i++) {
SPI.transfer(hi);
SPI.transfer(lo);
}
digitalWrite(TFT_CS, HIGH);
}
void drawHLine(int16_t x, int16_t y, int16_t w, uint16_t color) {
if (y < 0 || y >= 240 || x >= 240 || (x + w) <= 0) return;
int16_t x1 = max(0, x);
int16_t x2 = min(239, x + w - 1);
int16_t len = x2 - x1 + 1;
setWindow(x1, y, x2, y);
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
uint8_t hi = color >> 8;
uint8_t lo = color & 0xFF;
for (int16_t i = 0; i < len; i++) {
SPI.transfer(hi);
SPI.transfer(lo);
}
digitalWrite(TFT_CS, HIGH);
}
void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {
for (int16_t dy = -r; dy <= r; dy++) {
int16_t dx = sqrt((long)r * r - (long)dy * dy);
drawHLine(x0 - dx, y0 + dy, dx * 2 + 1, color);
}
}
void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {
int16_t f = 1 - r, ddF_x = 1, ddF_y = -2 * r, x = 0, y = r;
auto plot = [&](int16_t px, int16_t py) {
if (px >= 0 && px < 240 && py >= 0 && py < 240) {
setWindow(px, py, px, py);
writeData(color >> 8);
writeData(color & 0xFF);
}
};
plot(x0, y0 + r); plot(x0, y0 - r); plot(x0 + r, y0); plot(x0 - r, y0);
while (x < y) {
if (f >= 0) { y--; ddF_y += 2; f += ddF_y; }
x++; ddF_x += 2; f += ddF_x;
plot(x0 + x, y0 + y); plot(x0 - x, y0 + y);
plot(x0 + x, y0 - y); plot(x0 - x, y0 - y);
plot(x0 + y, y0 + x); plot(x0 - y, y0 + x);
plot(x0 + y, y0 - x); plot(x0 - y, y0 - x);
}
}
void gc9a01Init() {
pinMode(TFT_CS, OUTPUT);
pinMode(TFT_DC, OUTPUT);
pinMode(TFT_RST, OUTPUT);
digitalWrite(TFT_CS, HIGH);
digitalWrite(TFT_RST, HIGH);
delay(10);
digitalWrite(TFT_RST, LOW);
delay(20);
digitalWrite(TFT_RST, HIGH);
delay(120);
SPI.begin();
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
writeCommand(0xEF);
writeCommand(0xEB); writeData(0x14);
writeCommand(0xFE);
writeCommand(0xEF);
writeCommand(0xEB); writeData(0x14);
writeCommand(0x84); writeData(0x40);
writeCommand(0x85); writeData(0xFF);
writeCommand(0x86); writeData(0xFF);
writeCommand(0x87); writeData(0xFF);
writeCommand(0x88); writeData(0x0A);
writeCommand(0x89); writeData(0x21);
writeCommand(0x8A); writeData(0x00);
writeCommand(0x8B); writeData(0x80);
writeCommand(0x8C); writeData(0x01);
writeCommand(0x8D); writeData(0x01);
writeCommand(0x8E); writeData(0xFF);
writeCommand(0x8F); writeData(0xFF);
writeCommand(0xB6); writeData(0x00); writeData(0x00);
writeCommand(0x3A); writeData(0x05);
writeCommand(0x90); writeData(0x08); writeData(0x08); writeData(0x08); writeData(0x08);
writeCommand(0xBD); writeData(0x06);
writeCommand(0xBC); writeData(0x00);
writeCommand(0xFF); writeData(0x60); writeData(0x01); writeData(0x04);
writeCommand(0xC3); writeData(0x13);
writeCommand(0xC4); writeData(0x13);
writeCommand(0xC9); writeData(0x22);
writeCommand(0xBE); writeData(0x11);
writeCommand(0xE1); writeData(0x10); writeData(0x0E);
writeCommand(0xDF); writeData(0x21); writeData(0x0C); writeData(0x02);
writeCommand(0xF0); writeData(0x45); writeData(0x09); writeData(0x08); writeData(0x08); writeData(0x26); writeData(0x2A);
writeCommand(0xF1); writeData(0x43); writeData(0x70); writeData(0x72); writeData(0x36); writeData(0x37); writeData(0x6F);
writeCommand(0xF2); writeData(0x45); writeData(0x09); writeData(0x08); writeData(0x08); writeData(0x26); writeData(0x2A);
writeCommand(0xF3); writeData(0x43); writeData(0x70); writeData(0x72); writeData(0x36); writeData(0x37); writeData(0x6F);
writeCommand(0xED); writeData(0x1B); writeData(0x0B);
writeCommand(0xAE); writeData(0x77);
writeCommand(0xCD); writeData(0x63);
writeCommand(0x70); writeData(0x07); writeData(0x07); writeData(0x04); writeData(0x0E); writeData(0x0F); writeData(0x09); writeData(0x07); writeData(0x08); writeData(0x03);
writeCommand(0xE8); writeData(0x34);
writeCommand(0x62); writeData(0x18); writeData(0x0D); writeData(0x71); writeData(0xED); writeData(0x70); writeData(0x70); writeData(0x18); writeData(0x0F); writeData(0x71); writeData(0xEF); writeData(0x70); writeData(0x70);
writeCommand(0x63); writeData(0x18); writeData(0x11); writeData(0x71); writeData(0xF1); writeData(0x70); writeData(0x70); writeData(0x18); writeData(0x13); writeData(0x71); writeData(0xF3); writeData(0x70); writeData(0x70);
writeCommand(0x64); writeData(0x28); writeData(0x29); writeData(0xF1); writeData(0x01); writeData(0xF1); writeData(0x00); writeData(0x07);
writeCommand(0x66); writeData(0x3C); writeData(0x00); writeData(0xCD); writeData(0x67); writeData(0x45); writeData(0x45); writeData(0x10); writeData(0x00); writeData(0x00); writeData(0x00);
writeCommand(0x67); writeData(0x00); writeData(0x3C); writeData(0x00); writeData(0x00); writeData(0x00); writeData(0x01); writeData(0x54); writeData(0x10); writeData(0x32); writeData(0x98);
writeCommand(0x74); writeData(0x10); writeData(0x85); writeData(0x80); writeData(0x00); writeData(0x00); writeData(0x4E); writeData(0x00);
writeCommand(0x98); writeData(0x3E); writeData(0x07);
writeCommand(0x35);
writeCommand(0x21);
writeCommand(0x11);
delay(120);
writeCommand(0x29);
delay(20);
}
void setup() {
Serial.begin(115200);
Serial.println(F("GC9A01 Round LCD Initializing..."));
gc9a01Init();
fillScreen(COLOR_BLACK);
// Draw fixed outer rings
drawCircle(120, 120, 118, COLOR_CYAN);
drawCircle(120, 120, 116, COLOR_CYAN);
drawCircle(120, 120, 100, COLOR_WHITE);
drawCircle(120, 120, 80, COLOR_BLUE);
drawCircle(120, 120, 60, COLOR_YELLOW);
Serial.println(F("Display ready!"));
}
void loop() {
// Pulse inner target circle with different colors
fillCircle(120, 120, 40, palette[colorIndex]);
Serial.print(F("Color index: "));
Serial.println(colorIndex);
colorIndex = (colorIndex + 1) % 6;
delay(800);
}
Wiring diagram and example code generated by Codey.online — https://www.codey.online
Questo progetto collega un LCD TFT rotondo GC9A01 da 1.28-inch all'ESP32 tramite SPI. Lo sketch inizializza il display e disegna un layout personalizzato a quadrante rotondo con testo e indicatori di stato aggiornati.
/*
* ==================================================================
* Generated by Codey.online — https://www.codey.online
* ==================================================================
* Project : GC9A01 1.28" Round TFT LCD Demo
* Board : ESP32 DEVKIT V1 (esp32:esp32:esp32doit-devkit-v1)
* Parts : 1.28" Round TFT LCD 240x240 (GC9A01, SPI)
* Libraries : Adafruit GFX Library 1.12.6, Adafruit GC9A01A 1.1.1
*
* Codey Online is an AI-powered browser IDE for Arduino and ESP32.
* Describe your project and Codey writes the code, draws the wiring
* diagram and uploads it to your board, straight from the browser.
* This code is free to use, modify and share, without warranty.
* ==================================================================
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_GC9A01A.h>
#define TFT_CS 5
#define TFT_DC 27
#define TFT_RST 4
Adafruit_GC9A01A tft(TFT_CS, TFT_DC, TFT_RST);
void drawDial() {
tft.fillScreen(GC9A01A_BLACK);
// Draw outer colored rings
tft.drawCircle(120, 120, 118, GC9A01A_CYAN);
tft.drawCircle(120, 120, 115, GC9A01A_BLUE);
tft.fillCircle(120, 120, 90, GC9A01A_NAVY);
tft.fillCircle(120, 120, 80, GC9A01A_BLACK);
// Centered labels
tft.setTextColor(GC9A01A_WHITE);
tft.setTextSize(2);
tft.setCursor(65, 80);
tft.println("GC9A01");
tft.setTextSize(1);
tft.setTextColor(GC9A01A_GREEN);
tft.setCursor(75, 105);
tft.println("ESP32 READY");
}
void setup() {
Serial.begin(115200);
Serial.println("Initializing GC9A01 Round Display...");
tft.begin();
tft.setRotation(0);
drawDial();
Serial.println("Display initialized!");
}
void loop() {
static unsigned long lastUpdate = 0;
static int counter = 0;
if (millis() - lastUpdate >= 1000) {
lastUpdate = millis();
counter++;
// Update counter display in the center
tft.fillRect(60, 130, 120, 30, GC9A01A_BLACK);
tft.setTextColor(GC9A01A_YELLOW);
tft.setTextSize(3);
tft.setCursor(95, 135);
tft.printf("%02d", counter % 60);
Serial.print("Counter: ");
Serial.println(counter % 60);
}
}
Librerie necessarie: Adafruit GFX Library 1.12.6, Adafruit GC9A01A 1.1.1
Wiring diagram and example code generated by Codey.online — https://www.codey.online