Giter Club home page Giter Club logo

tft_espi's Introduction

A "Discussions" facility has been added for Q&A etc. Use the "Issues" tab only for problems with the library. Thanks!

News

  1. The Create_font Processing sketch has been updated to automatically create a complete C header file. The automatic opening of the font folder can also be disabled within the Processing sketch. (Thanks to Pierre-Loup Martin).

  2. New board setup files have been added for the Seeed XIAO with round display, LilyGo T-Embed S3, LilyGo_T_QT_Pro_S3, ESP32 S3 Box and ESP32_S3_Box_Lite. The "RPi" interface style boards are now supported with the ESP32 S3.

  3. New functions have been added to draw smooth (antialiased) arcs, circles, and rounded rectangle outlines. New sketches are provided in the "Smooth Graphics" examples folder. Arcs can be drawn with or without anti-aliasing (which will then render faster). The arc ends can be straight or rounded. The arc drawing algorithm uses an optimised fixed point sqrt() function to improve performance on processors that do not have a hardware Floating Point Unit (e.g. RP2040). Here are two demo images, on the left smooth (anti-aliased) arcs with rounded ends, the image to the right is the same resolution (grabbed from the same 240x240 TFT) with the smoothing diasbled (no anti-aliasing):

    arcs pixelated_arcs

    Here the smooth arcs have been used to create anti-aliased meter gauges on a 320x240 TFT:

    arcs

  4. An excellent new compatible library is available which can render TrueType fonts on a TFT screen (or into a sprite). This has been developed by takkaO. The library provides access to compact font files, with fully scaleable anti-aliased glyphs. Left, middle and right justified text can also be printed to the screen. I have added TFT_eSPI specific examples to the OpenFontRender library and tested on RP2040 and ESP32 processors, the ESP8266 does not have sufficient RAM due to the glyph render complexity. Here is a demo screen where a single 12kbyte font file binary was used to render fully anti-aliased glyphs of gradually increasing size on a 320x480 TFT screen:

    ttf_font_demo

  5. New GUI examples have been added for sliders, buttons, graphs and meters. These examples require a new support library here:

    TFT_eWidget

  6. Support has been added in v2.4.70 for the RP2040 with 16-bit parallel displays. This has been tested and the screen update performance is very good (4ms to clear 320 x 480 screen with HC8357C). The use of the RP2040 PIO makes it easy to change the write cycle timing for different displays. DMA with 16-bit transfers is also supported.

  7. Support for the ESP32-S2, ESP32-S3 and ESP32-C3 has been added (DMA only on ESP32 S3 at the moment). Tested with v2.0.3 RC1 of the ESP32 board package. Example setups:

    Setup70_ESP32_S2_ILI9341.h

    Setup70b_ESP32_S3_ILI9341.h

    Setup70c_ESP32_C3_ILI9341.h

    Setup70d_ILI9488_S3_Parallel.h

  8. Smooth fonts can now be rendered direct to the TFT with very little flicker for quickly changing values. This is achieved by a line-by-line and block-by-block update of the glyph area without drawing pixels twice. This is a "breaking" change for some sketches because a new true/false parameter is needed to render the background. The default is false if the parameter is missing, Examples:

    tft.setTextColor(TFT_WHITE, TFT_BLUE, true); spr.setTextColor(TFT_BLUE, TFT_BLACK, true);

Note: background rendering for Smooth fonts is also now available when using the print stream e.g. with: tft.println("Hello World");

  1. New anti-aliased graphics functions to draw lines, wedge shaped lines, circles and rounded rectangles. Examples are included. Examples have also been added to display PNG compressed images (note: requires ~40kbytes RAM).

  2. Users of PowerPoint experienced with running macros may be interested in the pptm sketch generator here, this converts graphics and tables drawn in PowerPoint slides into an Arduino sketch that renders the graphics on a 480x320 TFT. This is based on VB macros created by Kris Kasprzak here.

  3. The library contains two new functions for rectangles filled with a horizontal or vertical coloured gradient:

    tft.fillRectHGradient(x, y, w, h, color1, color2);

    tft.fillRectVGradient(x, y, w, h, color1, color2);

    Gradient

  4. The RP2040 8-bit parallel interface uses the PIO. The PIO now manages the "setWindow" and "block fill" actions, releasing the processor for other tasks when areas of the screen are being filled with a colour. The PIO can optionally be used for SPI interface displays if #define RP2040_PIO_SPI is put in the setup file. Touch screens and pixel read operations are not supported when the PIO interface is used. The RP2040 PIO features only work with Earle Philhower's board package, NOT the Arduino Mbed version.

The use of PIO for SPI allows the RP2040 to be over-clocked (up to 250MHz works on my boards) in Earle's board package whilst still maintaining high SPI clock rates.

TFT_eSPI

A feature rich Arduino IDE compatible graphics and fonts library for 32-bit processors. The library is targeted at 32-bit processors, it has been performance optimised for RP2040, STM32, ESP8266 and ESP32 types, other 32-bit processors may be used but will use the slower generic Arduino interface calls. The library can be loaded using the Arduino IDE's Library Manager. Direct Memory Access (DMA) can be used with the ESP32, RP2040 and STM32 processors with SPI interface displays to improve rendering performance. DMA with a parallel interface (8 and 16-bit) is only supported with the RP2040.

The updates for the ESP32 S2/C3/S3 means that the library requires the ESP32 Arduino board package 2.x.x or later.

The screen controller, interface pins and library configuration settings must be defined inside the library. They can NOT be defined in the Arduino sketch. See the User_Setup_Select.h file for details. This approach has significant advantages, it keeps the examples clean from long configuration options and once the setup is defined any example can be run without modification. PlatformIO users can define these settings on a per project basis within a platformio.ini file, see Docs folder in library.

Lots of example sketches are provided which demonstrate using the functions in the library. Due to the popularity of the library there are lots of online tutorials for TFT_eSPI that have been created by enthusiastic users.

Optimised drivers have been tested with the following processors:

  • RP2040, e.g. Raspberry Pi Pico
  • ESP32 and ESP32-S2, ESP32-C3, ESP32-S3
  • ESP8266
  • STM32F1xx, STM32F2xx, STM32F4xx, STM32F767 (higher RAM processors recommended)

The library supports the following interface types for these processors:

Processor 4 wire SPI 8-bit parallel 16-bit parallel DMA support
RP2040 Yes Yes Yes Yes (all)
ESP32 Yes Yes No Yes (SPI only)
ESP32 C3 Yes No No No
ESP32 S2 Yes No No No
ESP32 S3 Yes Yes No Yes (SPI only)
ESP8266 Yes No No No
STM32Fxxx Yes Yes No Yes (SPI only)
Other Yes No No No

For other (generic) processors only SPI interface displays are supported and the slower Arduino SPI library functions are used by the library. Higher clock speed processors such as used for the Teensy 3.x and 4.x boards will still provide a very good performance with the generic Arduino SPI functions.

4 wire SPI means the display must have SPI interface comaptible signals and a "Data/Command" control signal, this signal line is sometimes labelled DC, RS or A0.

Due to lack of GPIO pins the 8-bit parallel interface is NOT supported on the ESP8266. 8-bit parallel interface TFTs (e.g. UNO format mcufriend shields) can used with the STM32Fxxx Nucleo 64/144 range or the UNO format ESP32 (see below for ESP32).

Support for the XPT2046 touch screen controller is built into the library and can be used with SPI interface displays. Third party touch support libraries are also available when using a display parallel interface.

