/**
* @file display.ino
* @author SeanKwok (shaoxiang@m5stack.com)
* @brief M5CoreS3 Display Test
* @version 0.1
* @date 2023-12-18
*
*
* @Hardwares: M5CoreS3
* @Platform Version: Arduino M5Stack Board Manager v2.0.7
* @Dependent Library:
* M5GFX: https://github.com/m5stack/M5GFX
* M5Unified: https://github.com/m5stack/M5Unified
* M5CoreS3: https://github.com/m5stack/M5CoreS3
*/
#include "M5CoreS3.h"
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
// Configure the name and password of the connected wifi and your MQTT Serve
// host. 配置所连接wifi的名称、密码以及你MQTT服务器域名
const char* ssid = "lemon_2.4";
const char* password = "shengaqiao";
const char* mqtt_server = "192.168.50.233";
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
// 新增:记录上次重启的时间
unsigned long lastRebootTime = 0;
// 记录上次收到 MQTT 消息的时间
unsigned long lastMQTTMsgTime = 0;
//用来做显示格式化的一个数组
char TXXX[50];
//记录闪一次温度的一个值,用来解决屏闪问题的
int lastTemperature = 0;
void setupWifi();
void callback(char* topic, byte* payload, unsigned int length);
void reConnect();
void setup() {
auto cfg = M5.config();
CoreS3.begin(cfg);
setupWifi();
client.setServer(mqtt_server,1883); // Sets the server details. 配置所连接的服务器
client.setCallback(callback); // Sets the message callback function. 设置消息回调函数
// 初始化上次重启时间
lastRebootTime = millis();
}
void loop() {
if (!client.connected()) {
reConnect();
}
client.loop(); // This function is called periodically to allow clients to
// process incoming messages and maintain connections to the
// server.
// 定期调用此函数,以允许主机处理传入消息并保持与服务器的连接
unsigned long now = millis(); // Obtain the host startup duration. 获取主机开机时长
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
}
// 如果 1 分钟内没有收到 MQTT 消息,则休眠
if (now - lastMQTTMsgTime > 60000) {
// 在此处添加休眠的相关代码
Serial.println("Going to sleep due to no MQTT messages for 1 minutes.");
// 在此处调用相关的关机函数或执行关机操作
M5.Display.sleep();
}
// 新增:每 1 小时(3600000 毫秒)重启设备
if (now - lastRebootTime > 3600000 ) {
ESP.restart();
}
}
void setupWifi() {
delay(10);
CoreS3.Lcd.print("Connecting to Network...");
Serial.printf("Connecting to %s", ssid);
WiFi.mode(WIFI_STA); // Set the mode to WiFi station mode. 设置模式为WIFI站模式
WiFi.begin(ssid, password); // Start Wifi connection. 开始wifi连接
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.printf("\nSuccess\n");
CoreS3.Lcd.println("Success");
CoreS3.Lcd.println("For communication information see serial port");
CoreS3.Lcd.fillScreen(BLACK); // Set BLACK to the background color. 将黑色设置为底色
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
// 将 payload 转换为整数
int payloadValue = atoi((const char*)payload);
//如果新的值与老的值不等于,才需要去更新
if(payloadValue != lastTemperature){
//先用黑色的字体把上一次的温度数值直接擦写掉
CoreS3.Lcd.setRotation(1);
CoreS3.Lcd.setCursor(40, 40);
CoreS3.Lcd.setTextColor(BLACK);
CoreS3.Lcd.setTextSize(20);
sprintf(TXXX,"%02d",lastTemperature);
CoreS3.Lcd.print(TXXX);
//将最新的值赋给lastTemperature
lastTemperature = payloadValue;
M5.Display.wakeup();
CoreS3.Lcd.setRotation(1);
//CoreS3.Lcd.fillScreen(BLACK); // Set BLACK to the background color. 将黑色设置为底色
CoreS3.Lcd.setCursor(40, 40);
// 根据 payload 值设置字体颜色
if (payloadValue < 50) {
CoreS3.Lcd.setTextColor(GREEN); // 设置为绿色
} else if (payloadValue >= 50 && payloadValue < 70) {
CoreS3.Lcd.setTextColor(YELLOW); // 设置为黄色
} else {
CoreS3.Lcd.setTextColor(RED); // 设置为绿色
}
CoreS3.Lcd.setTextSize(20); // Set the font size to 2. 设置字体大小为2
sprintf(TXXX,"%02d",payloadValue); // XX
Serial.print(payloadValue);
CoreS3.Lcd.print(TXXX);
Serial.println();
}
// 收到回调时更新时间
lastMQTTMsgTime = millis();
}
void reConnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID. 创建一个随机的客户端ID
String clientId = "M5Stack-";
clientId += String(random(0xffff), HEX);
// Attempt to connect. 尝试重新连接
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// ... and resubscribe. 重新订阅话题
client.subscribe("lemon_gpu_temp");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
delay(5000);
}
}
}
用以上MQTT作为一个起手式的模板
/**
* @file sdcard.ino
* @author SeanKwok (shaoxiang@m5stack.com)
* @brief M5CoreS3 MicroSD Card Test
* @version 0.1
* @date 2023-12-25
*
*
* @Hardwares: M5CoreS3
* @Platform Version: Arduino M5Stack Board Manager v2.0.9
* @Dependent Library:
* M5GFX: https://github.com/m5stack/M5GFX
* M5Unified: https://github.com/m5stack/M5Unified
* M5CoreS3: https://github.com/m5stack/M5CoreS3
*/
#include <M5CoreS3.h>
#include <SPI.h>
#include <SD.h>
#define SD_SPI_SCK_PIN 36
#define SD_SPI_MISO_PIN 35
#define SD_SPI_MOSI_PIN 37
#define SD_SPI_CS_PIN 4
void listDir(fs::FS &fs, const char *dirname, uint8_t levels);
void createDir(fs::FS &fs, const char *path);
void removeDir(fs::FS &fs, const char *path);
void readFile(fs::FS &fs, const char *path);
void writeFile(fs::FS &fs, const char *path, const char *message);
void appendFile(fs::FS &fs, const char *path, const char *message);
void renameFile(fs::FS &fs, const char *path1, const char *path2);
void deleteFile(fs::FS &fs, const char *path);
void testFileIO(fs::FS &fs, const char *path);
M5Canvas canvas(&CoreS3.Display);
void printf_log(const char *format, ...);
void println_log(const char *str);
void setup() {
CoreS3.begin();
Serial.begin(115200);
println_log("\nHello From SD card demo program");
canvas.setColorDepth(1); // mono color
canvas.createSprite(CoreS3.Display.width(), CoreS3.Display.height());
canvas.setPaletteColor(1, GREEN);
canvas.setTextSize((float)canvas.width() / 160);
canvas.setTextScroll(true);
// SD Card Initialization
SPI.begin(SD_SPI_SCK_PIN, SD_SPI_MISO_PIN, SD_SPI_MOSI_PIN, SD_SPI_CS_PIN);
if (!SD.begin(SD_SPI_CS_PIN, SPI, 25000000)) {
// Print a message if the SD card initialization
// fails orif the SD card does not exist.
// 如果SD卡初始化失败或者SD卡不存在,则打印消息.
println_log("Card failed, or not present");
while (1)
;
}
uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE) {
println_log("No SD card attached");
return;
}
println_log("SD Card Type: ");
if (cardType == CARD_MMC) {
println_log("MMC");
} else if (cardType == CARD_SD) {
println_log("SDSC");
} else if (cardType == CARD_SDHC) {
println_log("SDHC");
} else {
println_log("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
printf_log("SD Card Size: %lluMB\n", cardSize);
//listDir(SD, "/", 0);
//createDir(SD, "/mydir");
//listDir(SD, "/", 0);
//removeDir(SD, "/mydir");
//listDir(SD, "/", 2);
//writeFile(SD, "/hello.txt", "Hello ");
//appendFile(SD, "/hello.txt", "World!\n");
//readFile(SD, "/hello.txt");
//deleteFile(SD, "/foo.txt");
//renameFile(SD, "/hello.txt", "/foo.txt");
//readFile(SD, "/foo.txt");
//testFileIO(SD, "/test.txt");
printf_log("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
printf_log("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
}
void loop() {
}
void listDir(fs::FS &fs, const char *dirname, uint8_t levels) {
printf_log("Listing directory: %s\n", dirname);
File root = fs.open(dirname);
if (!root) {
println_log("Failed to open directory");
return;
}
if (!root.isDirectory()) {
println_log("Not a directory");
return;
}
File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print(" DIR : ");
println_log(file.name());
if (levels) {
listDir(fs, file.path(), levels - 1);
}
} else {
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
println_log(String(file.size()).c_str());
}
file = root.openNextFile();
}
}
void createDir(fs::FS &fs, const char *path) {
printf_log("Creating Dir: %s\n", path);
if (fs.mkdir(path)) {
println_log("Dir created");
} else {
println_log("mkdir failed");
}
}
void removeDir(fs::FS &fs, const char *path) {
printf_log("Removing Dir: %s\n", path);
if (fs.rmdir(path)) {
println_log("Dir removed");
} else {
println_log("rmdir failed");
}
}
void readFile(fs::FS &fs, const char *path) {
printf_log("Reading file: %s\n", path);
File file = fs.open(path);
if (!file) {
println_log("Failed to open file for reading");
return;
}
Serial.print("Read from file: ");
while (file.available()) {
Serial.write(file.read());
}
file.close();
}
void writeFile(fs::FS &fs, const char *path, const char *message) {
printf_log("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if (!file) {
println_log("Failed to open file for writing");
return;
}
if (file.print(message)) {
println_log("File written");
} else {
println_log("Write failed");
}
file.close();
}
void appendFile(fs::FS &fs, const char *path, const char *message) {
printf_log("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if (!file) {
println_log("Failed to open file for appending");
return;
}
if (file.print(message)) {
println_log("Message appended");
} else {
println_log("Append failed");
}
file.close();
}
void renameFile(fs::FS &fs, const char *path1, const char *path2) {
printf_log("Renaming file %s to %s\n", path1, path2);
if (fs.rename(path1, path2)) {
println_log("File renamed");
} else {
println_log("Rename failed");
}
}
void deleteFile(fs::FS &fs, const char *path) {
printf_log("Deleting file: %s\n", path);
if (fs.remove(path)) {
println_log("File deleted");
} else {
println_log("Delete failed");
}
}
void testFileIO(fs::FS &fs, const char *path) {
File file = fs.open(path);
static uint8_t buf[512];
size_t len = 0;
uint32_t start = millis();
uint32_t end = start;
if (file) {
len = file.size();
size_t flen = len;
start = millis();
while (len) {
size_t toRead = len;
if (toRead > 512) {
toRead = 512;
}
file.read(buf, toRead);
len -= toRead;
}
end = millis() - start;
printf_log("%u bytes read for %lu ms\n", flen, end);
file.close();
} else {
println_log("Failed to open file for reading");
}
file = fs.open(path, FILE_WRITE);
if (!file) {
println_log("Failed to open file for writing");
return;
}
size_t i;
start = millis();
for (i = 0; i < 2048; i++) {
file.write(buf, 512);
}
end = millis() - start;
printf_log("%u bytes written for %lu ms\n", 2048 * 512, end);
file.close();
}
void printf_log(const char *format, ...) {
char buf[256];
va_list args;
va_start(args, format);
vsnprintf(buf, 256, format, args);
va_end(args);
Serial.print(buf);
canvas.printf(buf);
canvas.pushSprite(0, 0);
}
void println_log(const char *str) {
Serial.println(str);
canvas.println(str);
canvas.pushSprite(0, 0);
}
看了一下这个是去年年底的例子,应该可以的

看了一下和图形化的init的参数对的上的
但是就是这个IDE太不给力了
慢的要死

又是一个看不懂的报错
之前其实遇到过这个报错的
原因就是端口被占用了
然后记得需要长按REST键(方块下方有个小的循环的标志的哪个按钮),内部绿色LED灯亮起的时候就进入了烧录模式
这时候再来

这次上传就OK了

还有一件事就是
它不会自动重启M5,而需要手动按下reset的开关才可以
Serial.begin(115200);
Serial.print("Hello From SD card demo program");串口打印的问题,记得需要先设置好波特率,否则根本跟不到任何输出

起码能看到正确的输出了对吧
SD的类型是SDHC,鬼知道是啥

接着是打开listDir函数,看看SD卡上的文件它是否能列齐全

OK,没有问题
接下来是打开文件并显示

不行,这个插件根本就运行不起来,没法配置板子和库
草
https://github.com/m5stack/M5GFX/blob/master/examples/Basic/drawImageData/drawImageData.ino
接着我们看一下M5GFX库咋干的
#include <Arduino.h>
#include <M5GFX.h>
M5GFX display;
void setup()
{
display.begin();
}先加入引用和setup
display.drawPngFile(SD, "/Face_1.png", 0, 0);然后再加一句画PNG文件,齐活儿
记得sd卡要小于16G以及是FAT32哈,上一篇文章里有写的
核心库在这里:
https://github.com/m5stack/M5CoreS3

Compiling sketch...
"C:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\tools\\xtensa-esp32s3-elf-gcc\\esp-2021r2-patch5-8.4.0/bin/xtensa-esp32s3-elf-g++" -DHAVE_CONFIG_H "-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE "-DIDF_VER=\"v4.4.6-dirty\"" -DESP_PLATFORM -D_POSIX_READER_WRITER_LOCKS "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/newlib/platform_include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freertos/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freertos/include/esp_additions/freertos" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freertos/port/xtensa/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freertos/include/esp_additions" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hw_support/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hw_support/include/soc" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hw_support/include/soc/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3/private_include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/heap/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/log/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/lwip/include/apps" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/lwip/include/apps/sntp" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/lwip/lwip/src/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/lwip/port/esp32/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/lwip/port/esp32/include/arch" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/soc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/soc/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/soc/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/hal/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/hal/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/hal/platform_port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_rom/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_rom/include/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_rom/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_system/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_system/port/soc" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_system/port/public_compat" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/xtensa/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/xtensa/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/driver/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/driver/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_pm/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_ringbuf/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/efuse/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/efuse/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/vfs/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_wifi/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_event/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_netif/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_eth/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/tcpip_adapter/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_phy/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_phy/esp32s3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_ipc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/app_trace/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_timer/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/mbedtls/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/mbedtls/mbedtls/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/mbedtls/esp_crt_bundle/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/app_update/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/spi_flash/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bootloader_support/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/nvs_flash/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/pthread/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_gdbstub/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_gdbstub/xtensa" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_gdbstub/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espcoredump/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espcoredump/include/port/xtensa" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/wpa_supplicant/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/wpa_supplicant/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/wpa_supplicant/esp_supplicant/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/ieee802154/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/console" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/asio/asio/asio/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/asio/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/common/osi/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/include/esp32c3/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/common/api/include/api" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/blufi/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/host/bluedroid/api/include/api" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/storage" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/btc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/client/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/server/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/core/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/models/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/cbor/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/unity/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/unity/unity/src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/cmock/CMock/src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/coap/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/coap/libcoap/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/nghttp/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/nghttp/nghttp2/lib/includes" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-tls" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-tls/esp-tls-crypto" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_adc_cal/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_hid/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/tcp_transport/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_http_client/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_http_server/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_https_ota/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_https_server/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_lcd/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_lcd/interface" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/protobuf-c/protobuf-c" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/protocomm/include/common" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/protocomm/include/security" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/protocomm/include/transports" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/mdns/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_local_ctrl/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/sdmmc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_serial_slave_link/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_websocket_client/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/expat/expat/expat/lib" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/expat/port/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/wear_levelling/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/fatfs/diskio" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/fatfs/vfs" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/fatfs/src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freemodbus/freemodbus/common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/idf_test/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/idf_test/include/esp32s3" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/jsmn/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/json/cJSON" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/libsodium/libsodium/src/libsodium/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/libsodium/port_include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/mqtt/esp-mqtt/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/openssl/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/perfmon/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/spiffs/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/usb/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/ulp/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/wifi_provisioning/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/rmaker_common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_diagnostics/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/rtc_store/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_insights/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/json_parser/upstream/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/json_parser/upstream" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/json_generator/upstream" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_schedule/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp_secure_cert_mgr/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_rainmaker/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/gpio_button/button/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/qrcode/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/ws2812_led" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/freertos/include/freertos" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/arduino_tinyusb/tinyusb/src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/arduino_tinyusb/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp_littlefs/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/tool" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/typedef" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/image" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/math" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/nn" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/layer" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/detect" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp-dl/include/model_zoo" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp32-camera/driver/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/esp32-camera/conversions/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dotprod/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/mem/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/hann/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_harris/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/nuttall/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/flat_top/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/iir/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fir/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/add/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sub/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mul/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/addc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mulc/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sqrt/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fft/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dct/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/conv/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/common/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/include/fb_gfx/include" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2/tools/sdk/esp32s3/qio_qspi/include" -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu++11 -fexceptions -fno-rtti -MMD -c -w -Os -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_M5STACK_CORES3 -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"M5STACK_CORES3\"" "-DARDUINO_VARIANT=\"m5stack_cores3\"" -DARDUINO_PARTITION_app3M_fat9M_16MB -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 "@C:\\Users\\lemon\\AppData\\Local\\Temp\\arduino\\sketches\\3E35D0F9798A316FBC70A51C06F0454F/build_opt.h" "@C:\\Users\\lemon\\AppData\\Local\\Temp\\arduino\\sketches\\3E35D0F9798A316FBC70A51C06F0454F/file_opts" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2\\cores\\esp32" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2\\variants\\m5stack_cores3" "-Ie:\\development\\Arduino\\libraries\\M5CoreS3\\src" "-Ie:\\development\\Arduino\\libraries\\M5Unified\\src" "-Ie:\\development\\Arduino\\libraries\\M5GFX\\src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2\\libraries\\SPI\\src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2\\libraries\\SD\\src" "-IC:\\Users\\lemon\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\2.1.2\\libraries\\FS\\src" "C:\\Users\\lemon\\AppData\\Local\\Temp\\arduino\\sketches\\3E35D0F9798A316FBC70A51C06F0454F\\sketch\\sdcard.ino.cpp" -o "C:\\Users\\lemon\\AppData\\Local\\Temp\\arduino\\sketches\\3E35D0F9798A316FBC70A51C06F0454F\\sketch\\sdcard.ino.cpp.o"
In file included from e:\development\Arduino\libraries\M5GFX\src/M5GFX.h:22,
from e:\development\Arduino\libraries\M5Unified\src/M5Unified.hpp:19,
from e:\development\Arduino\libraries\M5Unified\src/M5Unified.h:5,
from e:\development\Arduino\libraries\M5CoreS3\src/M5CoreS3.h:4,
from E:\development\Arduino\sdcard\sdcard.ino:17:
e:\development\Arduino\libraries\M5GFX\src/lgfx/v1/LGFXBase.hpp: In instantiation of 'bool lgfx::v1::LGFXBase::drawPngFile(T&, const char*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, float, float, lgfx::v1::datum::datum_t) [with T = fs::SDFS; int32_t = int; lgfx::v1::datum::datum_t = lgfx::v1::textdatum::textdatum_t]':
E:\development\Arduino\sdcard\sdcard.ino:103:48: required from here
e:\development\Arduino\libraries\M5GFX\src/lgfx/v1/LGFXBase.hpp:949:23: error: cannot declare variable 'file' to be of abstract type 'lgfx::v1::DataWrapperT<fs::SDFS>'
DataWrapperT<T> file ( &fs ); \
^~~~
e:\development\Arduino\libraries\M5GFX\src/lgfx/v1/LGFXBase.hpp:957:5: note: in expansion of macro 'LGFX_FUNCTION_GENERATOR'
LGFX_FUNCTION_GENERATOR(drawPng, draw_png)
^~~~~~~~~~~~~~~~~~~~~~~
In file included from e:\development\arduino\libraries\m5gfx\src\lgfx\v1\platforms\esp32/common.hpp:20,
from e:\development\arduino\libraries\m5gfx\src\lgfx\v1\platforms\common.hpp:22,
from e:\development\Arduino\libraries\M5GFX\src/lgfx/v1/platforms/esp32/Bus_SPI.hpp:57,
from e:\development\Arduino\libraries\M5GFX\src/lgfx/v1/platforms/device.hpp:48,
from e:\development\Arduino\libraries\M5GFX\src/M5GFX.h:19,
from e:\development\Arduino\libraries\M5Unified\src/M5Unified.hpp:19,
from e:\development\Arduino\libraries\M5Unified\src/M5Unified.h:5,
from e:\development\Arduino\libraries\M5CoreS3\src/M5CoreS3.h:4,
from E:\development\Arduino\sdcard\sdcard.ino:17:
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:91:10: note: because the following virtual functions are pure within 'lgfx::v1::DataWrapperT<fs::SDFS>':
struct DataWrapperT : public DataWrapper {
^~~~~~~~~~~~
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:72:17: note: 'virtual int lgfx::v1::DataWrapper::read(uint8_t*, uint32_t)'
virtual int read(uint8_t *buf, uint32_t len) = 0;
^~~~
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:74:18: note: 'virtual void lgfx::v1::DataWrapper::skip(int32_t)'
virtual void skip(int32_t offset) = 0;
^~~~
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:75:18: note: 'virtual bool lgfx::v1::DataWrapper::seek(uint32_t)'
virtual bool seek(uint32_t offset) = 0;
^~~~
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:76:18: note: 'virtual void lgfx::v1::DataWrapper::close()'
virtual void close(void) = 0;
^~~~~
e:\development\arduino\libraries\m5gfx\src\lgfx\v1\misc\datawrapper.hpp:77:21: note: 'virtual int32_t lgfx::v1::DataWrapper::tell()'
virtual int32_t tell(void) = 0;
^~~~
Multiple libraries were found for "SD.h"
Used: C:\Users\lemon\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SD
Not used: C:\Users\lemon\AppData\Local\Arduino15\libraries\SD
Using library M5CoreS3 at version 1.0.0 in folder: E:\development\Arduino\libraries\M5CoreS3
Using library M5Unified at version 0.1.17 in folder: E:\development\Arduino\libraries\M5Unified
Using library M5GFX at version 0.1.17 in folder: E:\development\Arduino\libraries\M5GFX
Using library SPI at version 2.0.0 in folder: C:\Users\lemon\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SPI
Using library SD at version 2.0.0 in folder: C:\Users\lemon\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SD
Using library FS at version 2.0.0 in folder: C:\Users\lemon\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\FS
exit status 1
Compilation error: exit status 1然后就是编译报错了
https://github.com/m5stack/M5GFX/issues/79

我擦,和引入顺序有关系?

/**
* @file sdcard.ino
* @author SeanKwok (shaoxiang@m5stack.com)
* @brief M5CoreS3 MicroSD Card Test
* @version 0.1
* @date 2023-12-25
*
*
* @Hardwares: M5CoreS3
* @Platform Version: Arduino M5Stack Board Manager v2.0.9
* @Dependent Library:
* M5GFX: https://github.com/m5stack/M5GFX
* M5Unified: https://github.com/m5stack/M5Unified
* M5CoreS3: https://github.com/m5stack/M5CoreS3
*/
#include <SPI.h>
#include <SD.h>
#include <M5CoreS3.h>
#define SD_SPI_SCK_PIN 36
#define SD_SPI_MISO_PIN 35
#define SD_SPI_MOSI_PIN 37
#define SD_SPI_CS_PIN 4
void listDir(fs::FS &fs, const char *dirname, uint8_t levels);
void createDir(fs::FS &fs, const char *path);
void removeDir(fs::FS &fs, const char *path);
void readFile(fs::FS &fs, const char *path);
void writeFile(fs::FS &fs, const char *path, const char *message);
void appendFile(fs::FS &fs, const char *path, const char *message);
void renameFile(fs::FS &fs, const char *path1, const char *path2);
void deleteFile(fs::FS &fs, const char *path);
void testFileIO(fs::FS &fs, const char *path);
M5Canvas canvas(&CoreS3.Display);
M5GFX display = CoreS3.Display;
void printf_log(const char *format, ...);
void println_log(const char *str);
void setup() {
CoreS3.begin();
Serial.begin(115200);
println_log("\nHello From SD card demo program");
display.begin();
canvas.setColorDepth(1); // mono color
canvas.createSprite(CoreS3.Display.width(), CoreS3.Display.height());
canvas.setPaletteColor(1, GREEN);
canvas.setTextSize((float)canvas.width() / 160);
canvas.setTextScroll(true);
// SD Card Initialization
SPI.begin(SD_SPI_SCK_PIN, SD_SPI_MISO_PIN, SD_SPI_MOSI_PIN, SD_SPI_CS_PIN);
if (!SD.begin(SD_SPI_CS_PIN, SPI, 25000000)) {
// Print a message if the SD card initialization
// fails orif the SD card does not exist.
// 如果SD卡初始化失败或者SD卡不存在,则打印消息.
println_log("Card failed, or not present");
while (1)
;
}
uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE) {
println_log("No SD card attached");
return;
}
println_log("SD Card Type: ");
if (cardType == CARD_MMC) {
println_log("MMC");
} else if (cardType == CARD_SD) {
println_log("SDSC");
} else if (cardType == CARD_SDHC) {
println_log("SDHC");
} else {
println_log("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
printf_log("SD Card Size: %lluMB\n", cardSize);
listDir(SD, "/", 0);
//createDir(SD, "/mydir");
//listDir(SD, "/", 0);
//removeDir(SD, "/mydir");
//listDir(SD, "/", 2);
//writeFile(SD, "/hello.txt", "Hello ");
//appendFile(SD, "/hello.txt", "World!\n");
//readFile(SD, "/hello.txt");
//deleteFile(SD, "/foo.txt");
//renameFile(SD, "/hello.txt", "/foo.txt");
//readFile(SD, "/foo.txt");
//testFileIO(SD, "/test.txt");
printf_log("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
printf_log("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
display.drawPngFile(SD, "/Face_1.png", 0, 0);
}
void loop() {
}
void listDir(fs::FS &fs, const char *dirname, uint8_t levels) {
printf_log("Listing directory: %s\n", dirname);
File root = fs.open(dirname);
if (!root) {
println_log("Failed to open directory");
return;
}
if (!root.isDirectory()) {
println_log("Not a directory");
return;
}
File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print(" DIR : ");
println_log(file.name());
if (levels) {
listDir(fs, file.path(), levels - 1);
}
} else {
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
println_log(String(file.size()).c_str());
}
file = root.openNextFile();
}
}
void createDir(fs::FS &fs, const char *path) {
printf_log("Creating Dir: %s\n", path);
if (fs.mkdir(path)) {
println_log("Dir created");
} else {
println_log("mkdir failed");
}
}
void removeDir(fs::FS &fs, const char *path) {
printf_log("Removing Dir: %s\n", path);
if (fs.rmdir(path)) {
println_log("Dir removed");
} else {
println_log("rmdir failed");
}
}
void readFile(fs::FS &fs, const char *path) {
printf_log("Reading file: %s\n", path);
File file = fs.open(path);
if (!file) {
println_log("Failed to open file for reading");
return;
}
Serial.print("Read from file: ");
while (file.available()) {
Serial.write(file.read());
}
file.close();
}
void writeFile(fs::FS &fs, const char *path, const char *message) {
printf_log("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if (!file) {
println_log("Failed to open file for writing");
return;
}
if (file.print(message)) {
println_log("File written");
} else {
println_log("Write failed");
}
file.close();
}
void appendFile(fs::FS &fs, const char *path, const char *message) {
printf_log("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if (!file) {
println_log("Failed to open file for appending");
return;
}
if (file.print(message)) {
println_log("Message appended");
} else {
println_log("Append failed");
}
file.close();
}
void renameFile(fs::FS &fs, const char *path1, const char *path2) {
printf_log("Renaming file %s to %s\n", path1, path2);
if (fs.rename(path1, path2)) {
println_log("File renamed");
} else {
println_log("Rename failed");
}
}
void deleteFile(fs::FS &fs, const char *path) {
printf_log("Deleting file: %s\n", path);
if (fs.remove(path)) {
println_log("File deleted");
} else {
println_log("Delete failed");
}
}
void testFileIO(fs::FS &fs, const char *path) {
File file = fs.open(path);
static uint8_t buf[512];
size_t len = 0;
uint32_t start = millis();
uint32_t end = start;
if (file) {
len = file.size();
size_t flen = len;
start = millis();
while (len) {
size_t toRead = len;
if (toRead > 512) {
toRead = 512;
}
file.read(buf, toRead);
len -= toRead;
}
end = millis() - start;
printf_log("%u bytes read for %lu ms\n", flen, end);
file.close();
} else {
println_log("Failed to open file for reading");
}
file = fs.open(path, FILE_WRITE);
if (!file) {
println_log("Failed to open file for writing");
return;
}
size_t i;
start = millis();
for (i = 0; i < 2048; i++) {
file.write(buf, 512);
}
end = millis() - start;
printf_log("%u bytes written for %lu ms\n", 2048 * 512, end);
file.close();
}
void printf_log(const char *format, ...) {
char buf[256];
va_list args;
va_start(args, format);
vsnprintf(buf, 256, format, args);
va_end(args);
Serial.print(buf);
canvas.printf(buf);
canvas.pushSprite(0, 0);
}
void println_log(const char *str) {
Serial.println(str);
canvas.println(str);
canvas.pushSprite(0, 0);
}
卧槽,最终的可运行程序竟然就是这样,朴实无华的一个小技巧啊
