[Diao Ye apprend la programmation] Arduino pratique (52) --- Module de lecture et d'écriture de carte MicroSD 2

La référence à 37 capteurs et modules a largement circulé sur Internet, en effet il doit y avoir plus de 37 modules capteurs compatibles avec Arduino. Compte tenu du fait que j'ai accumulé des modules de capteurs et d'actionneurs sous la main, selon le concept de vraie connaissance (doit être pratique), à ​​des fins d'apprentissage et de communication, ici, je vais essayer de faire plus d'expériences une par une.

[Arduino] 168 types d'expériences de série de modules de capteurs (code de données + programmation de simulation + programmation graphique)
Expérience 52 : Interface SPI Module de carte Micro SD Lecteur de carte TF (avec puce de conversion de niveau)

insérez la description de l'image ici
Schéma de câblage de l'expérience Arduino

insérez la description de l'image ici
insérez la description de l'image ici
insérez la description de l'image ici
[Arduino] 168 types d'expériences de la série de modules de capteurs (code de données + programmation de simulation + programmation graphique) expérience 52 : interface SPI module de
carte Micro SD lecteur de carte TF (avec puce de conversion de niveau) programme : lire le contenu sur le bloc
-notes de la carte SD 123456 et l'envoyer via le port série





/*
  【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() {
    
    
}

Expérimentez avec l'état de retour du port série et lisez le contenu du texte sur le bloc-notes

insérez la description de l'image ici

Diagramme de scène d'expérience Arduino

insérez la description de l'image ici
[Arduino] 168 types d'expériences de série de modules de capteurs (code de données + programmation de simulation + programmation graphique) expérience 52 : interface SPI
module de carte Micro SD lecteur de carte TF (avec puce de conversion de niveau) programme :
imprimer un répertoire sur la
carte SD




/*
  【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();
  }
}

Retour de port série expérimental

insérez la description de l'image ici

[Arduino] 168 types d'expériences de série de modules de capteurs (code de données + programmation de simulation + programmation graphique) Expérience 52 : interface SPI module de
carte Micro SD lecteur de carte TF (avec puce de conversion de niveau) programme :
lecture et écriture de données à partir de fichiers de carte SD





/*
  【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() {
    
    
  // 设置后没有任何反应
}

Expérimentez avec l'état de retour du port série, lisez le contenu sur le bloc-notes 123456 et écrivez "test 1, 2, 3".

insérez la description de l'image ici

[Arduino] 168 types d' expériences de série de modules de capteurs (code de données + programmation de simulation + programmation graphique) Expérience
52 : interface SPI module de carte Micro SD lecteur de carte TF (avec puce de conversion de niveau) programme : test de
carte SD, obtenir des informations connexes sur la carte SD





/*
  【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) {
    
    
}

Retour de port série expérimental

insérez la description de l'image ici
[Arduino] 168 types d'expériences de série de modules de capteurs (code de données + programmation de simulation + programmation graphique) Expérience 52
 : interface SPI module de carte Micro SD lecteur de carte TF (avec puce de conversion de niveau) programme : créer et détruire des fichiers de
carte SD





/*
  【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() {
    
    
  // 设置完成后没有任何反应
}

Le port série expérimental renvoie
Initialisation de la carte SD... Initialisation terminée.
exemple.txt n'existe pas.
Création de example.txt...
example.txt existe.
Suppression de example.txt...
example.txt n'existe pas.
insérez la description de l'image ici
Diagramme de scène d'expérience Arduino

insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41659040/article/details/131863146
conseillé
Classement