回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块2 中等

头像 驴友花雕 2023.07.22 6 1

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验五十二:SPI接口Micro SD卡模块 TF卡读写卡器 (带电平转换芯片)

 

04-.jpg

 

Arduino实验接线示意图

 

12.jpg

19.jpg
20.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
 程序:读取SD卡记事本123456上的内容,并通过串口发送
 接线:
 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() {
}

实验串口返回情况,读取了记事本上的文字内容

 

21.jpg

Arduino实验场景图

 

22.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
 程序:打印出一个SD卡上的目录
 接线:
 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();
  }
}

实验串口返回情况

 

23.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
 程序:从 SD 卡文件读取和写入数据
 接线:
 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() {
  // 设置后没有任何反应
}

实验串口返回情况,读取记事本123456上的内容,并写入“testing 1, 2, 3.”

 

24.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
 程序:SD卡测试,获取有关 SD 卡的相关信息
 接线:
 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) {
}

实验串口返回情况

 

25.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验五十二:SPI接口Micro SD卡模块TF卡读写卡器 (带电平转换芯片)
 程序:创建和销毁 SD 卡文件
 接线:
 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() {
  // 设置完成后没有任何反应
}

实验串口返回情况

 

正在初始化 SD 卡...初始化完成。
example.txt 不存在。
正在创建 example.txt...
example.txt 存在。
正在删除 example.txt...
example.txt 不存在。

 

26.jpg

Arduino实验场景图

 

16.jpg

评论

user-avatar
  • hacker_

    hacker_2023.08.11

    666

    0
    icon 他的勋章
      展开更多