乐鑫技术交流
直播中

李秀兰

7年用户 1434经验值
私信 关注
[问答]

利用arduino IDE 1.8.9做ESP32的开发,无法将资料写入SD卡中是为什么?

#include
#include
#include
BluetoothSerial SerialBT;
int key;
#define SD_CS 34



void setup()
{
  Serial.begin(115200);
  SerialBT.begin("ESP32");
  

  SD.begin(SD_CS);  
  if(!SD.begin(SD_CS)) {
    Serial.println("Card Mount Failed");
    return;
  }
  uint8_t cardType = SD.cardType();
  if(cardType == CARD_NONE) {
    Serial.println("No SD card attached");
    return;
  }
  Serial.println("Initializing SD card...");
  if (!SD.begin(SD_CS)) {
    Serial.println("ERROR - SD card initialization failed!");
    return;    // init failed
  }

  // If the data.txt file doesn't exist
  // Create a file on the SD card and write the data labels
  File file = SD.open("data.txt");
  if(!file) {
    Serial.println("File doens't exist");
    Serial.println("Creating file...");
    writeFile(SD, "data.txt", "data rn");
  }
  else {
    Serial.println("File already exists");  
  }
  file.close();




}

void loop()
{

  int value =0;
  
  int D0 = digitalRead(2);
  int D1 = digitalRead(15);
  int D2 = digitalRead(4);
  int D3 = digitalRead(16);
  int D4 = digitalRead(17);
  int D5 = digitalRead(5);
  int D6 = digitalRead(18);
  int D7 = digitalRead(19);
  char val[256];
  snprintf(val , sizeof(val) , "%d %d %d %d %d %d %d %d",
           D0,D1,D2,D3,D4,D5,D6,D7);
   
   Serial.println(val);

  byte Date[8];
  Date[0] = D0;
  Date[1] = D1;
  Date[2] = D2;
  Date[3] = D3;
  Date[4] = D4;
  Date[5] = D5;
  Date[6] = D6;
  Date[7] = D7;

  readFromAPP();   
  if(key == 65)
  {
    SerialBT.write('B');
    for(int i=0;i<8;i++)
    {
      SerialBT.write(Date[i]);
      delay(10);
   
    }
    key = 0;
   
  }
  delay(100);
  appendFile(SD, "data.txt", val);
}



void readFromAPP()
{
  while (SerialBT.available() > 0)
  {
   key = SerialBT.read();
  }
}

void appendFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Appending to file: %sn", path);

  File file = fs.open(path, FILE_APPEND);
  if(!file) {
    Serial.println("Failed to open file for appending");
    return;
  }
  if(file.print(message)) {
    Serial.println("Message appended");
  } else {
    Serial.println("Append failed");
  }
  file.close();
}

void writeFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Writing file: %sn", path);

  File file = fs.open(path, FILE_WRITE);
  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();
}

我是位初学者利用arduino IDE 1.8.9做ESP32的开发
以上是我的程式码我在製作将8个脚位的状态透过蓝芽传输并用SD卡纪录
我一直无法将资料【val】写入我的SD卡中
我将模组CS脚位连接到开发版34脚内
程式编译没问题但我一直没办法将我的资料【val】写入SD卡内
我想知道为什么及如何修改
                                                                                                                                                                       

回帖(1)

美信电子

2024-6-26 17:33:34
在您的代码中,我注意到了一些可能影响SD卡写入的问题。以下是一些建议和解决方案:

1. 检查ESP32的引脚分配:确保您使用的是正确的引脚来控制SD卡。在您的代码中,您使用了引脚34(`#define SD_CS 34`)作为CS(片选)引脚。请确保这个引脚与您的ESP32模块和SD卡模块兼容。

2. 检查SD卡模块:确保您的SD卡模块是适用于ESP32的。有些SD卡模块可能需要额外的电源或引脚配置。请查阅您的SD卡模块的文档以获取更多信息。

3. 检查电源:确保您的ESP32和SD卡模块都有足够的电源。如果电源不足,可能导致SD卡无法正常工作。

4. 检查文件系统:在您的代码中,您使用了`SD.begin(SD_CS)`来初始化SD卡。请确保您的SD卡已经格式化为FAT32或exFAT文件系统,因为这是ESP32支持的文件系统。

5. 检查代码逻辑:在您的代码中,您使用了`if(!SD.begin(SD_CS))`来检查SD卡是否成功挂载。如果这个条件为真,您的代码将打印"Card Mount Failed"并返回。请确保这个逻辑是正确的,并且您已经正确处理了SD卡挂载失败的情况。

6. 更新Arduino IDE和库:确保您使用的是最新版本的Arduino IDE和ESP32开发板插件。此外,检查您是否已经安装了所有必要的库,例如SD库和Bluetooth库。

7. 检查代码语法:在您的代码片段中,有一些语法错误,例如`if(cardTyp`应该是`if(cardType`。请确保您的代码没有语法错误,并且所有必要的库都已经包含。

8. 调试:使用Serial打印来调试您的代码。在关键步骤添加`Serial.println()`语句,以帮助您了解代码的执行流程和可能的问题所在。

尝试以上建议,看看是否能够解决您的问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分