【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块2
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验五十二:SPI接口Micro SD卡模块 TF卡读写卡器 (带电平转换芯片)
Arduino实验接线示意图
【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() { }
实验串口返回情况,读取了记事本上的文字内容
Arduino实验场景图
【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(); } }
实验串口返回情况
【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.”
【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) { }
实验串口返回情况
【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() { // 设置完成后没有任何反应 }
实验串口返回情况
Arduino实验场景图