ESP8266存储日期温湿度至SD卡遇编译错误:'class SDClass'无cardType成员
ESP8266 SD卡存储数据编译错误及代码优化方案
核心编译错误解决
错误'class SDClass' has no member named 'cardType'是因为ESP8266的SD库不支持cardType()方法,这个方法是ESP32 SD库特有的。你需要移除卡类型检测的相关代码,改用ESP8266兼容的方式判断SD卡是否存在。
代码中的其他问题及优化
你的代码还存在几处冗余和潜在问题:
- 重复调用
SD.begin(SD_CS)三次,初始化一次即可 - 文件打开后,若文件不存在的情况下调用
file.close()会触发错误(此时file是无效句柄) - 存在拼写错误:
doens't→doesn't
修正后的完整代码
void setup () { Serial.begin(115200); dht.begin(); Rtc.Begin(); // 初始化SD卡(仅调用一次) Serial.println("Initializing SD card..."); if(!SD.begin(SD_CS)) { Serial.println("Card Mount Failed / No SD card attached"); return; } // 尝试打开文件 File file = SD.open("/data.txt"); if(!file) { Serial.println("File doesn't exist"); Serial.println("Creating file..."); writeFile(SD, "/data.txt", "Date, Time, Temperature, Humidity \r\n"); } else { Serial.println("File already exists"); file.close(); // 仅当文件成功打开时才关闭 } }
补充说明
- 如果你需要确认SD卡的可用性,
SD.begin()返回的布尔值足够判断:返回false即表示卡未挂载或不存在 - 确保
writeFile函数已正确实现,示例实现如下(如果你的代码里没有的话):
void writeFile(fs::FS &fs, const char * path, const char * message) { File file = fs.open(path, FILE_APPEND); if(!file){ Serial.println("Failed to open file for writing"); return; } if(file.print(message)){ Serial.println("File written"); } else { Serial.println("Write failed"); } file.close(); }
内容的提问来源于stack exchange,提问作者Denzel
相关产品推荐
相关产品推荐

