[Diao Ye learns programming] Arduino hands-on (52)---MicroSD card reading and writing module 2

The idea of ​​37 sensors and modules has been widely circulated on the Internet. In fact, there must be more than 37 sensor modules compatible with Arduino. In view of the fact that I have accumulated some sensor and actuator modules on hand, according to the concept of true knowledge (must be hands-on), for the purpose of learning and communication, I am going to try and do more experiments one by one here, and I will record them whether I succeed or not.

[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)

insert image description here
Wiring diagram of Arduino experiment

insert image description here
insert image description here
insert image description here
[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)
program: read the content on the SD card notepad 123456, and send it through the serial port Wiring
:
MicroSD uno
CS-------------10
MOSI (DI)------11
MISO (DO)---12
CLK------------13

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
  程序:读取SD卡记事本123456上的内容,并通过串口发送
  接线:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;//定义变量myFile

void setup() {
    
    
  // 打开串口通信并等待端口打开
  Serial.begin(9600);
  while (!Serial) {
    
    
    ;// 等待串口连接, 仅使用本地 USB 端口
  }

  Serial.print("Initializing SD card...");
  // 查看卡是否存在并且可以初始化
  if (!SD.begin(10)) {
    
    
    Serial.println("initialization failed!");
    // 如卡不存在,则不要再做任何事情,初始化失败
    return;
  }
  Serial.println("initialization done.");

  // 打开文件,请注意,一次只能打开一个文件
  // 所以你必须在打开另一个之前关闭这个
  myFile = SD.open("123456.TXT");

  // 如果文件可用,读取SD卡记事本123456上的内容
  if (myFile) {
    
    
    Serial.println("123456.txt:");
    Serial.println("↓↓↓↓");
    while (myFile.available())
    {
    
    
      Serial.write(myFile.read());
    }
    myFile.close();
  }
  else {
    
    
    // 如果文件没有打开,弹出一个错误
    Serial.println("error opening 123456.txt");
  }
}

void loop() {
    
    
}

Experiment with the return status of the serial port, and read the text content on the notepad

insert image description here

Arduino experiment scene diagram

insert image description here
[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphic programming)
experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)
program: print out a directory on the SD card
Wiring:
MicroSD uno
CS-------------10
MOSI (DI)------11
MISO (DO)------12
CLK------------13

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
  程序:打印出一个SD卡上的目录
  接线:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File root;

void setup() {
    
    
  // 打开串口通信,等待端口打开
  Serial.begin(9600);
  while (!Serial) {
    
    
    ; //等待串口连接, 仅使用本地 USB 端口
  }

  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    
    
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  root = SD.open("/");

  printDirectory(root, 0);

  Serial.println("done!");
}

void loop() {
    
    
  // 设置完成后没有任何反应。
}