Displays using the following controllers are supported:

  • GC9A01
  • ILI9163
  • ILI9225
  • ILI9341
  • ILI9342
  • ILI9481 (DMA not supported with SPI)
  • ILI9486 (DMA not supported with SPI)
  • ILI9488 (DMA not supported with SPI)
  • HX8357B (16-bit parallel tested with RP2040)
  • HX8357C (16-bit parallel tested with RP2040)
  • HX8357D
  • R61581
  • RM68120 (support files added but untested)
  • RM68140
  • S6D02A1
  • SSD1351
  • SSD1963 (this controller only has a parallel interface option)
  • ST7735
  • ST7789
  • ST7796

ILI9341 and ST7796 SPI based displays are recommended as starting point for experimenting with this library.

The library supports some TFT displays designed for the Raspberry Pi (RPi) that are based on a ILI9486 or ST7796 driver chip with a 480 x 320 pixel screen. The ILI9486 RPi display must be of the Waveshare design and use a 16-bit serial interface based on the 74HC04, 74HC4040 and 2 x 74HC4094 logic chips. Note that due to design variations between these displays not all RPi displays will work with this library, so purchasing a RPi display of these types solely for use with this library is NOT recommended.

A "good" RPi display is the MHS-4.0 inch Display-B type ST7796 which provides good performance. This has a dedicated controller and can be clocked at up to 80MHz with the ESP32 (125MHz with overclocked RP2040, 55MHz with STM32 and 40MHz with ESP8266). The MHS-3.5 inch RPi ILI9486 based display is also supported, however the MHS ILI9341 based display of the same type does NOT work with this library.

Some displays permit the internal TFT screen RAM to be read, a few of the examples use this feature. The TFT_Screen_Capture example allows full screens to be captured and sent to a PC, this is handy to create program documentation.

The library includes a "Sprite" class, this enables flicker free updates of complex graphics. Direct writes to the TFT with graphics functions are still available, so existing sketches do not need to be changed.

Sprites

A Sprite is notionally an invisible graphics screen that is kept in the processors RAM. Graphics can be drawn into the Sprite just as they can be drawn directly to the screen. Once the Sprite is completed it can be plotted onto the screen in any position. If there is sufficient RAM then the Sprite can be the same size as the screen and used as a frame buffer. Sprites by default use 16-bit colours, the bit depth can be set to 8 bits (256 colours) , or 1 bit (any 2 colours) to reduce the RAM needed. On an ESP8266 the largest 16-bit colour Sprite that can be created is about 160x128 pixels, this consumes 40Kbytes of RAM. On an ESP32 the workspace RAM is more limited than the datasheet implies so a 16-bit colour Sprite is limited to about 200x200 pixels (~80Kbytes), an 8-bit sprite to 320x240 pixels (~76kbytes). A 1 bit per pixel Sprite requires only 9600 bytes for a full 320 x 240 screen buffer, this is ideal for supporting use with 2 colour bitmap fonts.

One or more sprites can be created, a sprite can be any pixel width and height, limited only by available RAM. The RAM needed for a 16-bit colour depth Sprite is (2 x width x height) bytes, for a Sprite with 8-bit colour depth the RAM needed is (width x height) bytes. Sprites can be created and deleted dynamically as needed in the sketch, this means RAM can be freed up after the Sprite has been plotted on the screen, more RAM intensive WiFi based code can then be run and normal graphics operations still work.

Drawing graphics into a sprite is very fast, for those familiar with the Adafruit "graphicstest" example, this whole test completes in 18ms in a 160x128 sprite. Examples of sprite use can be found in the "examples/Sprite" folder.

Sprites can be plotted to the TFT with one colour being specified as "transparent", see Transparent_Sprite_Demo example.

If an ESP32 board has SPIRAM (i.e. PSRAM) fitted then Sprites will use the PSRAM memory and large full screen buffer Sprites can be created. Full screen Sprites take longer to render (~45ms for a 320 x 240 16-bit Sprite), so bear that in mind.

The "Animated_dial" example shows how dials can be created using a rotated Sprite for the needle. To run this example the TFT interface must support reading from the screen RAM (not all do). The dial rim and scale is a jpeg image, created using a paint program.

Animated_dial

Touch controller support

The XPT2046 touch screen controller is supported for SPI based displays only. The SPI bus for the touch controller is shared with the TFT and only an additional chip select line is needed. This support will eventually be deprecated when a suitable touch screen library is available.

The Button class from Adafruit_GFX is incorporated, with the enhancement that the button labels can be in any font.

ESP8266 overlap mode

The library supports SPI overlap on the ESP8266 so the TFT screen can share MOSI, MISO and SCLK pins with the program FLASH, this frees up GPIO pins for other uses. Only one SPI device can be connected to the FLASH pins and the chips select for the TFT must be on pin D3 (GPIO0).

Fonts

The library contains proportional fonts, different sizes can be enabled/disabled at compile time to optimise the use of FLASH memory. Anti-aliased (smooth) font files in vlw format stored in SPIFFS are supported. Any 16-bit Unicode character can be included and rendered, this means many language specific characters can be rendered to the screen.

The library is based on the Adafruit GFX and Adafruit driver libraries and the aim is to retain compatibility. Significant additions have been made to the library to boost the speed for the different processors (it is typically 3 to 10 times faster) and to add new features. The new graphics functions include different size proportional fonts and formatting features. There are lots of example sketches to demonstrate the different features and included functions.

Configuration of the library font selections, pins used to interface with the TFT and other features is made by editing the User_Setup.h file in the library folder, or by selecting your own configuration in the "User_Setup_Selet,h" file. Fonts and features can easily be enabled/disabled by commenting out lines.

Anti-aliased Fonts

Anti-aliased (smooth) font files in "vlw" format are generated by the free Processing IDE using a sketch included in the library Tools folder. This sketch with the Processing IDE can be used to generate font files from your computer's font set or any TrueType (.ttf) font, the font file can include any combination of 16-bit Unicode characters. This means Greek, Japanese and any other UCS-2 glyphs can be used. Character arrays and Strings in UTF-8 format are supported.

The .vlw files must be uploaded to the processors FLASH filing system (SPIFFS, LittleFS or SD card) for use. Alternatively the .vlw files can be converted to C arrays (see "Smooth Font -> FLASH_Array" examples) and stored directly in FLASH as part of the compile process. The array based approach is convenient, provides performance improvements and is suitable where: either use of a filing system is undesirable, or the processor type (e.g. STM32) does not support a FLASH based filing system.

Here is the Adafruit_GFX "FreeSans12pt" bitmap font compared to the same font drawn as anti-aliased:

Smooth_font

The smooth font example displays the following screen:

Example

It would be possible to compress the vlw font files but the rendering performance to a TFT is still good when storing the font file(s) in SPIFFS, LittleFS or FLASH arrays.

Here is an example screenshot showing the anti-aliased Hiragana character Unicode block (0x3041 to 0x309F) in 24pt from the Microsoft Yahei font:

Hiragana glyphs

Anti-aliased fonts can also be drawn over a gradient background with a callback to fetch the background colour of each pixel. This pixel colour can be set by the gradient algorithm or by reading back the TFT screen memory (if reading the display is supported).

Anti-aliased fonts cannot be scaled with setTextSize so you need to create a font for each size you need. See examples.

8-bit parallel support

The common 8-bit "Mcufriend" shields are supported for the STM Nucleo 64/144 boards and ESP32 UNO style board. The STM32 "Blue/Black Pill" boards can also be used with 8-bit parallel displays.

The ESP32 board I have been using for testing has the following pinout:

Example

UNO style boards with a Wemos R32(ESP32) label are also available at low cost with the same pinout.

