You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

解决步骤:

  1. 找到AsyncTelegram2库的AsyncTelegram2.h文件(路径:C:\Users\shark\Documents\Arduino\libraries\AsyncTelegram2\src/AsyncTelegram2.h)
  2. 两种修改方式二选一:
    • 在文件开头添加FS库引用:#include "FS.h"
    • 把库中所有File替换为fs::File,明确指定命名空间
  3. 保存修改后重新编译项目

另外,Timezone库的警告是因为它原本为AVR架构设计,暂时不影响当前编译,若后续出现兼容问题,可替换为适配ESP32的时区库。


内容的提问来源于stack exchange,提问作者sharkyenergy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:10:34