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

ESP32如何从SPIFFS文件读取值设置TIME_TO_SLEEP?

解决从SPIFFS读取数值设置ESP32深度睡眠时间的问题

错误原因

你之前用#define TIME_TO_SLEEP yourInputString = readFile(SPIFFS, "/inputString.txt");的写法完全错误,因为#define是预编译宏,仅做文本替换,不能用来执行变量赋值或函数调用,所以编译器找不到yourInputString的定义,才会报出那个错误。

正确实现步骤

1. 实现SPIFFS文件读取函数

如果还没有readFile函数,先添加以下代码:

String readFile(fs::FS &fs, const char * path){
  Serial.printf("Reading file: %s\r\n", path);
  File file = fs.open(path);
  if(!file || file.isDirectory()){
    Serial.println("- failed to open file for reading");
    return "";
  }
  String fileContent;
  while(file.available()){
    fileContent += char(file.read());
  }
  file.close();
  return fileContent;
}

2. 修改深度睡眠逻辑

把原来直接用宏定义的地方,改成动态读取文件内容并转换为整数,注意esp_sleep_enable_timer_wakeup的参数是微秒,需要将读取到的秒数乘以1000000:

server.on("/L", HTTP_GET, [] (AsyncWebServerRequest *request) {
  digitalWrite(led_gpio, LOW);  // GET /L turns the LED off
  
  // 读取SPIFFS文件中的睡眠时间数值
  String sleepTimeStr = readFile(SPIFFS, "/inputString.txt");
  // 转换为整数,设置默认值5(防止文件读取失败)
  int TIME_TO_SLEEP = sleepTimeStr.toInt();
  if(TIME_TO_SLEEP <= 0) {
    TIME_TO_SLEEP = 5;
  }
  
  // 设置深度睡眠时间(转换为微秒)
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * 1000000ULL);
  esp_deep_sleep_start();

  request->send(200, "text/plain", "ok");
});

3. 额外注意事项

  • 确保在setup函数中正确挂载SPIFFS,示例代码:if(!SPIFFS.begin(true)) { Serial.println("SPIFFS Mount Failed"); return; }
  • /inputString.txt文件内只能存放纯数字(如30),不要有多余空格或换行,否则toInt()可能读取错误
  • 添加默认值判断,避免文件读取失败时程序异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:56:27