Unfortunately the typical UNO/mcufriend TFT display board maps LCD_RD, LCD_CS and LCD_RST signals to the ESP32 analogue pins 35, 34 and 36 which are input only. To solve this I linked in the 3 spare pins IO15, IO33 and IO32 by adding wires to the bottom of the board as follows:

IO15 wired to IO35

IO33 wired to IO34

IO32 wired to IO36

This is an example setup file with the correct GPIO for this UNO board.

Example

If the display board is fitted with a resistance based touch screen then this can be used by performing the modifications described here and the fork of the Adafruit library: https://github.com/s60sc/Adafruit_TouchScreen

Tips

If you load a new copy of TFT_eSPI then it will overwrite your setups if they are kept within the TFT_eSPI folder. One way around this is to create a new folder in your Arduino library folder called "TFT_eSPI_Setups". You then place your custom setup.h files in there. After an upgrade simply edit the User_Setup_Select.h file to point to your custom setup file e.g.:

#include <../TFT_eSPI_Setups/my_custom_setup.h>

You must make sure only one setup file is called. In the custom setup file I add the file path as a commented out first line that can be cut and pasted back into the upgraded User_Setup_Select.h file. The ../ at the start of the path means go up one directory level. Clearly you could use different file paths or directory names as long as it does not clash with another library or folder name.

You can take this one step further and have your own setup select file and then you only need to replace the Setup.h line reference in User_Setup_Select.h to, for example:

#include <../TFT_eSPI_Setups/my_setup_select.h>

To select a new setup you then edit your own my_setup_select.h file (which will not get overwritten during an upgrade).

tft_espi's People

Contributors

agrabren avatar andersarstrand avatar arduino12 avatar atanisoft avatar bodmer avatar boul51 avatar dracir9 avatar dustinwatts avatar goodsoft avatar goutamreddy avatar icingtomato avatar ivankravets avatar justcallmekoko avatar kamorris avatar lbuque avatar lewisxhe avatar lovyan03 avatar matixan avatar maxpautsch avatar moion avatar per1234 avatar qrackee avatar rdts avatar sbonaime avatar siuwahzhong avatar tablatronix avatar turiphro avatar u4mzu4 avatar xidameng avatar yknivag avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tft_espi's Issues

Regression: backslash in path

Hello, i would like to flag that the lib does not compile on linux/mac as the patchs are defined with \ instead of / ...

pgmspace error

Looks like latest commit on master branch esp8266/Arduino esp8266/Arduino@0b67266
causes errors in compilation.
I got:

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp: In member function 'virtual size_t TFT_eSPI::write(uint8_t)':

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2613:89: error: invalid conversion from 'unsigned int' to 'const void*' [-fpermissive]

       width = pgm_read_byte( pgm_read_dword( &(fontdata[textfont].widthtbl ) ) + uniCode-32 );

                                                                                         ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp: In member function 'int16_t TFT_eSPI::drawChar(unsigned int, int, int, int)':

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2761:76: error: invalid conversion from 'unsigned int' to 'const void*' [-fpermissive]

       width = pgm_read_byte( pgm_read_dword( &(fontdata[font].widthtbl ) ) + uniCode );

                                                                            ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2786:54: error: invalid conversion from 'uint32_t {aka unsigned int}' to 'const void*' [-fpermissive]

           line = pgm_read_byte(flash_address + w * i + k);

                                                      ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2826:54: error: invalid conversion from 'uint32_t {aka unsigned int}' to 'const void*' [-fpermissive]

           line = pgm_read_byte(flash_address + w * i + k);

                                                      ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2870:43: error: invalid conversion from 'uint32_t {aka unsigned int}' to 'const void*' [-fpermissive]

         line = pgm_read_byte(flash_address);

                                           ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:2926:45: error: invalid conversion from 'uint32_t {aka unsigned int}' to 'const void*' [-fpermissive]

         line = pgm_read_byte(flash_address++); // 8 bytes smaller when incrementing here

                                             ^

In file included from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI/Fonts/glcdfont.c:6:0,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.h:36,

                 from C:\PROGRAMY\arduino_projekty\libraries\TFT_eSPI\TFT_eSPI.cpp:20:

