Error for Blynk.Engent and TFT_eSPI

Hey, I’m getting a bit strange error while compilation process.
I’m using Nodemcu V3 board(ESP8266) and TFT LCD 3.5" SPI 480x320 ILI9488 diplay.

When I’m trying to include both “BlynkEdgent.h” and <TFT_eSPI.h>, I get some errors, that doesn’t make any sense for me.
Can you help me?

Error:

In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:118:32: error: 'FS' was not declared in this scope; did you mean 'fs::FS'?
  118 |   typedef std::function<String(FS &fs, const String &fName)> ETagFunction;
      |                                ^~
      |                                fs::FS
In file included from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,
                 from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:102,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:1:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/FS.h:212:7: note: 'fs::FS' declared here
  212 | class FS
      |       ^~
In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:118:32: error: 'FS' was not declared in this scope; did you mean 'fs::FS'?
  118 |   typedef std::function<String(FS &fs, const String &fName)> ETagFunction;
      |                                ^~
      |                                fs::FS
In file included from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,
                 from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:102,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:1:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/FS.h:212:7: note: 'fs::FS' declared here
  212 | class FS
      |       ^~
In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:118:60: error: template argument 1 is invalid
  118 |   typedef std::function<String(FS &fs, const String &fName)> ETagFunction;
      |                                                            ^
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:30,
                 from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:14:24: error: 'FS' was not declared in this scope; did you mean 'fs::FS'?
   14 | static String calcETag(FS &fs, const String &path) {
      |                        ^~
      |                        fs::FS
In file included from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,
                 from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:102,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:1:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/FS.h:212:7: note: 'fs::FS' declared here
  212 | class FS
      |       ^~
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:30,
                 from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:14:30: error: expected primary-expression before ',' token
   14 | static String calcETag(FS &fs, const String &path) {
      |                              ^
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:14:32: error: expected primary-expression before 'const'
   14 | static String calcETag(FS &fs, const String &path) {
      |                                ^~~~~
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:14:52: error: expected ',' or ';' before '{' token
   14 | static String calcETag(FS &fs, const String &path) {
      |                                                    ^
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:30,
                 from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:89:28: error: expected ')' before '&' token
   89 |     StaticRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header)
      |                         ~  ^
      |                            )
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:108:5: error: 'FS' does not name a type; did you mean 'SS'?
  108 |     FS _fs;
      |     ^~
      |     SS
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:123:37: error: expected ')' before '&' token
  123 |     StaticDirectoryRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header)
      |                                  ~  ^
      |                                     )
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:127:5: error: expected unqualified-id before '{' token
  127 |     {}
      |     ^
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h: In member function 'bool esp8266webserver::StaticDirectoryRequestHandler<ServerType>::handle(esp8266webserver::StaticDirectoryRequestHandler<ServerType>::WebServerType&, HTTPMethod, const String&)':
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:172:9: error: 'File' was not declared in this scope; did you mean 'fs::File'?
  172 |         File f = SRH::_fs.open(path, "r");
      |         ^~~~
      |         fs::File
