Commandé avant 14h00 un jour ouvrable = expédié le jour même 30 jours de délai de rétractation Garantie d’un an
← Retour à l’aperçu

Schéma de câblage et exemple de code

Voici comment connecter le LCD TFT rond 1,28″ 240×240 (GC9A01, SPI) pour Arduino à un Arduino UNO ou à un ESP32, avec un exemple de sketch que tu peux téléverser directement.

Démo TFT LCD ronde GC9A01 de 1.28 pouce

Ce projet initialise et dessine des graphiques animés sur un écran TFT SPI rond de 1.28 pouce (contrôleur GC9A01). Il trace des anneaux concentriques colorés autour de l'écran circulaire et fait défiler en continu la couleur d'un cercle cible intérieur.

Schéma de câblage : LCD TFT rond 1,28″ 240×240 (GC9A01, SPI) pour Arduino sur un Arduino UNO
Schéma de câblage · Cliquez pour agrandir
Tableau de câblage : LCD TFT rond 1,28″ 240×240 (GC9A01, SPI) pour Arduino sur un Arduino UNO
Tableau de câblage · Cliquez pour agrandir
1_28_Inch_Round_GC9A01_TFT_LCD_Demo.ino · compilé et testé
/*
 * ==================================================================
 *  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

Démo LCD TFT ronde GC9A01 1.28"

Ce projet connecte un écran LCD TFT rond GC9A01 de 1.28-inch à l'ESP32 via SPI. Le sketch initialise l'afficheur et dessine une disposition de jauge ronde personnalisée avec du texte et des indicateurs d'état mis à jour.

Schéma de câblage : LCD TFT rond 1,28″ 240×240 (GC9A01, SPI) pour Arduino sur un ESP32 DevKit V1
Schéma de câblage · Cliquez pour agrandir
Tableau de câblage : LCD TFT rond 1,28″ 240×240 (GC9A01, SPI) pour Arduino sur un ESP32 DevKit V1
Tableau de câblage · Cliquez pour agrandir
GC9A01_1_28_Round_TFT_LCD_Demo.ino · compilé et testé
/*
 * ==================================================================
 *  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);
  }
}

Bibliothèques nécessaires : Adafruit GFX Library 1.12.6, Adafruit GC9A01A 1.1.1

Wiring diagram and example code generated by Codey.online — https://www.codey.online

Récemment consultés

Mini robot suiveur de ligne pour chat - éducatif pour les enfants et les étudiants (STEM)

Mini robot suiveur de ligne pour chat - éducatif pour les enfants et les étudiants (STEM)

€ 16,60
5A 75W XL4015 Convertisseur DC-DC abaisseur réglable avec voltmètre à affichage

5A 75W XL4015 Convertisseur DC-DC abaisseur réglable avec voltmètre à affichage

€ 4,99
Moteur à engrenages micro métal DC12V N20 Pololu 100rpm

Moteur à engrenages micro métal DC12V N20 Pololu 100rpm

€ 8,00
Carte pilote de moteur pas à pas / moteur CC L9110S H-bridge

Carte pilote de moteur pas à pas / moteur CC L9110S H-bridge

€ 2,40
Module de diode laser 5 V, laser rouge 650 nm 5 mW, tête en cuivre

Module de diode laser 5 V, laser rouge 650 nm 5 mW, tête en cuivre

€ 1,20
Bouton-poussoir | momentané - impulsion | 14x20 trou rond 12 mm | Noir

Bouton-poussoir | momentané - impulsion | 14x20 trou rond 12 mm | Noir

€ 1,00
Potentiomètre ajustable de 10 kΩ, horizontal, avec bouton de 15 mm, à six pans creux

Potentiomètre ajustable de 10 kΩ, horizontal, avec bouton de 15 mm, à six pans creux

€ 1,05
Capuchon cavalier 2 broches 2,54 mm (Noir) pour entre autres Arduino, Esp32 et Raspberry Pi

Capuchon cavalier 2 broches 2,54 mm (Noir) pour entre autres Arduino, Esp32 et Raspberry Pi

€ 0,20
Connecteur de boîtier plastique Dupont 6P Pin 2.54mm

Connecteur de boîtier plastique Dupont 6P Pin 2.54mm

€ 0,20
Connecteur d'alimentation DC/prise jack/barrel jack mâle 5,5 x 2,1 mm

Connecteur d'alimentation DC/prise jack/barrel jack mâle 5,5 x 2,1 mm

€ 0,75
ACEBOTT Gant de détection de mouvement QD023 – Contrôle du robot par gestes de la main

ACEBOTT Gant de détection de mouvement QD023 – Contrôle du robot par gestes de la main

€ 69,00
Module d'amplificateur audio numérique mini 2x15W 8-24V | TPA3110 | HW-714

Module d'amplificateur audio numérique mini 2x15W 8-24V | TPA3110 | HW-714

€ 4,85
Capuchon de cavalier 2 broches 2,54mm (Jaune) pour entre autres Arduino, Esp32 et Raspberry Pi

Capuchon de cavalier 2 broches 2,54mm (Jaune) pour entre autres Arduino, Esp32 et Raspberry Pi

€ 0,35
Assortiment de gaines thermorétractables 2:1 - 328 pièces, 5 couleurs, 8 diamètres

Assortiment de gaines thermorétractables 2:1 - 328 pièces, 5 couleurs, 8 diamètres

€ 4,70
Voir