C:\PROGRAMY\arduino\hardware\esp8266com\esp8266\cores\esp8266/pgmspace.h:102:23: error:   initializing argument 1 of 'uint8_t pgm_read_byte(const void*)' [-fpermissive]

 static inline uint8_t pgm_read_byte(const void* addr) {

                       ^

Trouble compiling with User_Setup.h as written

First off, thanks for this great library. I plan on making quit a bit of use of it in the near future. All of the ILI9341 demo code works flawlessly on a bare ESP8266-12E, once I got it to compile.
Just to let you know that I had to remove the "D" from the pin number assignments in the User_Setup.h to get the code to compile. I'm not sure if it's an IDE version problem or what, I'm on 1.6.7 with the latest ESP8266 boards definition.

Colors from hex values are wrong

When I want to do: tft.fillScreen(0x3498db), instead of light blue I get magenta. The problem does not occur when I do the following:

int32_t toInt(r,g,b) {
			
			return (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
		}
tft.fillScreen(toInt(52, 152, 219));

The color differs only a little probably due to a dirt cheap display. How can I fix that? I am on ESP32 and ST7735 BLACKTAB display from aliexpress

Usage Question: Wiring and #defines (no issue)

Hi '@Bodmer',
and thanks for this nice lib ! Highly appreciated !

I'm confused with the wiring instructions you outlined in 'user-setup.h'.

We must use hardware SPI, a minimum of 3 GPIO pins is needed.

Do I need only these 3 GPIOs for display (I do not use touch capabilities) ?

If true, are these 3 ones? :

define TFT_CS PIN_D8 // Chip select control pin D8
#define TFT_DC PIN_D3 // Data Command control pin
#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)

OR is the full wiring required as said in section 1 of 'user-setup.h' PLUS the 3 above ?

// Typical setup for NodeMCU ESP-12 is :
...
// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT)
...

I came to this cause only those 3 PINs ( TFT_CS, TFT_DC, TFT_RST) , are used throughout the lib, no other pin is referenced. Or do I oversee something ?

Thanks for any help
Gerry

Porting to Lua

This library is beyond fast and good. Could you see any future for porting it to Lua firmware? Lua has very nice features to be honest, much more than linear Arduino programming, the only thing is missing is a very good TFT library like this. UCG is terribly slow.

Any thoughts of ESP-IDF?

Hello,

are there any thoughts to also convert the code to natively support ESP-IDF for ESP32?

It takes a bit of effort to compile using ESP-IDF with arduino components, with some not very pretty things to do for things to compile properly.

Thanks

Not working with ILI9163 128x128 display?

Hi! I'm trying to use this library with a 128x128 ILI9163 display. The display works fine with this library: https://github.com/sumotoy/TFT_ILI9163C (my display is just like the one in the picture in the readme for that library, red pcb with blue tab on the display protector). I have set #define ILI9163_DRIVER in User_Setup.h and I am overriding the width in the constructor with TFT_eSPI tft = TFT_eSPI(128, 128);. I am using the following pin defines:

#define TFT_CS   15  // Chip select control pin
#define TFT_DC   0  // Data Command control pin
#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST

And GPIO12 (MISO) is unconnected since the display does not have that pin.
TFT_RST of the display is pulled up to 3.3V via a 10k resistor.
In setup() I turn the power to the display on right before calling tft.init();
I have the Arduino IDE set to NodeMCU 1.0 & 160MHz.
I have tried a couple of the examples (TFT_Print_Test, TFT_Ellipse, TFT_Starfield) but I only get a pure white display. Any thoughts on what might be the problem?

(Note: When using sumotoy:s library i use #include "../_display/TFT_ILI9163C_RED_PCB_OLD.h" in _settings/TFT_ILI9163C_settings.h)

getTextBounds missing

Hi

First of all, thanks for this fast lib. :)

Any plans to add "getTextBounds" API ? If not, I could try to add something and raise a pull request ?

Compilation error.

I was trying to compile the library for esp32 dev kit but ,every time I try to compile the rainbow examples in eSPI library it gives an error , SPIMMOSI,SPIBUSY and many other variables are not defined. These are being used in TFT_eSPI.cpp but I cannot find where are they defined or innitialised.

Crash on printing undefined chars

I was trying to print a degree symbol and was surprised to find that it caused a crash in anything other than font 1.
Reproduce sketch:

#include <SPI.h>
#include <TFT_eSPI.h>

TFT_eSPI tft = TFT_eSPI();

void setup() {
  Serial.begin(115200);
  tft.init();
  tft.setCursor(10, 10, 2);
  tft.setTextColor(TFT_WHITE,TFT_BLACK);
}

void loop() {
  tft.print(char(223));
  delay(100000);
}

The result is:

Guru Meditation Error of type LoadProhibited occurred on core  1. Exception was unhandled.
Register dump:
PC      : 0x400d1c4f  PS      : 0x00060330  A0      : 0x800d0b69  A1      : 0x3ffceda0  
A2      : 0x00000000  A3      : 0x00000090  A4      : 0x00000090  A5      : 0x00000084  
A6      : 0x00000010  A7      : 0x3ffc226c  A8      : 0x800d1c3c  A9      : 0x00000084  
A10     : 0x3ff44000  A11     : 0x3ffc22f0  A12     : 0x00000000  A13     : 0x00000069  
A14     : 0x00000019  A15     : 0x00000004  SAR     : 0x0000001c  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000084  LBEG    : 0x400d26f0  LEND    : 0x400d2752  LCOUNT  : 0x00000002  

Backtrace: 0x400d1c4f:0x3ffceda0 0x400d0b66:0x3ffcee10 0x400e37c5:0x3ffcee40 0x400d08b1:0x3ffcee60 0x400de3c5:0x3ffcee80

Jpeg MCU compatibility with pushColors function

I've really appreciated your work on SD, Jpeg and decent fonts. I was originally using Adafruits ILI9341 library, and found it slow and without attractive fonts. I changed the code for a Jpeg slide show, reading an SD card, to use TFT-eSPI and ran into a problem with 16x16 MCUs. The original code for pushColors anticipated 255 max pixels which results in a missing pixel in every 16x16 MCU. I changed the unit8_t len to unit16_t len as below in both the .h and .cpp files which still left the second pushColors function unique so there is no ambiguity for the compiler. I'm not certain if it would have been better to create a new say, pushMCU, or the changes I made. Now it's working very well, reading Jpegs instead of bitmaps. Great thanks to all who contributed.

void TFT_eSPI::pushColors(uint16_t *data, uint16_t len)

Issue ESP32 and uncommon pin for CS

Hi,
I used ESP32 with ILI9341 and the freefont_demo.
I think the initialization fails if an uncommon io pin for CS is selected.
with "#define TFT_CS 5" the LCD runs fine, but with "#define TFT_CS 15" I cannot see an image.

image
figure above: IO5 used (ok)

image
figure above: IO15 used (fails)

ILI9341_Init.h:

// This is the command sequence that initialises the ILI9341 driver
// This setup information uses simple 8 bit SPI writecommand() and writedata() functions
// See ST7735_Setup.h file for an alternative format
{
writecommand(0xEF);
writedata(0x03);
writedata(0x80);
writedata(0x02);
(...)

It seems that the CS is not drawn to LOW at the 1st initialization byte after switching the SPI clock on.
(SPI clock rate 1MHz, logic analyzer sampling rate = 16 MHz)

Any hints ?

Clarification on PIN Connections

Hello, thank you for sharing this with us !

I need some clarification on the PIN Connections of my TFT with ESP8266-E12 :

// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT)
-> My TFT does not have SD0 (Only SCK, SDA) - Which one to use ?
// Display LED to NodeMCU pin VIN (or 5V, see below)
// Display SCK to NodeMCU pin D5
-> OK, connected
// Display SDI/MOSI to NodeMCU pin D7
-> My TFT does not have SDI (Only SCK, SDA) - Which one to use ?
// Display DC (or AO)to NodeMCU pin D3
// Display RESET to NodeMCU pin D4 (or RST, see below)
// Display CS to NodeMCU pin D8 (or GND, see below)
// Display GND to NodeMCU pin GND (0V)
// Display VCC to NodeMCU 5V or 3.3V

Seems I am missing a PIN ?

Many thanks for your help !!

Kind Regards,

Tony

ILI9163_Init.h

Hi!
bad text in .h files: st7735, ili9341??

// This is the command sequence that initialises the ST7735 driver
//
// This setup information is in a format accecpted by the commandList() function
// which reduces FLASH space, but on an ESP8266 there is plenty available!
//
// See ILI9341_Setup.h file for an alternative simpler format

Question

Hi Bodmer, back again and just saw the ESP32 compatibility - great!!
A quick question. I am looking for fonts on various sizes. I like the ones you embedded in your porting of the weather station but only two sizes are available.
Is your lib compatible with Paul Stoffregen collection here on Github, and derived? (e.g. https://github.com/sumotoy/commonFonts).
thanks once more. m

TFT_eSPI.h: swap() clashes with std::swap

I'm building a geo points map renderer for a project of mine and while trying to sort the vectors of points, I stumbled upon a strange issue.

The swap() method, defined in TFT_eSPI.h clashes with swap from the standard utility library.

Here's the error:

error: call of overloaded 'swap(GeoPoint&, GeoPoint&)' is ambiguous swap(*__a, *__b);

It wasn't very obvious why it was failing from the code, but it seems that std::sort is using swap in its implementation.

Here's the relevant code that causes the issue:

typedef std::vector<GeoPoint> GeoPointList;

...

GeoPointList pointsList;

...

struct GeoPointComparator {
    inline bool operator() (const GeoPoint& struct1, const GeoPoint& struct2) {
        return (struct1.distance < struct2.distance);
    }
};

...

void sortList() {
    std::sort(this->pointsList.begin(), this->pointsList.end(), GeoPointComparator());
}

The above are code excerpts that cause the issue. My C++ is not at a very high level, so please forgive any non-optimal syntax :)

In my case, if I renamed TFT_eSPI.h's swap to swap2 for example, the code compiles and runs without any issues.

It would be awesome if this method could be renamed to something that is scoped down to only the TFT_eSPI library, so it doesn't clash with the standard library.

Compile error

Hi Bodmer,
Not sure if I made a mistake, but after installing the lib the example does not compile (on Mac) - see below.
I did edit the User_Setup.h (as I did in you older library) but i get the error below. It appears as the zip from GitHub has a patch problem. Is there any additional configuration step required? thanks for your time!

/Users/Marc/Documents/Arduino/libraries/TFT_eSPI-master/TFT_eSPI.h:27:46: fatal error: TFT_Drivers\ILI9341_Defines.h: No such file or directory
#include <TFT_Drivers\ILI9341_Defines.h>
^
compilation terminated.
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).

examples/160x128/RLE_font_test.ino crash

Good work, really fast.

Just to let you know that the example RLE_font_test in 160x128, crash when a font it use has been commented out in User_setup.h. Not a big deal, but it was my first test with your library, not a good first impression. But, after that, I think I prefer yours to the teensy TFT one.

BTW I'm using it on ESP32 (DOIT devkit V1), with a 1.8" ST7735 display which seems to be GREENTAB2.

Thanks

Library is slow in combination with PaulStoffregen / XPT2046_Touchscreen and ESP8266

Hello,

In combination with the PaulStoffregen / XPT2046_Touchscreen, the library becomes slow,
I have added the following in the TFT_eSPI.cpp init section, (after #ifdef ESP32...)

#ifdef ESP8266 // Unlock the SPI hal mutex and set the lock management flags
SPI.beginTransaction(SPISettings(SPI_FREQUENCY, MSBFIRST, SPI_MODE0));
inTransaction = true; // Flag to stop intermediate spi_end calls
locked = false; // Flag to stop repeat beginTransaction calls
#endif_**

and now al works fine...
Is it correct what i have done?

thx.
Nulista

Question: Pin Setup Kuman 3.5 Inch

I had a display laying around Info1 Info2 Info3 but I'm not really sure how to wire it and which settings to use. This is what I googled for the display:

1ใ€17               3.3V       ------   Power supply positive (3.3V power input)
2ใ€4               5V         -- ----     Power supply positive (5V power input)
3ใ€5ใ€7ใ€8ใ€10ใ€12ใ€13ใ€15ใ€16    NC         --- ---         NC
6ใ€9ใ€14ใ€20ใ€25                    GND        -------          Power GND
11               TP_IRQ     ------ Touch panel interrupt, detect the touch panel is pressed down to a low level
18               LCD_RS       -------   Instruction / data register selection
19               LCD_SI / TP_SI   ------ LCD display / touch panel SPI data input
21               TP_SO          -----  SPI data output of touch panel
22               RST                -----        reset
23               LCD_SCK / TP_SCK   LCD  --------    SPI clock signal for display / touch panel
24               LC _CS           --------          LCD chip select signal, low level LCD
26               TP_CS    ---------   The touch panel chip select signal, low level selection of touch panel

I'm new to this hardware thing :) I also have a wemos d1 mini and some nodemcu here. What would be the minmal setup just to draw some text on the display? I did use the RPI_ILI9486_DRIVER and it compiled and flashed to the nodemcu but there was nothing on the display.

Feedback on ESP32 and ILI9163 display

IDE PlatformIO
Device ESP32 dev module
Display Elecrow 1.77" 128x160 TFT display with ILI9163 controller

Works good, but I didn't check all lib functions yet. Max SPI speed is 27Mhz (most likely limited by the display itself). Faster SPI speeds produce garbage on the screen.

Encountered one conflict with OTA updates. You initialize with
SPI.beginTransaction(SPISettings(SPI_FREQUENCY, MSBFIRST, SPI_MODE0));
But SPI.endTransaction() is never called, which causes OTA updates to fail. Don't know why.

Workaround:
In the user_setup_xxxx.h (whichever is used, I created my own for this hardware combination) uncomment // #define SUPPORT_TRANSACTIONS and the problem is gone.

Another issue is that I had to define TFT_MOSI, TFT_MISO and TFT_SCLK to get the communication with the display working.

Hope this feedback helps.

Issues with setRotation()

the tft works fine normally but whenever I use the setRotation() function it behaves aierdly.
For instance ,

 `#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
 #include <SPI.h>

TFT_eSPI tft = TFT_eSPI(); 


 void setup() {
// put your setup code here, to run once:
 Serial.begin(115200);
tft.init();
//tft.setRotation(1);
 tft.fillScreen(ST7735_GREEN);


Serial.println(tft.width());
Serial.println(tft.height());
tft.fillRect(0,0,tft.width()/4,tft.height()/4,ST7735_RED);
}

void loop() {
}` 

This code works perfectly fine but if I uncomment the line
tft.setRotation(1)
the display suddenly stops i.e nothing is displayed, the tft goes entirely white.

Now when I exchange red and green (keeping setRotation() uncommented) this is what is displayed :

img_20170526_102206

Add support for ILI9481 (Parallel)

I saw there was a merge request for a parallel version of another display (ILI9486 I think it was)
How hard would it be to modify or add support for a ILI9488 parallel version?

international font/characters

Hi!
How to make compatible font array include international charset?
I try TFT_eSPI/examples/ILI9341/weather-station-v6/
set wunderground language to hungary, city, the text messages on display contain space character instead of accents/international character.
(platform: Esp8266)

Great work, Thank You

Inaccurate text wrapping

Text printed wraps even when there is one pixel left over. The fix is to change
if (textwrap && (cursor_x + width * textsize >= _width))
to
if (textwrap && (cursor_x + width * textsize > _width))

Customizing settings

Hi,
Thanks for this wonderful library. I love that you have created a total seperate library rather than forking the Adafruit libraries and naming it differently. The has been a plethora of forks of the Adafruit TFT libraries each with subtle differences and incompabilities amongst them, leading to much confusion when a project is revisited after a long time.

However, I have a slight problem with your library in the way the settings are customized. The customizations are done via editing of the user_setup.h file which is part of the library itself. I work with quite a number of TFT displays and also different connections on different boards. It is not efficient to customize the library or duplicate the library for each and every project that I work on. The settings should be stored with other functional codes of the project rather than in the setup itself.

I could have forked your library but then it will then again soon create problems like the Adafruit libraries, too many forks, too many variants of the same name.

Hope to hear from you soon.

Request to include ST7789V TFT for Esp32-Wrover-kit v3

I would do this myself if I was capable but although there is now a library that supports the above for the basic C toolchain (loboris/ESP32_TFT_library), there does not seem to be anything available for the Arduino IDE. Is this something you would consider including here?

WORKS - MISO pin as D/C !!

Hi Bodmer, further to our previous conversation on using the MISO pin, I did manage to make it work as D/C.
Basically, only one additional line of code is needed, to set the pin as output after SPI initialisation!

void TFT_eSPI::init(void)
...
_SPI->begin(); // This will set MISO to input
...
pinMode(D6, OUTPUT);

Any chance to add this option in the config file?
Clearly this works if input functions are not used (and ifSPI transactions are not enabled).
thanks!

Mirrored display

I'm using ST7735_DRIVER with ST7735_REDTAB variant (why not a single #define DRIVER ST7735_REDTAB ? -- but that could be for another time) with an ESP8266 (Wemos D1 mini, actually).
After pulling latest version, I get a left-right mirrored display. In a previous library version (a quite old one, but I don't remember commit ID) it worked OK. Did I miss some change? Is there a simple call to fix it?
My init code is:
TFT_eSPI disp = TFT_eSPI();
...
void setup() {
...
disp.init();
disp.setRotation(3);
disp.fillScreen(TFT_BLACK);
disp.setTextColor(TFT_WHITE, TFT_BLACK);
disp.setCursor(12,5);
disp.drawCentreString(title, 80, 7, 2);
}

Tks.

SPI overlap support

It appears that SPI overlap support has recently been added to the arduino esp8266 code.

esp8266/Arduino#3189

This would be really useful for projects which are pin constrained and where the screen is only updated infrequently.

From what I can understand, due to it requiring use of the hardware CS pin, it has to use write/transferBytes functions so that all data is transmitted in one go. From looking through the code in your library, it looks to me that single byte transmissions are being used.

Do you think that your library could be modified to use overlapping SPI, or are their specific reasons why this would not be possible?

ST7735 uses wrong colors

Hello again.
Seems I'm still missing something.
I tried all sub-options for ST7735_DRIVER, but it seems none sets the correct color order.
TFT_RED is displayed as blue, while TFT_BLUE is displayed as red.
At least bit order inside the color int seems OK (so 0b1100000000000000 is still blue, but not much darker than the blue displayed by TFT_RED).
I could find possibly-relevant references to BGR only in ST7735_rotation.h, but even if I change rotation (tried 0, 1, 5) the result is the same.
Moreover, using disp.fillScreen(TFT_BLUE); fills red just about half of the screen -- the other half remains black (well, actually it keeps old values).

Lost user settings on library update - not an issue, just how do others save their user settings

I had defined my settings for a ILI9163 display connected to an ESP32 in the libraries User_Setups folder and then added it in User_Setup_Select.h
Using PlatformIO, the library was updated to the latest version today and (of course) the file I created with my display and connection settings was deleted in the process. So I needed to create it again (stupid me didn't have a backup of the file).

Just asking other users if they found a solution to keep their user settings file secure over an update of the library.

I tried to keep my settings file in the project folder and include it just before the TFT_eSPI.h, and then don't include any standard setting in User_Setup_Select.h, but that doesn't work.

Touch part of module tjctm24024 is not working

Hello,

After using some other libraries to get my display and touch controller running on an ESP32, I found this nice library, however I don't manage to get the touch part running.

I am running a tjctm24024, the red ones:

http://play.fallows.ca/wp/projects/electronics-projects/tjctm24024-module-running/

The display is running fine, but the touch part is not working, whatever I try.

I run it on an ESP Doit Devboard 1.

The display part on a seperate SPI channel then the touch part:

setup.h:

// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ######

// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins

#define TFT_MISO 27 // Not connected
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 22 // Chip select control pin
#define TFT_DC 21 // Data Command control pin
#define TFT_RST 17 // Reset pin (could connect to RST pin)
//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST

#define TOUCH_CS 4 // Chip select pin (T_CS) of touch screen

T_DIN on D13,
T_CLK on D14
T_DO on D12
T_IRQ not connected

Using Arduino IDE 1.6.12
Latest arduino esp32 core version: arduino-esp32-master_v3.0-dev-1024-g92748142_24102017.zip

Tried two different displays but neither the touch part is working.

Can you help me out?

Trouble using library with DC pin set to D4 instead of D3 -(I found work-around)

First off- once I got this working, I see this is an amazingly good driver/example set. Thanks a lot!

My Adafruit ESP8266 Huzzah has D3 (arduino Pin0) dedicated to a programming pushbutton- isn't pinned out. Therefore, I have connected TFT pin DC to D4 (arduino #2 on huzzah). In User_setup.h I have the following line
#define TFT_DC D4 // Data Command control pin

This doesn't work at all (and I can see the red LED on D3 still flashing) . But, if I change line 78 in TFT_eSPI.h
from this - #define DC_C GPOC=dcpinmask
to this- #define DC_C digitalWrite(D4, LOW);
it works fine.

I also notice that I can't use TFT_DC in place of D4, above, or it won't work.

Alternately, if I change Lines 160, 161 in TFT_eSPI.cpp, as follows:
dcport = portOutputRegister(digitalPinToPort(D4)); //was TFT_DC
dcpinmask = (uint32_t) digitalPinToBitMask(D4); // was TFT_DC

AND restore Line 78 in TFT_eSPI.h to its original, this also works OK.
In an example sketch, if I insert
Serial.println(TFT_DC) it prints 0 to serial port
but Serial.println(D4) it prints 2, which is the correct Arduino pin# for D4.
I don't know why, but the #define TFT_DC D4 doesn't seem to be making its way to the applicable code in the .cpp and .h files.

ILI9844 Support

Hi,

I'm trying to create a driver for the ILI9844 for your library. I want to use ILI9844 as they come in a really nice size 3.5".

I've pretty much got it working but the colours come out weird and the image is striped (see attached image).

I'm just asking if you have any idea what it could be? I can push my config to a repo if it helps?

20170925_171634

Thanks

Sam

fillScreen not working

I have everything working on my esp8266 12F unit with 1.8 Greentab tft except fillScreen. For some reason cannot clear the screen. It always show what was previously loaded.

Any idea what i'm doing wrong?

Small bug & fix : GfXUI.cpp

Hi,
and big thank for your libs !

Here is a small one found in GfxUI.cpp from the examples:
GfxUI.cpp->drawBmp()
last lines :

.... 
 if(!goodBmp) {
	  Serial.print(F("BMP format not recognised. File:"));
	  Serial.println(filename);
  }
  else	// gsi: bug fix: if bmp is faulty, rotation is not set back correctly
	  _tft->setRotation(rotation); // Put back original rotation
}

In case of a non- supported BMP ( in my case only 256 colors), the _tft->setRotation() is exexuted even with a faulty bmp. That spoils the whole screen as the rotation is not initialised then.

br
Gerry

Not compiling

Hi

I tried your library but I am unable to compile when I use the ST7735 user setup. Is there something I'm missing? The error message am getting is below:

Arduino: 1.6.9 (Mac OS X), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 921600, 4M (1M SPIFFS)"

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware "/Applications/Arduino.app/Contents/Java/hardware" -hardware "/Users/gb/Library/Arduino15/packages" -hardware "/Users/gb/Documents/Arduino/hardware" -tools "/Applications/Arduino.app/Contents/Java/tools-builder" -tools "/Users/gb/Library/Arduino15/packages" -built-in-libraries "/Applications/Arduino.app/Contents/Java/libraries" -libraries "/Users/gb/Documents/Arduino/libraries" -fqbn=esp8266:esp8266:nodemcuv2:CpuFrequency=80,UploadSpeed=921600,FlashSize=4M1M -ide-version=10609 -build-path "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp" -warnings=more -prefs=build.warn_data_percentage=75 -verbose "/Users/gb/Documents/Arduino/libraries/TFT_eSPI/examples/160 x 128/TFT_Ellipse/TFT_Ellipse.ino"
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware "/Applications/Arduino.app/Contents/Java/hardware" -hardware "/Users/gb/Library/Arduino15/packages" -hardware "/Users/gb/Documents/Arduino/hardware" -tools "/Applications/Arduino.app/Contents/Java/tools-builder" -tools "/Users/gb/Library/Arduino15/packages" -built-in-libraries "/Applications/Arduino.app/Contents/Java/libraries" -libraries "/Users/gb/Documents/Arduino/libraries" -fqbn=esp8266:esp8266:nodemcuv2:CpuFrequency=80,UploadSpeed=921600,FlashSize=4M1M -ide-version=10609 -build-path "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp" -warnings=more -prefs=build.warn_data_percentage=75 -verbose "/Users/gb/Documents/Arduino/libraries/TFT_eSPI/examples/160 x 128/TFT_Ellipse/TFT_Ellipse.ino"
WARNING: Spurious .github folder in 'Adafruit Motor Shield library' library
WARNING: Spurious .github folder in 'Adafruit Motor Shield V2 Library' library
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI/SPI.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/dev/null"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/preproc/ctags_target_for_gcc_minus_e.cpp"
"/Applications/Arduino.app/Contents/Java/tools-builder/ctags/5.8-arduino10/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/preproc/ctags_target_for_gcc_minus_e.cpp"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -Wall -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp" -o "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/sketch/TFT_Ellipse.ino.cpp.o"
"/Users/gb/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/core" -c -Wall -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10609 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu" "-I/Users/gb/Documents/Arduino/libraries/TFT_eSPI" "-I/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI" "/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp" -o "/var/folders/_q/9mn8jw2j2c5cx6mlwmkxpf840000gn/T/build1ee3e87dab021ec9bd7494ab793abfc2.tmp/libraries/TFT_eSPI/TFT_eSPI.cpp.o"
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:3475:1: warning: "/*" within comment [-Wcomment]
 /***************************************************
 ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:225:0:
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h: In member function 'void TFT_eSPI::init()':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:14:5: error: 'ST7735_SWRESET' was not declared in this scope
     ST7735_SWRESET,   TFT_INIT_DELAY,  //  1: Software reset, no args, w/delay
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:16:5: error: 'ST7735_SLPOUT' was not declared in this scope
     ST7735_SLPOUT ,   TFT_INIT_DELAY,  //  2: Out of sleep mode, no args, w/delay
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:18:5: error: 'ST7735_COLMOD' was not declared in this scope
     ST7735_COLMOD , 1+TFT_INIT_DELAY,  //  3: Set color mode, 1 arg + delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:21:5: error: 'ST7735_FRMCTR1' was not declared in this scope
     ST7735_FRMCTR1, 3+TFT_INIT_DELAY,  //  4: Frame rate control, 3 args + delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:26:5: error: 'ST7735_MADCTL' was not declared in this scope
     ST7735_MADCTL , 1      ,  //  5: Memory access ctrl (directions), 1 arg:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:28:5: error: 'ST7735_DISSET5' was not declared in this scope
     ST7735_DISSET5, 2      ,  //  6: Display settings #5, 2 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:32:5: error: 'ST7735_INVCTR' was not declared in this scope
     ST7735_INVCTR , 1      ,  //  7: Display inversion control, 1 arg:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:34:5: error: 'ST7735_PWCTR1' was not declared in this scope
     ST7735_PWCTR1 , 2+TFT_INIT_DELAY,  //  8: Power control, 2 args + delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:38:5: error: 'ST7735_PWCTR2' was not declared in this scope
     ST7735_PWCTR2 , 1      ,  //  9: Power control, 1 arg, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:40:5: error: 'ST7735_PWCTR3' was not declared in this scope
     ST7735_PWCTR3 , 2      ,  // 10: Power control, 2 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:43:5: error: 'ST7735_VMCTR1' was not declared in this scope
     ST7735_VMCTR1 , 2+TFT_INIT_DELAY,  // 11: Power control, 2 args + delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:47:5: error: 'ST7735_PWCTR6' was not declared in this scope
     ST7735_PWCTR6 , 2      ,  // 12: Power control, 2 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:49:5: error: 'ST7735_GMCTRP1' was not declared in this scope
     ST7735_GMCTRP1,16      ,  // 13: Magical unicorn dust, 16 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:54:5: error: 'ST7735_GMCTRN1' was not declared in this scope
     ST7735_GMCTRN1,16+TFT_INIT_DELAY,  // 14: Sparkles and rainbows, 16 args + delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:60:5: error: 'ST7735_CASET' was not declared in this scope
     ST7735_CASET  , 4      ,  // 15: Column addr set, 4 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:63:5: error: 'ST7735_RASET' was not declared in this scope
     ST7735_RASET  , 4      ,  // 16: Row addr set, 4 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:66:5: error: 'ST7735_NORON' was not declared in this scope
     ST7735_NORON  ,   TFT_INIT_DELAY,  // 17: Normal display on, no args, w/delay
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:68:5: error: 'ST7735_DISPON' was not declared in this scope
     ST7735_DISPON ,   TFT_INIT_DELAY,  // 18: Main screen turn on, no args, w/delay
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:79:5: error: 'ST7735_FRMCTR2' was not declared in this scope
     ST7735_FRMCTR2, 3      ,  //  4: Frame rate control - idle mode, 3 args:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:81:5: error: 'ST7735_FRMCTR3' was not declared in this scope
     ST7735_FRMCTR3, 6      ,  //  5: Frame rate ctrl - partial mode, 6 args:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:95:5: error: 'ST7735_PWCTR4' was not declared in this scope
     ST7735_PWCTR4 , 2      ,  // 10: Power control, 2 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:98:5: error: 'ST7735_PWCTR5' was not declared in this scope
     ST7735_PWCTR5 , 2      ,  // 11: Power control, 2 args, no delay:
     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_Drivers/ST7735_Init.h:102:5: error: 'ST7735_INVOFF' was not declared in this scope
     ST7735_INVOFF , 0      ,  // 13: Don't invert display, no args, no delay
     ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'int16_t TFT_eSPI::textWidth(const char*, int)':
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1158:26: note: in expansion of macro 'pgm_read_dword'
     widthtable = (char *)pgm_read_dword( &(fontdata[font].widthtbl ) ) - 32; //subtract the 32 outside the loop
                          ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1178:43: note: in expansion of macro 'pgm_read_dword'
         GFXglyph *glyph  = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[uniCode]);
                                           ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1178:83: warning: array subscript has type 'char' [-Wchar-subscripts]
         GFXglyph *glyph  = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[uniCode]);
                                                                                   ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::drawChar(int32_t, int32_t, unsigned char, uint32_t, uint32_t, uint8_t)':
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1322:39: note: in expansion of macro 'pgm_read_dword'
     GFXglyph *glyph  = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[c]);
                                       ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1323:35: note: in expansion of macro 'pgm_read_dword'
     uint8_t  *bitmap = (uint8_t *)pgm_read_dword(&gfxFont->bitmap);
                                   ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1328:14: warning: unused variable 'xa' [-Wunused-variable]
              xa = pgm_read_byte(&glyph->xAdvance);
              ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::setAddrWindow(int32_t, int32_t, int32_t, int32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1496:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1496:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1513:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1513:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1530:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1530:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::readAddrWindow(int32_t, int32_t, int32_t, int32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1751:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1751:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1768:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1768:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1785:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1785:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::drawPixel(uint32_t, uint32_t, uint32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1868:31: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1868:56: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1895:31: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1895:56: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1920:29: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:1920:54: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   SPI1U1 = mask | (CMD_BITS << SPILMOSI) | (CMD_BITS << SPILMISO);
                                                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::drawLine(int32_t, int32_t, int32_t, int32_t, uint32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2319:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (x1 >= _height) x1 = _height - 1;
               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2322:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if ((x0 >= 0) && (y0 >= 0) && (y0 < _width)) break;
                                           ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2342:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ((y0 < 0) || (y0 >= _width)) break;
                                ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2353:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (x1 >= _width) x1 = _width - 1;
               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2356:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if ((x0 >= 0) && (y0 >= 0) && (y0 < _height)) break;
                                           ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2376:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ((y0 < 0) || (y0 >= _height)) break;
                                ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::drawFastVLine(int32_t, int32_t, int32_t, uint32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2402:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x >= _width) || (y >= _height) || (h < 1)) return;
             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2402:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x >= _width) || (y >= _height) || (h < 1)) return;
                              ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2403:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((y + h - 1) >= _height) h = _height - y;
                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::drawFastHLine(int32_t, int32_t, int32_t, uint32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2452:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x >= _width) || (y >= _height) || (w < 1)) return;
             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2452:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x >= _width) || (y >= _height) || (w < 1)) return;
                              ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2453:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x + w - 1) >= _width)  w = _width - x;
                      ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::fillRect(int32_t, int32_t, int32_t, int32_t, uint32_t)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2501:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x > _width) || (y > _height) || (w < 1) || (h < 1)) return;
            ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2501:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x > _width) || (y > _height) || (w < 1) || (h < 1)) return;
                            ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2502:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((x + w - 1) > _width)  w = _width  - x;
                     ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2503:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if ((y + h - 1) > _height) h = _height - y;
                     ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'virtual size_t TFT_eSPI::write(uint8_t)':
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:92:29: note: in definition of macro 'pgm_read_byte'
     PGM_P __local = (PGM_P)(addr);  /* isolate varible for macro expansion */         \
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2613:30: note: in expansion of macro 'pgm_read_dword'
       width = pgm_read_byte( pgm_read_dword( &(fontdata[textfont].widthtbl ) ) + uniCode-32 );
                              ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2637:53: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (textwrap && (cursor_x + width * textsize >= _width))
                                                     ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2660:42: note: in expansion of macro 'pgm_read_dword'
         GFXglyph *glyph = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[c2]);
                                          ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2665:63: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           if(textwrap && ((cursor_x + textsize * (xo + w)) >= _width)) {
                                                               ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'int16_t TFT_eSPI::drawChar(unsigned int, int, int, int)':
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2726:42: note: in expansion of macro 'pgm_read_dword'
         GFXglyph *glyph = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[c2]);
                                          ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2746:21: note: in expansion of macro 'pgm_read_dword'
     flash_address = pgm_read_dword(&chrtbl_f16[uniCode]);
                     ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2760:23: note: in expansion of macro 'pgm_read_dword'
       flash_address = pgm_read_dword( pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *) );
                       ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2760:39: note: in expansion of macro 'pgm_read_dword'
       flash_address = pgm_read_dword( pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *) );
                                       ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:92:29: note: in definition of macro 'pgm_read_byte'
     PGM_P __local = (PGM_P)(addr);  /* isolate varible for macro expansion */         \
                             ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2761:30: note: in expansion of macro 'pgm_read_dword'
       width = pgm_read_byte( pgm_read_dword( &(fontdata[font].widthtbl ) ) + uniCode );
                              ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2920:15: warning: unused variable 'textcolorBin' [-Wunused-variable]
       uint8_t textcolorBin[] = { (uint8_t) (textcolor >> 8), (uint8_t) textcolor };
               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:2921:15: warning: unused variable 'textbgcolorBin' [-Wunused-variable]
       uint8_t textbgcolorBin[] = { (uint8_t) (textbgcolor >> 8), (uint8_t) textbgcolor };
               ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'int16_t TFT_eSPI::drawString(const char*, int, int, int)':
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:3070:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (poX+cwidth>_width)   poX = _width - cwidth;
                    ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:3072:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (poY+cheight-baseline>_height) poY = _height - cheight;
                              ^
In file included from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/Fonts/glcdfont.c:6:0,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.h:36,
                 from /Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:20:
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:3083:40: note: in expansion of macro 'pgm_read_dword'
       GFXglyph *glyph = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[c2]);
                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp: In member function 'void TFT_eSPI::setFreeFont(const GFXfont*)':
/Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/pgmspace.h:112:72: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define pgm_read_dword(addr)   (*reinterpret_cast<const uint32_t*>(addr))
                                                                        ^
/Users/gb/Documents/Arduino/libraries/TFT_eSPI/TFT_eSPI.cpp:3327:40: note: in expansion of macro 'pgm_read_dword'
     GFXglyph *glyph1  = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[c]);
                                        ^
Using library TFT_eSPI at version 0.16.7 in folder: /Users/gb/Documents/Arduino/libraries/TFT_eSPI 
Using library SPI at version 1.0 in folder: /Users/gb/Library/Arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI 
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).

Simplify use of different displays in different projects

Currently the lib is thought for a single kind of display.
If you add include guards in User_Setup.h it becomes easy to add a file to the project, to be included before including TFT_eSPI.h .
The change would be minimal:
#ifndef _TFT_ESPI_USER_SETUP_H
#define _TFT_ESPI_USER_SETUP_H
... rest of User_Setup.h
#endif

This way, every project can have its own setup (maybe one uses ESP8266 and another uses ESP32...).

PS: tks for your effort! This lib rocks!

PlatformIO usage

I am amazed your great library is available in PlatformIO! ๐Ÿ˜ƒ

I'm just struggling with the User_Setup that is to be done by basically modifying the library files itself, which is not the way PIO dynamically fetches libraries.
Any hint on this regard?