In file included from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,
                 from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:102,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:1:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/FS.h:52:7: note: 'fs::File' declared here
   52 | class File : public Stream
      |       ^~~~
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:30,
                 from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:173:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  173 |         if (!f)
      |              ^
      |              fs
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:176:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  176 |         if (!f.isFile()) {
      |              ^
      |              fs
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:201:27: error: 'f' was not declared in this scope; did you mean 'fs'?
  201 |         server.streamFile(f, contentType, requestMethod);
      |                           ^
      |                           fs
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h: At global scope:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:221:32: error: expected ')' before '&' token
  221 |     StaticFileRequestHandler(FS& fs, const char* path, const char* uri, const char* cache_header)
      |                             ~  ^
      |                                )
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:224:5: error: expected unqualified-id before '{' token
  224 |     {
      |     ^
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h: In member function 'bool esp8266webserver::StaticFileRequestHandler<ServerType>::handle(esp8266webserver::StaticFileRequestHandler<ServerType>::WebServerType&, HTTPMethod, const String&)':
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:248:9: error: 'File' was not declared in this scope; did you mean 'fs::File'?
  248 |         File f = SRH::_fs.open(SRH::_path, "r");
      |         ^~~~
      |         fs::File
In file included from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,
                 from c:\Users\aslee\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:102,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:1:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/FS.h:52:7: note: 'fs::File' declared here
   52 | class File : public Stream
      |       ^~~~
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:30,
                 from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:250:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  250 |         if (!f)
      |              ^
      |              fs
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:253:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  253 |         if (!f.isFile()) {
      |              ^
      |              fs
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/detail/RequestHandlersImpl.h:265:27: error: 'f' was not declared in this scope; did you mean 'fs'?
  265 |         server.streamFile(f, mime::getContentType(SRH::_path), requestMethod);
      |                           ^
      |                           fs
In file included from C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:349,
                 from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h: At global scope:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:265:73: error: 'FS' has not been declared
  265 | void ESP8266WebServerTemplate<ServerType>::serveStatic(const char* uri, FS& fs, const char* path, const char* cache_header) {
      |                                                                         ^~
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer-impl.h:265:6: error: no declaration matches 'void esp8266webserver::ESP8266WebServerTemplate<ServerType>::serveStatic(const char*, int&, const char*, const char*)'
  265 | void ESP8266WebServerTemplate<ServerType>::serveStatic(const char* uri, FS& fs, const char* path, const char* cache_header) {
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:124:8: note: candidate is: 'void esp8266webserver::ESP8266WebServerTemplate<ServerType>::serveStatic(const char*, fs::FS&, const char*, const char*)'
  124 |   void serveStatic(const char* uri, fs::FS& fs, const char* path, const char* cache_header = NULL );
      |        ^~~~~~~~~~~
In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:93:7: note: 'class esp8266webserver::ESP8266WebServerTemplate<ServerType>' defined here
   93 | class ESP8266WebServerTemplate
      |       ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from D:\Arduino\sketch_solar\ConfigMode.h:3,
                 from D:\Arduino\sketch_solar\BlynkEdgent.h:45,
                 from D:\Arduino\sketch_solar\sketch_solar.ino:11:
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h: In instantiation of 'esp8266webserver::ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(int) [with ServerType = WiFiServer]':
D:\Arduino\sketch_solar\ConfigMode.h:60:27:   required from here
C:\Users\aslee\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:281:20: error: cannot convert 'std::nullptr_t' to 'esp8266webserver::ESP8266WebServerTemplate<WiFiServer>::ETagFunction' {aka 'int'} in initialization
  281 |   ETagFunction     _eTagFunction = nullptr;
      |                    ^~~~~~~~~~~~~

exit status 1

Compilation error: exit status 1

Code:

#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
#include <ArduinoJson.h>


#define BLYNK_FIRMWARE_VERSION        "0.1.0"
#define USE_NODE_MCU_BOARD
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""

#include "BlynkEdgent.h"

TFT_eSPI tft = TFT_eSPI();       // Invoke custom library

#define TFT_GREY 0x5AEB // New colour

const byte ledPin = 2;

BLYNK_WRITE(V1) {
  tft.setTextSize(3);
  const char* data = param.asStr();
  createTheSystem(data);
}

void setup() {
  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);

  tft.init();

  tft.setRotation(1);
  tft.fillScreen(TFT_GREY);

  tft.println("HELLO");

  delay(100);

  BlynkEdgent.begin();
}

void loop() {
  BlynkEdgent.run();
  delay(1000);   
}

void createTheSystem(const char* data) {
  DynamicJsonDocument doc(1024);
  deserializeJson(doc, data);

  tft.fillScreen(TFT_GREY);

  for(int i=0; i<9; i++){
    tft.fillCircle(doc[i]["x"],doc[i]["y"],doc[i]["mass"], TFT_GREY);
  }
  return;
}

What’s the source for this library, and what version do you have installed?

Have you made any changes to the .h file that are part of the Blynk Edgent example?

Is there a particular reason why you’re using the Blynk Edgent example for this sketch?

You’re also doing some weird stuff like using constant char pointers when I think you should be using a dynamic variable…

and adding a blocking delay in your void loop…

You may also be causing a pin conflict with this…

because GPIO2 is the default for the Blynk BOARD_LED_PIN in Settings.h of the Edgent example whne #define USE_NODE_MCU_BOARD is used…

#if defined(USE_NODE_MCU_BOARD) || defined(USE_WEMOS_D1_MINI)

  #if defined(USE_WEMOS_D1_MINI)
    #warning "This board does not have a button. Connect a button to gpio0 <> GND"
  #endif

  #define BOARD_BUTTON_PIN            0
  #define BOARD_BUTTON_ACTIVE_LOW     true

  #define BOARD_LED_PIN               2
  #define BOARD_LED_INVERSE           true
  #define BOARD_LED_BRIGHTNESS        255

Pete.

The source of the TFT_eSPI: https://github.com/Bodmer/TFT_eSPI
I’m using version 2.5.0.
I haven’t done any changes to the .h file that are part of the Blynk Edgent example.
I’m using it, as I want the device be able to connect to any WiFi I want and be able to send/receive data.
The sketch is a bit a mess, as it’s a test sketch. Thank you for the comment on the char variable.

I deleted, but the problem still remains.

const byte ledPin = 2;

It occurs only if I use

#include <TFT_eSPI.h>

You can achieve that without using Edgent.

The Edgent example provides two pieces of functionality…

  1. dynamic provisioning of WiFi credentials and the Blynk Auth token, meaning that these don’t have to be hard-coded into the sketch
  2. the ability to do OTA updates via Blynk.Air. This functionality can easily be added to any Blynk sketch without the need to use Edgent.

Pete.

Is there a way to do so without Edgent? As I don’t find the solution.

No, unless you use WiFi Manager - which I wouldn’t recommend, but when I asked you why you were using Edgent you didn’t mention that as one of your criteria.

Pete.

Sorry, I didn’t get it correctly.
So, what can be the problem with the Edgent and TFT_eSPI libraries?