TFT 1.8 st7735 и esp8266 NODE MCU

Тема в разделе "ESP8266, ESP32", создана пользователем kolkapetkinsyn, 26 мар 2019.

  1. kolkapetkinsyn

    kolkapetkinsyn Нерд

    Ребят, усть рабочие варианты для дисплея на st7735?
    Нужно подключить TFT 1.8 SPI 128X160 к NODE MCU
    Пробовал как в видео, но не пошло( Похоже библиотеку обновили



    Перепечатал скетч с видео.
    Код (C++):
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <SPI.h>

      #define TFT_CS D1
      #define TFT_RST D0
      #define TFT_DC D2

    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

    const uint16_t grey = 0x5AEB;
    const uint16_t white = 0xFFFF;

    void setup(void) {
      //Serial.begin(115200);
    tft.initR(INITR_BLACKTAB);

    tft.setTextWrap(false);
    tft.fillScreen(white);
    tft.setTextColor(grey);
    tft.setTextSize(2);
    tft.setCursor(10, 10);
    tft.println("~ZAOYBSYA~");
    tft.setTextSize(1);
    tft.setCursor(10, 30);
    tft.println("~~Nu sovsem zayobsya~~");
    }

    void loop () {

    }
     
    похоже библиотеку серьёзно переделали. выдаёт ошибку:
    Код (C++):
    Arduino: 1.8.8 (Windows 10), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Enabled, 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    C:\Users\serov\OneDrive\Documents\Arduino\libraries\Adafruit_ST7735_and_ST7789_Library\Adafruit_ST77xx.cpp: In constructor 'Adafruit_ST77xx::Adafruit_ST77xx(SPIClass*, int8_t, int8_t, int8_t)':

    C:\Users\serov\OneDrive\Documents\Arduino\libraries\Adafruit_ST7735_and_ST7789_Library\Adafruit_ST77xx.cpp:74:24: error: invalid conversion from 'SPIClass*' to 'int8_t {aka signed char}' [-fpermissive]

       spiClass, cs, dc, rst) {

                            ^

    In file included from C:\Users\serov\OneDrive\Documents\Arduino\libraries\Adafruit_ST7735_and_ST7789_Library\Adafruit_ST77xx.h:31:0,

                     from C:\Users\serov\OneDrive\Documents\Arduino\libraries\Adafruit_ST7735_and_ST7789_Library\Adafruit_ST77xx.cpp:25:

    C:\Users\serov\OneDrive\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_SPITFT.h:121:5: error:   initializing argument 3 of 'Adafruit_SPITFT::Adafruit_SPITFT(uint16_t, uint16_t, int8_t, int8_t, int8_t, int8_t, int8_t, int8_t)' [-fpermissive]

         Adafruit_SPITFT(uint16_t w, uint16_t h,

         ^

    exit status 1
    Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"
    библиотека https://github.com/adafruit/Adafruit-ST7735-Library
     
  2. kolkapetkinsyn

    kolkapetkinsyn Нерд

    Скетч из примера библиотеки имеет такой вид:
    Код (C++):
    /**************************************************************************
      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_ST7735.h> // Hardware-specific library for ST7735
    #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
    #include <SPI.h>

    #ifdef ADAFRUIT_HALLOWING
      #define TFT_CS        39 // Hallowing display control pins: chip select
      #define TFT_RST       37 // Display reset
      #define TFT_DC        38 // Display data/command select
      #define TFT_BACKLIGHT  7 // Display backlight pin
    #else
      // For the breakout board, you can use any 2 or 3 pins.
      // These pins will also work for the 1.8" TFT shield.
      #define TFT_CS        10
      #define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin
      #define TFT_DC         8
    #endif

    // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
    // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
    // SCLK = pin 13. This is the fastest mode of operation and is required if
    // using the breakout board's microSD card.

    // For 1.44" and 1.8" TFT with ST7735 (including HalloWing) use:
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

    // For 1.54" TFT with ST7789:
    //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

    // OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
    // tradeoff being that performance is not as fast as hardware SPI above.
    //#define TFT_MOSI 11  // Data out
    //#define TFT_SCLK 13  // Clock out
    //Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

    float p = 3.1415926;

    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));

    #ifdef ADAFRUIT_HALLOWING
      // HalloWing is a special case. It uses a ST7735R display just like the
      // breakout board, but the orientation and backlight control are different.
      tft.initR(INITR_HALLOWING);        // Initialize HalloWing-oriented screen
      pinMode(TFT_BACKLIGHT, OUTPUT);
      digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on
    #else
      // Use this initializer if using a 1.8" TFT screen:
      tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab

      // OR use this initializer (uncomment) if using a 1.44" TFT:
      //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab

      // OR use this initializer (uncomment) if using a 0.96" 180x60 TFT:
      //tft.initR(INITR_MINI160x80);  // Init ST7735S mini display

      // OR use this initializer (uncomment) if using a 1.54" 240x240 TFT:
      //tft.init(240, 240);           // Init ST7789 240x240
    #endif

      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. kolkapetkinsyn

    kolkapetkinsyn Нерд

    Переустановил IDE и всё заработало
     
  4. kolkapetkinsyn

    kolkapetkinsyn Нерд

    Возникли пара вопросов по скетчу, надеюсь поможете.
    Вот мой скетч, который показания датчика шлёт в сервис https://cayenne.mydevices.com
    Код (C++):
    #include <Adafruit_Sensor.h>

    #include <Wire.h>

    #include <CayenneMQTTESP8266.h>

    #include <Adafruit_BMP280.h>

    #include <SimpleTimer.h>

    extern "C" {
    #include "user_interface.h";
    }
    char ssid[] = "ASUS-CDC0" ;
    char wifiPassword[] = "00000000" ;
    SimpleTimer timer;
    char username[] = "be69a3-11e9-ba40-5d168a516101" ;
    char password[] = "3f6b82d32ed8fd523c5857b9" ;
    char clientID[] = "ecff01c0-36b5-4fe3d2557533" ;
    float in_216184383_1;
    float in_216184383_2;
    float Temperature_145241870_1;
    float Pressure_145241870_1;
    float Altitude_145241870_1;
    #define SEALEVELPRESSURE_HPA_145241870_1 (1013.25)

    Adafruit_BMP280 bmp_145241870_1; // I2C
    float in_216184383_3;
    int in_216184383_4;
    int ESP8266_AnalogInputValue;
    unsigned long ESP8266_AnalogInputValue_StR;
    void setup()
    {
    ESP8266_AnalogInputValue_StR = millis() + 500 ;
    Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    timer.setInterval(5000L, sendUptime_216184383_1);
    timer.setInterval(30000L, sendUptime_216184383_2);
    if (!bmp_145241870_1.begin()) {
       bmp_145241870_1.readTemperature();
        while (1);
    }
    timer.setInterval(300000L, sendUptime_216184383_3);
    timer.setInterval(1500L, sendUptime_216184383_4);
    }
    void loop()
    {if(_isTimer(ESP8266_AnalogInputValue_StR, 500))
    {
    ESP8266_AnalogInputValue_StR = millis();
    ESP8266_AnalogInputValue = analogRead(A0);
    }





    //Плата:1
    //Наименование:Esp
    Cayenne.loop();
      timer.run();
    {
    Temperature_145241870_1 = bmp_145241870_1.readTemperature();
    Pressure_145241870_1 = bmp_145241870_1.readPressure() / 100.0F * 0.7500;
    Altitude_145241870_1 = bmp_145241870_1.readAltitude(1032.4);
    }
    in_216184383_3 = Altitude_145241870_1;

    in_216184383_2 = Pressure_145241870_1;

    in_216184383_1 = Temperature_145241870_1;

    in_216184383_4 = ESP8266_AnalogInputValue;





    }
    bool _isTimer(unsigned long startTime, unsigned long period )
      {
      unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
      }
    void sendUptime_216184383_1()
    {
    Cayenne.virtualWrite( 0 ,  in_216184383_1 );
    }
    void sendUptime_216184383_2()
    {
    Cayenne.virtualWrite( 1 ,  in_216184383_2 );
    }
    void sendUptime_216184383_3()
    {
    Cayenne.virtualWrite( 2 ,  in_216184383_3 );
    }
    void sendUptime_216184383_4()
    {
    Cayenne.virtualWrite( 3 ,  in_216184383_4 );
    }
    Хочу эти данные так же вывести на дисплей, но поскольку я чайник, из кода примера мне тяжело выделить нужное. Поправьте что не так(продолжение ниже).
     
    Последнее редактирование: 26 мар 2019
  5. kolkapetkinsyn

    kolkapetkinsyn Нерд

    То что нужно прописать библиотеки и инициализировать дисплей, я разобрался
    Код (C++):
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
    #include <SPI.h>

    #ifdef ADAFRUIT_HALLOWING
      #define TFT_CS        39 // Hallowing display control pins: chip select
      #define TFT_RST       37 // Display reset
      #define TFT_DC        38 // Display data/command select
      #define TFT_BACKLIGHT  7 // Display backlight pin
    #else
      // For the breakout board, you can use any 2 or 3 pins.
      // These pins will also work for the 1.8" TFT shield.
      #define TFT_CS        10
      #define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin
      #define TFT_DC         8
    #endif

    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
     
    а вот дальше хуже(
    как я понимаю void tftPrintTest()- отвечает за вывод текста на экран, но как заставить выводить показания датчика, это вопрос!
    такая конструкция не работает:
    void tftPrintTest() {
    tft.setTextWrap(false);
    tft.fillScreen(ST77XX_BLACK);
    tft.setCursor(0, 30);
    tft.setTextColor(ST77XX_RED);
    tft.setTextSize(1);
    tft.println("Temperature_145241870_1");
    }
     
  6. SIKA

    SIKA Нуб

    Экран TFT 1.8 дюйма, подключение и вывод текста с NodeMCU, в данном видео вывод данных о YouTube канале. Спасибо за просмотр, критика принимается ))