TTGO ESP32板Arduino空项目导入AsyncTelegram2库编译失败求助
问题:Lolin TTGO ESP32导入AsyncTelegram2库后编译失败
- 使用Lolin TTGO ESP32开发板,创建仅导入各类库的空Arduino项目,导入AsyncTelegram2库后编译失败,移除该库则编译正常。
测试用.ino文件
#include <TFT_eSPI.h> // Graphics and font library #include <SPI.h> #include <sqlite3.h> #include <WiFi.h> #include <time.h> #include <WiFiUdp.h> #include <Timezone.h> // https://github.com/JChristensen/Timezone #include <NTPClient.h> #include <AsyncTelegram2.h> #include <WiFiClientSecure.h> #include "FS.h" #include "SD.h" void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
编译错误输出
警告:Timezone库声明仅适用于avr架构,可能与当前使用的esp32架构板不兼容。 In file included from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:9:0: C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h: In member function 'bool AsyncTelegram2::sendPhoto(int64_t, const char*, fs::FS&, const char*)': C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:249:9: 错误:当前作用域中未声明'File' File file = fs.open(filename, "r"); ^ C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:249:9: 提示:建议替代为: In file included from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP32.h:137:0, from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:72, from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:1: C:\Users\shark\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\FS\src/FS.h:47:7: 提示: 'fs::File' class File : public Stream ^ In file included from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:9:0: C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:250:76: 错误:当前作用域中未声明'file' bool res = sendStream(chat_id, "sendPhoto", "image/jpeg", "photo", file, file.size(), caption); ^ C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h: In member function 'bool AsyncTelegram2::sendPhoto(const TBMessage&, const char*, fs::FS&, const char*)': C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:256:9: 错误:当前作用域中未声明'File' File file = fs.open(filename, "r"); ^ C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:256:9: 提示:建议替代为: In file included from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP32.h:137:0, from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:72, from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:1: C:\Users\shark\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\FS\src/FS.h:47:7: 提示: 'fs::File' class File : public Stream ^ In file included from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:9:0: C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:257:79: 错误:当前作用域中未声明'file' bool res = sendStream(msg.chatId, "sendPhoto", "image/jpeg", "photo", file, file.size(), caption); ^ C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h: In member function 'bool AsyncTelegram2::sendPhotoByFile(int64_t, const char*, fs::FS&)': C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:294:9: 错误:当前作用域中未声明'File' File file = fs.open(filename, "r"); ^ C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:294:9: 提示:建议替代为: In file included from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP32.h:137:0, from C:\Users\shark\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:72, from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:1: C:\Users\shark\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\FS\src/FS.h:47:7: 提示: 'fs::File' class File : public Stream ^ In file included from C:\Users\shark\Documents\Arduino\test_compile\test_compile.ino:9:0: C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h:295:24: 错误:当前作用域中未声明'file' Serial.println(file.size()); ^ 发现多个与"WiFi.h"匹配的库 使用:C:\Users\shark\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi 未使用:C:\Program Files (x86)\Arduino\libraries\WiFi 发现多个与"NTPClient.h"匹配的库 使用:C:\Users\shark\Documents\Arduino\libraries\NTPClient 未使用:C:\Users\shark\Documents\Arduino\libraries\NTPClient-master 发现多个与"SD.h"匹配的库 使用:C:\Users\shark\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SD 未使用:C:\Program Files (x86)\Arduino\libraries\SD 未使用:C:\Users\shark\Documents\Arduino\libraries\SD exit status 1 编译ESP32 Dev Module板时出错。
解决方案
核心问题是AsyncTelegram2库的头文件未正确引入FS库的File类,ESP32平台下File类属于fs命名空间,编译器无法识别裸写的File。
解决步骤:
- 找到AsyncTelegram2库的
AsyncTelegram2.h文件(路径:C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h) - 两种修改方式二选一:
- 在文件开头添加FS库引用:
#include "FS.h" - 把库中所有
File替换为fs::File,明确指定命名空间
- 在文件开头添加FS库引用:
- 保存修改后重新编译项目
另外,Timezone库的警告是因为它原本为AVR架构设计,暂时不影响当前编译,若后续出现兼容问题,可替换为适配ESP32的时区库。
内容的提问来源于stack exchange,提问作者sharkyenergy
相关产品推荐
相关产品推荐

