Здравствуйте. Есть дисплей 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); } Подключаю: GND-GND VCC-5V SCL-13 SDA-11 RST-8 DC-9 CS-10 Что делаю не так? Как заполнить весь экран?
Модель GMT020-02. То есть на одну четвертину все выводится как положено ? Явно видно что в библе расчет на вдвое меньший экран. Тут или искать команду задания размера, или команду выбора модели экрана, или лезть править библиотеку. Этих библиотек море. Выложите сюды вашу - может гуру разберутся.
Библиотека 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); }
Подскажите, а как подключить такой экран к ES8266 (NopeMCU) ? Нигде не могу найти информацию по этому поводу. Приведенный код запускается и отрабатывает до конца, но на экране ничего не отображается.
paravoZZ, честно, было бы полезнее просто перечислить подключения, чем давать ссылку на мануалы. На экране кроме питания 5 информационных линий SCL, SDA, RST, DC, CS Как их распределить по NodeMCU? С учетом что в коде упоминаются только 3 из них?
Может кому потребуется #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)
У меня дисплей завелся когда изменил строку tft.init(240, 320, SPI_MODE0); // Init ST7789 display 240x320 pixel
У меня не большая проблемка мне нужно изменить скетч на дисплей 2004 i2c если не трудно прошу помощи так как сам не очень понимаю в этом #include <LiquidCrystal.h> // Подключаем стандартную библиотеку для LCD-дисплея // Инициализация LCD-дисплея (RS, E, D4, D5, D6, D7) LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // Пины для HC-SR04 const int trigPin = 3; const int echoPin = 2; // Пины для RGB светодиода const int redPin = 4; const int greenPin = 5; const int bluePin = 6; // Пин для пьезо-пищалки const int buzzerPin = 13; // Переменные для хранения времени и расстояния long duration; int distance; void setup() { // Настройка пинов для HC-SR04 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // Настройка пинов для RGB светодиода pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); // Настройка пина для пьезо-пищалки pinMode(buzzerPin, OUTPUT); // Инициализация LCD-дисплея 16x2 lcd.begin(16, 2); lcd.print("Dist:"); // Печатаем начальный текст } void loop() { // Генерация ультразвукового импульса digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Чтение импульса Echo и расчет расстояния duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; // Расчет расстояния в сантиметрах // Отображение расстояния на LCD-дисплее lcd.setCursor(6, 0); // Устанавливаем курсор после "Dist:" lcd.print(" "); // Очищаем предыдущие цифры lcd.setCursor(6, 0); // Снова устанавливаем курсор lcd.print(distance); // Печатаем новое значение // Логика изменения цвета RGB светодиода и звуковых сигналов if (distance > 100) { // Если препятствий нет (дальше 100 см) — синий цвет, звук выключен setColor(255, 0, 0); // Синий noTone(buzzerPin); // Отключаем звук } else if (distance > 50 && distance <= 100) { // Препятствие далеко (50–100 см) — зеленый цвет, один короткий сигнал setColor(0, 255, 0); // Зеленый playBeep(1); } else if (distance > 30 && distance <= 50) { // Препятствие приближается (30–50 см) — желтый цвет, два коротких сигнала setColor(0, 200, 200); // Желтый playBeep(2); } else if (distance > 20 && distance <= 30) { // Препятствие близко (20–30 см) — оранжевый цвет, три коротких сигнала setColor(0, 100, 255); // Оранжевый playBeep(3); } else if (distance <= 15) { // Препятствие очень близко (меньше 15 см) — красный цвет, постоянный звук setColor(0, 0, 255); // Красный tone(buzzerPin, 1000); // Постоянный звук } delay(500); // Задержка перед следующим измерением } // Функция установки цвета на RGB светодиоде void setColor(int red, int green, int blue) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } // Функция для проигрывания звуковых сигналов void playBeep(int count) { for (int i = 0; i < count; i++) { tone(buzzerPin, 1000); // Включаем звук с частотой 1000 Гц delay(100); // Задержка для короткого сигнала noTone(buzzerPin); // Отключаем звук delay(100); // Задержка между сигналами } }