Помогите с дисплеем tft 2.0

Тема в разделе "Arduino & Shields", создана пользователем Егор Сергеевич, 22 мар 2022.

  1. Здравствуйте. Есть дисплей TFT 2.0 (фото прилагаю). Не могу вывести на него текст. Ранее выводил информацию на другие TFT дисплеи, всё было замечательно. Из того, что нашел в сети, хоть как -то работает этот (выводит на четверть экрана - фото прилагаю):
    Код (C++):
    #include <TFT.h>                
    #include <SPI.h>                
    #define cs   10                  
    #define dc   9                  
    #define rst  8                  
    TFT TFTscreen = TFT(cs, dc, rst);

    void setup()
    {
      TFTscreen.begin();
      TFTscreen.background(0, 0, 0);
      TFTscreen.setTextSize(2);    
    }

    void loop()
    {
      TFTscreen.background ( 0 , 0 , 0 );
      TFTscreen.stroke(255, 0, 0);
      TFTscreen.text("Hello, World!", 20, 47);
      TFTscreen.text("RobotChip", 30, 67);
      delay(500);
    }
    [​IMG]

    [​IMG]

    Подключаю:
    GND-GND
    VCC-5V
    SCL-13
    SDA-11
    RST-8
    DC-9
    CS-10

    Что делаю не так? Как заполнить весь экран?
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Модель GMT020-02. То есть на одну четвертину все выводится как положено ?
    Явно видно что в библе расчет на вдвое меньший экран. Тут или искать команду задания размера, или команду выбора модели экрана, или лезть править библиотеку. Этих библиотек море. Выложите сюды вашу - может гуру разберутся.
     
    Последнее редактирование: 22 мар 2022
  3. mmmikle

    mmmikle Нуб

    Библиотека TFT.h для данного дисплея не подходит, данный дисплей имеет разрешение 240х320, а в библиотека может работать в пределе с 240х240 (переменные относящиеся к настройкам разрешения определены как uint8_t). Для тех кому данный дисплей попадет в руки следует отметить, что он SPI хотя маркировка контактов I2C. Контроллер дисплея IC ST7789V, подключить дисплей удалось с помощью библиотек Adafruit_GFX.h и Adafruit_ST7789.h. Ниже скетч, сразу говорю не мой, но с настройками разрешения изображение занимает полностью весь экран.

    Код (C++):
    /*
    * Interfacing Arduino with ST7789 TFT display (240x240 pixel).
    * Graphics test example.
    * This is a free software with NO WARRANTY.
    * https://simple-circuit.com/
    */

    /**************************************************************************
      This is a library for several Adafruit displays based on ST77* drivers.
      Works with the Adafruit 1.8" TFT Breakout w/SD card
        ----> http://www.adafruit.com/products/358
      The 1.8" TFT shield
        ----> https://www.adafruit.com/product/802
      The 1.44" TFT breakout
        ----> https://www.adafruit.com/product/2088
      as well as Adafruit raw 1.8" TFT display
        ----> http://www.adafruit.com/products/618
      Check out the links above for our tutorials and wiring diagrams.
      These displays use SPI to communicate, 4 or 5 pins are required to
      interface (RST is optional).
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
      Written by Limor Fried/Ladyada for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
    **************************************************************************/

    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
    #include <SPI.h>             // Arduino SPI library
    // ST7789 TFT module connections
    #define TFT_CS    10  // define chip select pin
    #define TFT_DC     9  // define data/command pin
    #define TFT_RST    8  // define reset pin, or set to -1 and connect to Arduino RESET pin
    // Initialize Adafruit ST7789 TFT library
    Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
    float p = 3.1415926;
    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));
      // if the display has CS pin try with SPI_MODE0
      tft.init(240, 320, SPI_MODE2);    // Init ST7789 display 240x320 pixel
      // if the screen is flipped, remove this command
      tft.setRotation(2);
      Serial.println(F("Initialized"));
      uint16_t time = millis();
      tft.fillScreen(ST77XX_BLACK);
      time = millis() - time;
      Serial.println(time, DEC);
      delay(500);
      // large block of text
      tft.fillScreen(ST77XX_BLACK);
      testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
      delay(1000);
      // tft print function!
      tftPrintTest();
      delay(4000);
      // a single pixel
      tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
      delay(500);
      // line draw test
      testlines(ST77XX_YELLOW);
      delay(500);
      // optimized lines
      testfastlines(ST77XX_RED, ST77XX_BLUE);
      delay(500);
      testdrawrects(ST77XX_GREEN);
      delay(500);
      testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
      delay(500);
      tft.fillScreen(ST77XX_BLACK);
      testfillcircles(10, ST77XX_BLUE);
      testdrawcircles(10, ST77XX_WHITE);
      delay(500);
      testroundrects();
      delay(500);
      testtriangles();
      delay(500);
      mediabuttons();
      delay(500);
      Serial.println("done");
      delay(1000);
    }
    void loop() {
      tft.invertDisplay(true);
      delay(500);
      tft.invertDisplay(false);
      delay(500);
    }
    void testlines(uint16_t color) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, 0, x, tft.height()-1, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, 0, tft.width()-1, y, color);
        delay(0);
      }
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, 0, 0, y, color);
        delay(0);
      }
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, tft.height()-1, x, 0, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
        delay(0);
      }
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
        delay(0);
      }
    }
    void testdrawtext(char *text, uint16_t color) {
      tft.setCursor(0, 0);
      tft.setTextColor(color);
      tft.setTextWrap(true);
      tft.print(text);
    }
    void testfastlines(uint16_t color1, uint16_t color2) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t y=0; y < tft.height(); y+=5) {
        tft.drawFastHLine(0, y, tft.width(), color1);
      }
      for (int16_t x=0; x < tft.width(); x+=5) {
        tft.drawFastVLine(x, 0, tft.height(), color2);
      }
    }
    void testdrawrects(uint16_t color) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
      }
    }
    void testfillrects(uint16_t color1, uint16_t color2) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=tft.width()-1; x > 6; x-=6) {
        tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
      }
    }
    void testfillcircles(uint8_t radius, uint16_t color) {
      for (int16_t x=radius; x < tft.width(); x+=radius*2) {
        for (int16_t y=radius; y < tft.height(); y+=radius*2) {
          tft.fillCircle(x, y, radius, color);
        }
      }
    }
    void testdrawcircles(uint8_t radius, uint16_t color) {
      for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
        for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
          tft.drawCircle(x, y, radius, color);
        }
      }
    }
    void testtriangles() {
      tft.fillScreen(ST77XX_BLACK);
      int color = 0xF800;
      int t;
      int w = tft.width()/2;
      int x = tft.height()-1;
      int y = 0;
      int z = tft.width();
      for(t = 0 ; t <= 15; t++) {
        tft.drawTriangle(w, y, y, x, z, x, color);
        x-=4;
        y+=4;
        z-=4;
        color+=100;
      }
    }
    void testroundrects() {
      tft.fillScreen(ST77XX_BLACK);
      int color = 100;
      int i;
      int t;
      for(t = 0 ; t <= 4; t+=1) {
        int x = 0;
        int y = 0;
        int w = tft.width()-2;
        int h = tft.height()-2;
        for(i = 0 ; i <= 16; i+=1) {
          tft.drawRoundRect(x, y, w, h, 5, color);
          x+=2;
          y+=3;
          w-=4;
          h-=6;
          color+=1100;
        }
        color+=100;
      }
    }
    void tftPrintTest() {
      tft.setTextWrap(false);
      tft.fillScreen(ST77XX_BLACK);
      tft.setCursor(0, 30);
      tft.setTextColor(ST77XX_RED);
      tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_YELLOW);
      tft.setTextSize(2);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_GREEN);
      tft.setTextSize(3);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_BLUE);
      tft.setTextSize(4);
      tft.print(1234.567);
      delay(1500);
      tft.setCursor(0, 0);
      tft.fillScreen(ST77XX_BLACK);
      tft.setTextColor(ST77XX_WHITE);
      tft.setTextSize(0);
      tft.println("Hello World!");
      tft.setTextSize(1);
      tft.setTextColor(ST77XX_GREEN);
      tft.print(p, 6);
      tft.println(" Want pi?");
      tft.println(" ");
      tft.print(8675309, HEX); // print 8,675,309 out in HEX!
      tft.println(" Print HEX!");
      tft.println(" ");
      tft.setTextColor(ST77XX_WHITE);
      tft.println("Sketch has been");
      tft.println("running for: ");
      tft.setTextColor(ST77XX_MAGENTA);
      tft.print(millis() / 1000);
      tft.setTextColor(ST77XX_WHITE);
      tft.print(" seconds.");
    }
    void mediabuttons() {
      // play
      tft.fillScreen(ST77XX_BLACK);
      tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
      delay(500);
      // pause
      tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
      tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
      tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
      delay(500);
      // play color
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
      delay(50);
      // pause color
      tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
      tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
      // play color
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
    }
     
     
    Последнее редактирование: 3 окт 2022
  4. Андрей_711

    Андрей_711 Нерд

    Подскажите, а как подключить такой экран к ES8266 (NopeMCU) ? Нигде не могу найти информацию по этому поводу. Приведенный код запускается и отрабатывает до конца, но на экране ничего не отображается.
     
  5. parovoZZ

    parovoZZ Гуру

    На ESP8266 есть же SPI? Вот к нему и подключается. Про SPI инфы в инете просто валом.
     
  6. Андрей_711

    Андрей_711 Нерд

    paravoZZ, честно, было бы полезнее просто перечислить подключения, чем давать ссылку на мануалы. На экране кроме питания 5 информационных линий SCL, SDA, RST, DC, CS Как их распределить по NodeMCU? С учетом что в коде упоминаются только 3 из них?
     
    Рокки1945 нравится это.
  7. Андрей_711

    Андрей_711 Нерд

    Может кому потребуется

    #define TFT_CS D2 // define chip select pin
    #define TFT_DC D1 // define data/command pin
    #define TFT_RST D0 // define reset pin, or set to -1 and connect to Arduino RESET pin
    /* Остальные контакты
    TFT NODEMCU
    GND - GND
    VCC - VCC
    SDL - D5 (HSCLK)
    SDA - D7 (HMOSI)
     
    Рокки1945 нравится это.
  8. gorby777

    gorby777 Нуб

    У меня дисплей завелся когда изменил строку
    tft.init(240, 320, SPI_MODE0); // Init ST7789 display 240x320 pixel