void printDirectory(File dir, int numTabs) {
    
    
  while (true) {
    
    

    File entry =  dir.openNextFile();
    if (! entry) {
    
    
      // 没有更多文件
      break;
    }
    for (uint8_t i = 0; i < numTabs; i++) {
    
    
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
    
    
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
    
    
      // 文件有大小,目录没有
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}

Experimental serial port return

insert image description here

[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)
program: read and write data from SD card files
Wiring:
MicroSD uno
CS-------------10
MOSI (DI)------11
MISO (DO)------12
CLK------------13

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
  程序:从 SD 卡文件读取和写入数据
  接线:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
    
    
  // 打开串口通信,等待端口打开
  Serial.begin(9600);
  while (!Serial) {
    
    
    ; //等待串口连接, 仅使用本地 USB 端口
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    
    
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  // 打开文件,请注意,一次只能打开一个文件
  // 所以你必须在打开另一个之前关闭这个
  myFile = SD.open("123456.txt", FILE_WRITE);

  //如果文件打开正常,请写入
  if (myFile) {
    
    
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    
    
    // 如果文件没有打开,打印一个错误
    Serial.println("error opening 123456.txt");
  }

  // 重新打开文件进行阅读
  myFile = SD.open("123456.txt");
  if (myFile) {
    
    
    Serial.println("123456.txt:");

    // 从文件中读取,直到其中没有其他内容:
    while (myFile.available()) {
    
    
      Serial.write(myFile.read());
    }
    // 关闭文件
    myFile.close();
  } else {
    
    
    // 如果文件没有打开,打印一个错误:
    Serial.println("error opening 123456.txt");
  }
}

void loop() {
    
    
  // 设置后没有任何反应
}

Experiment with the return status of the serial port, read the content on the notepad 123456, and write "testing 1, 2, 3."

insert image description here

[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphic programming)
Experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)
program: SD card test, get related information about SD card
Wiring:
MicroSD uno
CS-------------10
MOSI (DI)------11
MISO (DO)------12
CLK------------13

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
  程序:SD卡测试,获取有关 SD 卡的相关信息
  接线:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

// 导入 SD 库
#include <SPI.h>
#include <SD.h>

// 使用 SD 实用程序库函数设置变量
Sd2Card card;
SdVolume volume;
SdFile root;

// 更改它以匹配您的 SD 屏蔽或模块
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;

void setup() {
    
    
  // 打开串口通信,等待端口打开
  Serial.begin(9600);
  while (!Serial) {
    
    
    ; //等待串口连接,仅使用本地 USB 端口
  }


  Serial.print("\nInitializing SD card...");

  // 我们将使用实用程序库中的初始化代码
  // 因为我们只是在测试卡是否正常工作!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    
    
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    
    
    Serial.println("Wiring is correct and a card is present.");
  }

  // 打印卡类型
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) {
    
    
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // 现在我们将尝试打开“卷”/“分区”——它应该是 FAT16 或 FAT32
  if (!volume.init(card)) {
    
    
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // 打印第一个 FAT 类型卷的类型和大小
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // 集群是块的集合
  volumesize *= volume.clusterCount();       // 会有很多集群
  volumesize /= 2;                           // SD 卡块始终为 512 字节(2 个块为 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // 列出卡中所有文件的日期和大小
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
    
    
}

Experimental serial port return

insert image description here
[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 52: SPI interface Micro SD card module TF card reader (with level conversion chip)
program: create and destroy SD card files
Wiring:
MicroSD uno
CS-------------10
MOSI (DI)------11
MISO (DO)------12
CLK------------13

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
  程序:创建和销毁 SD 卡文件
  接线:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
    
    
  // 打开串口通信,等待端口打开
  Serial.begin(9600);
  while (!Serial) {
    
    
    ; // 等待串口连接,仅使用本地 USB 端口
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    
    
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  if (SD.exists("example.txt")) {
    
    
    Serial.println("example.txt exists.");
  } else {
    
    
    Serial.println("example.txt doesn't exist.");
  }

  // 打开一个新文件并立即关闭它
  Serial.println("Creating example.txt...");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();

  // 检查文件是否存在
  if (SD.exists("example.txt")) {
    
    
    Serial.println("example.txt exists.");
  } else {
    
    
    Serial.println("example.txt doesn't exist.");
  }

  // 删除文件
  Serial.println("Removing example.txt...");
  SD.remove("example.txt");

  if (SD.exists("example.txt")) {
    
    
    Serial.println("example.txt exists.");
  } else {
    
    
    Serial.println("example.txt doesn't exist.");
  }
}

void loop() {
    
    
  // 设置完成后没有任何反应
}

Experimental serial port returns
Initializing SD card...Initialization completed.
example.txt does not exist.
Creating example.txt...
example.txt exists.
Deleting example.txt...
example.txt does not exist.
insert image description here
Arduino experiment scene diagram

insert image description here

Guess you like

Origin blog.csdn.net/weixin_41659040/article/details/131863146