当前位置:网站首页>【Arduino 连接 SD 卡模块实现数据读写】
【Arduino 连接 SD 卡模块实现数据读写】
2022-08-02 03:29:00 【WENJIE科技】
Arduino 连接 SD 卡模块实现数据读写
前言
SD 卡或 micro sd 卡,它可以打包千兆字节的数据,并且它的大小比硬币还小。本教程中,我们将 SD 卡模块与 Arduino 连接,实现数据读写。
Micro SD 卡模块引脚分配
Micro SD 卡模块有 6 个引脚;它们是 GND、VCC、MISO、MOSI、SCK 和 CS。这个传感器模块的所有引脚都是数字的,除了 VCC 和地。Micro SD 卡模块的引脚排列如下所示:这是一种便宜且易于使用的传感器,可用于许多不同的应用。该传感器可用于通过微控制器读取 SD 卡数据。SD 卡模块的部件标记如下所示。
如果您仔细查看 Micro SD 卡模块,PCB 本身并没有太多。只有三个重要的组件,首先是 Micro SD 卡座本身。这个支架使我们可以轻松地在不同的 SD 卡模块之间进行交换。第二个最重要的是电平转换器IC,因为SD卡模块仅在3.3V上运行,它的最大工作电压为3.6V,所以如果我们直接将SD卡连接到5V,它肯定会杀死SD卡。此外,该模块具有板载超低压差稳压器,可将电压从 5V 转换为 3.3V。这也是为什么这个模块可以在 3.3V 电源下工作的原因。
Micro SD卡模块电路图
该模块由非常通用且易于使用的组件制成。Micro SD 卡模块示意图如下所示。正如您在上面的示意图中看到的,我们有一个 Micro SD 卡连接器,它是一个推出型连接器,该连接器连接到一个逻辑电平转换器 IC。模块的最大工作电压为 3.6V,因此逻辑电平转换器 IC 变得非常重要。为了给 SD 卡和逻辑电平转换器供电,我们使用了 LM1117 LDO,这就是为什么这个模块可以在 3.3V 和 5V 逻辑电平下工作的原因。示意图底部的连接器 JP1 代表 micro SD 卡模块底部的连接器。
Arduino Micro SD卡模块电路连接图
现在我们已经完全了解了 Micro SD 卡模块的工作原理,我们可以将所有需要的电线连接到 Arduino 并编写代码以从传感器中获取所有数据。Micro SD卡模块与Arduino的连接图如下所示 -将 Micro SD 卡模块连接到 Arduino UNO 非常简单,我们只需将 SCK、MISO 和 MOSI 的 SPI 线连接到 SCK(D13)、MOSI(D12) 和 MISO( D11) 如果 SPI 总线上连接了多个设备,那么我们还需要将 CS 线连接到 Arduino。除此之外,VCC 和接地用于为设备供电。
Arduino 代码说明
Arduino 从 SD 卡模块读取和写入数据如下所示。代码非常简单易懂。代码检查是否存在文件名“data_log.txt” ,如果文件存在,则继续将给定信息写入 SD 卡,如果不存在,代码将在 SD 卡中创建文件,然后将数据写入SD卡。我们稍后可以打开文件并检查内容是否已写入。
我们通过定义 SD 库开始我们的代码,我们还声明了模块的chipSelect引脚,接下来我们定义一个文件类型变量并将其命名为myFile。
#include <SD.h>
const int chipSelect = 10;
File myFile;
接下来,我们有我们的设置功能;在 setup 函数中,我们初始化串口进行调试。我们还检查 SD 卡是否正确连接到 Arduino 的 SPI 引脚。
// Open serial communications and wait for port to open:
Serial.begin(9600);
// wait for Serial Monitor to connect. Needed for native USB port boards only:
while (!Serial);
接下来,我们创建了一个名为“check_and_create_file()”的函数。 在该函数中,我们检查 SD 卡中是否存在data_log.txt文件,如果该文件存在,我们将继续执行我们的代码,如果不存在,则我们将创建该文件。要在 SD 卡上创建文件,您只需非常快速地打开和关闭它,不会有任何延迟,文件就会被创建。
void check_and_create_file()
{
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
if (SD.exists("data_log.txt"))
Serial.println("data_log.txt exists.");
else
{
Serial.println("data_log.txt doesn't exist.");
Serial.println("Creating data_log.txt...");
myFile = SD.open("data_log.txt", FILE_WRITE);
myFile.close();
if (SD.exists("data_log.txt"))
Serial.println("data_log.txt exists.");
else
Serial.println("data_log.txt doesn't exist.");
}
}
接下来,我们将向 SD 卡写入一些文本,并将该文本读回串行监视器窗口。这样我们就知道文本已成功写入 SD 卡。我们创建了一个名为read_write_sd_text()的函数,它会自动执行此操作。只需调用此函数即可完成。
在函数内部,我们打开一个
void read_write_sd_text()
{
myFile = SD.open("data_log.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to data_log.txt...");
myFile.println("Testing Data Write 1, 2, 3.");
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening data_log.txt");
}
// re-open the file for reading:
myFile = SD.open("data_log.txt");
if (myFile) {
Serial.println("data_log.txt:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
} else {
// if the file didn't open, print an error:
Serial.println("error opening data_log.txt");
}
}
模块的工作
我们编写了 arduino 代码,以便在 arduino 初始化后代码会检查它是否可以找到 SD 卡。如果找到 SD 卡,它将检查文本文件是否存在,如果文件存在,代码将继续,如果不存在,代码将简单地创建一个新的文本文件,一旦完成,它将编写测试 1、2、3 .里面的文本文件。接下来,代码将读取文本文件并将文本中的数据打印到串行监视器窗口中。
边栏推荐
猜你喜欢
随机推荐
【NTC 热敏电阻与 Arduino 读取温度】
Go中的一些优化笔记,简约而不简单
php laravel框架生成二维码
阿里技术官手码12W字面试小册
三相同步发电机的空载短路的simulink仿真
研发过程中的文档管理与工具
《scala 编程(第3版)》学习笔记3
kotlin语法总结(二)
[Spark]-协同过滤
快速搭建一个网关服务,动态路由、鉴权的流程,看完秒会(含流程图)
浅谈性能优化:APP的启动流程分析与优化
Acwing:哈夫曼树(详解)
Solve the problem that the 5+APP real machine test cannot access the background (same local area network)
管理node版本的工具volta
Visual Studio2022创建setup项目
最简单的FRP内网穿透教程
whistle 手机调试代理工具
关于我的数学建模~
RecyclerView使用和原理解析
C# 注释语法