SKU: OT8724 Αριθμός είδους: OT8724 EAN: 8721244302997
Αυτή η στρογγυλή οθόνη TFT LCD 1,28 inch είναι ιδανική για έργα Arduino που απαιτούν μια φωτεινή και ευκρινή οθόνη. Με ανάλυση 240×240 pixels και IPS έγχρωμη οθόνη προσφέρει πλήρως ορατή και ζωντανή απεικόνιση από κάθε γωνία.
Αυτή η οθόνη είναι κατάλληλη για διάφορες εφαρμογές όπου απαιτείται μια compact, υψηλής ποιότητας έγχρωμη οθόνη. Χάρη στη διεπαφή SPI συνδέεται εύκολα με Arduino και παρόμοιους μικροελεγκτές.
Έτσι συνδέεις το 1,28″ στρογγυλή TFT LCD 240×240 (GC9A01, SPI) για Arduino σε ένα Arduino UNO ή ESP32, με ένα παράδειγμα sketch που μπορείς να ανεβάσεις αμέσως.
Αυτό το έργο αρχικοποιεί και σχεδιάζει κινούμενα γραφικά σε μια στρογγυλή οθόνη SPI TFT 1.28 ιντσών (controller GC9A01). Σχεδιάζει πολύχρωμους ομόκεντρους δακτυλίους γύρω από τη κυκλική οθόνη και αλλάζει συνεχώς το χρώμα ενός εσωτερικού κύκλου-στόχου.
/*
* ==================================================================
* 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
Αυτό το έργο συνδέει μια κυκλική TFT LCD GC9A01 1.28-inch με το ESP32 μέσω SPI. Το sketch αρχικοποιεί την οθόνη και σχεδιάζει μια προσαρμοσμένη κυκλική διάταξη gauge με κείμενο και ενημερούμενους δείκτες κατάστασης.
/*
* ==================================================================
* 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);
}
}
Απαραίτητες βιβλιοθήκες: Adafruit GFX Library 1.12.6, Adafruit GC9A01A 1.1.1
Wiring diagram and example code generated by Codey.online — https://www.codey.online