Thank you!

add an image_background setting

hey @Bodmer

can you add some background option to your codes
for example i need to print a TRANSPARENT bitmap file
or i need to REPLACE some color with another

voids like that:


TFT_eSPI :: bmpDraw (char *filename, int x, int y, boolean flip,const enum ST7735_iconMods m , uint16_t color)


	tft1.bmpDraw(1, 10, &machine, TRANSPARENT, 0x0020); //colors under 0x00FF will be skipped

	tft1.bmpDraw(1, 10, &machine, REPLACE, 0x00FF); //colors under 0x00FF will be replaced by RED


i have done my research and find this code but because you send 16 bit array i couldn't find out how to do that with your library


void TFT_ST7735::drawImage(int16_t x, int16_t y,const tPicture *img,const enum ST7735_iconMods m,uint16_t b)
{
	uint16_t px = 0;
	uint16_t color;
	uint8_t currentY = 0;
	uint16_t currentX = 0;
	bool skip = false;
	#if defined(_FORCE_PROGMEM__)
		const uint16_t * imageData  = PROGMEM_read(&img->data);
		uint8_t		iWidth			= pgm_read_byte(&img->image_width);
		uint8_t		iHeight			= pgm_read_byte(&img->image_height);
		uint16_t	datalen			= pgm_read_word(&img->image_datalen);
		//uint8_t		dataDepth	= pgm_read_byte(&img->image_depth);//not yet
		//boolean		dataComp	= pgm_read_byte(&(img->image_comp);//not yet
	#else
		const uint16_t * imageData	= img->data;//image data
		uint8_t		iWidth			= img->image_width;
		uint8_t		iHeight			= img->image_height;
		uint16_t	datalen			= img->image_datalen;
		//uint8_t		dataDepth	= img->image_depth;//not yet
		//uint8_t		dataComp	= img->image_comp;//not yet
	#endif
	
	iWidth -= 1;
	iHeight -= 1;
	if (iWidth < 1 || iHeight < 1) return;//cannot be
	if (x + iWidth >= _width || y + iHeight >= _height) return;//cannot be
	
	startTransaction();
	setAddrWindow_cont(x,y,iWidth+x,iHeight+y);
	
	do { 
		#if defined(_FORCE_PROGMEM__)
			color = pgm_read_word(&imageData[px]);
		#else
			color = imageData[px];
		#endif
		if (m == TRANSPARENT){
			if (color <= b) skip = true;
		} else if (m == REPLACE){
			if (color <= b) color = _defaultBgColor;
		} else if (m == BOTH){
			if (color <= b) {
				color = _defaultBgColor;
			} else {
				color = _defaultFgColor;
			}
		}
		
		if (!skip) {
			writedata16_cont(color); 
		} else {
			setAddrWindow_cont(x+currentX,y+currentY,(iWidth+x),(iHeight+y));//constrain window
			skip = false;
		}
		
		if (currentX == iWidth){
			currentX = 0;
			currentY++;
		} else {
			currentX++;
		}
		
		px++;
		
	} while (--datalen > 0);
	
	#if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)
		writecommand_last(CMD_NOP);
	#else
		disableCS();
	#endif
	endTransaction();
}

Question? Using this library from different ESP32 tasks?

When using this library from different ESP32 tasks when using the RTOS tasks, the library appears to blocking and scrambling the screen output, probably due the fact that those tasks are using functions call to this library in parallel instead of in serial.

Is it possible to modify the library so this conflict can be resoved, by implementing some kind of queing mechanism?

Missing glcdfont.h ?

noticed that I can't get font 1 (glcdfont) working

In User_Setup.h: (as in default settings)

#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF

Code:
tft.drawString(firstLine , charColOffset,charRowOffset + hight /2 + 20); // No characters !
tft.drawString(secondLine , charColOffset,charRowOffset + hight /2 + 20*, 1); // No characters !
tft.drawString(thirdLine , charColOffset,charRowOffset + hight /2 + 20*3, 2); // Works

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.