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() {
// 设置完成后没有任何反应
}
实验串口返回情况
正在初始化 SD 卡...初始化完成。
example.txt 不存在。
正在创建 example.txt...
example.txt 存在。
正在删除 example.txt...
example.txt 不存在。
Arduino实验场景图
hacker_2023.08.11
666