SKU: OT8724 Varenummer: OT8724 EAN: 8721244302997
Denne 1,28 inch runde TFT LCD-skærm er ideel til Arduino-projekter, der kræver en klar og skarp skærm. Med en opløsning på 240×240 pixels og en IPS-farveskærm får du en fuldt synlig og levende visning fra enhver vinkel.
Denne skærm er velegnet til forskellige anvendelser, hvor der er behov for et kompakt, højtkvalitets farvedisplay. Takket være SPI-interfacet er den nem at tilslutte til Arduino og lignende mikrocontrollere.
Sådan tilslutter du 1,28″ rund TFT LCD 240×240 (GC9A01, SPI) til Arduino til en Arduino UNO eller ESP32, med en eksempelsketch, du kan uploade med det samme.
Dette projekt initialiserer og tegner animeret grafik på et rundt 1.28-tommer SPI TFT-display (GC9A01-controller). Det tegner farverige koncentriske ringe omkring den cirkulære skærm og cykler løbende farven på en indre målcirkel.
/*
* ==================================================================
* 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
Dette projekt forbinder en 1.28-inch GC9A01 rund TFT LCD til ESP32 via SPI. Sketchet initialiserer displayet og tegner et tilpasset rundt målerlayout med tekst og opdaterede statusindikatorer.
/*
* ==================================================================
* 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);
}
}
Nødvendige biblioteker: Adafruit GFX Library 1.12.6, Adafruit GC9A01A 1.1.1
Wiring diagram and example code generated by Codey.online — https://www.codey.online