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

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

头像 驴友花雕 2023.07.23 11 1

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

 

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

 

04-.jpg

Micro SD卡读写模块实验所需硬件清单
1G与4GTF卡X2
8Ω 0.5W小喇叭X1
Micro SD卡读卡器X2
Arduino Uno开发板 X1
Micro SD卡读写模块X2
DHT11 温度湿度模块X1
杜邦线 若干(备了9条)
LED发光二极管(蓝色)X1
Proto Shield原型扩展板(带mini面包板)X1
 

8.7-14.jpg

传感器模块实验所需软件平台
代码编程 Arduino IDE   (版本1.8.19)
仿真编程 Linkboy      (版本V4.6.3)
图形编程 Mind+  (版本 V1.7.0 RC2.0)
以及编玩边学(线上平台https://ide.codepku.com/?type=Arduino)

 


Arduino – SD库
自带的SD库实现了Arduino对SD卡的读取和写入。它基于William Greiman的SdFat 库进行开发。SD库在标准SD卡和SDHC卡上支持FAT16和FAT32文件系统模式。

使用SD库中函数里参数可以包含以正斜杠/分隔的路径,例如" directory / filename.txt"。由于工作目录始终是SD卡的根目录,因此无论文件名是否包含斜杠,其名称都指向同一文件(例如," / file.txt"等同于" file.txt")。从1.0版开始,SD库支持打开多个文件。

开发板与SD卡之间的通信使用SPI,注意:
必须连接SS引脚来选择SD卡。在UNO上,SS默认是为引脚D10,在MEGA2560上SS默认为引脚53,或着您也可以在SD.begin()函数中指定一个SS引脚并与之连接。请注意,在您自定义了SS引脚之后,请设置该引脚为输出模式,否则SD库无法正常工作。

 

实验接线示意图
Pin VCC      ===>   5V Arduino
Pin GND      ===>   GND Arduino
Pin MOSI     ===>   Pin 11 Arduino
Pin MISO     ===>   Pin 12 Arduino
Pin SCK      ===>   Pin 13 Arduino
Pin CS       ===>   Pin 10 Arduino

 

8.7-15.jpg

Arduino在SD卡上创建和删除文件
(1)Arduino参考开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序六:Arduino在SD卡上创建和删除文件
  实验接线:
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>
 
// 创建File实例化对象
File myFile;
 
void setup(){
    // 初始化硬件串口并设置波特率为9600
    Serial.begin(9600);
    while (!Serial)
    {
        ; //等待串口连接,仅使用本地 USB 端口
    }
 
    Serial.print("正在初始化 SD 卡...");
 
 
    // 检测是否初始化完成
    if (!SD.begin())
    {
        Serial.println("初始化失败!");
        return;
    }
    Serial.println("初始化完成。");
 
    // 查看是否存在"example.txt"文件
    if (SD.exists("example.txt"))
    {
        Serial.println("example.txt exists.");
    }
    else
    {
        Serial.println("example.txt 不存在");
    }
 
    // 打开一个新文件,然后立即将其关闭(创建文件)
    Serial.println("创建 example.txt...");
    myFile = SD.open("example.txt", FILE_WRITE);
    myFile.close();
 
    // 检查该文件是否新建成功
    if (SD.exists("example.txt"))
    {
        Serial.println("有example.txt文件了");
    }
    else
    {
        Serial.println("example.txt 不存在");
    }
 
    //删除该文件
    Serial.println("移除 example.txt...");
    SD.remove("example.txt");
 
    if (SD.exists("example.txt"))
    {
        Serial.println("example.txt exists.");
    }
    else
    {
        Serial.println("example.txt 不存在。");
    }
}
 
void loop(){
}

(2)实验串口返回情况
 

8.7-28.jpg

带有 SD 卡和 DHT11 湿度和温度传感器的 Arduino 数据记录器
实验接线示意图
 

8.7-29.jpg

Arduino实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序七:带有SD卡和DHT11湿度和温度传感器的Arduino数据记录器
  实验接线:DHT11接D4
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>    // 包含 SPI 库(SD 卡需要)
#include <SD.h>     // 包含 SD 库
#include <DHT.h>    // 包含 DHT 传感器库

File dataFile;

#define DHTPIN 4         // DHT11 数据引脚连接到 Arduino 引脚 4
#define DHTTYPE DHT11    // 使用 DHT11 传感器
DHT dht(DHTPIN, DHTTYPE); // 初始化 DHT 库

void setup() {
  // 打开串行通信并等待端口打开
  Serial.begin(9600);
  while (!Serial)
    ; // 等待串口连接。仅本机 USB 端口需要
  Serial.print("正在初始化 SD 卡...");
  if (!SD.begin())
  {
    Serial.println("初始化失败!");
    while (1);
  }
  Serial.println("初始化完成。");
  delay(2000);
  dht.begin();
}

uint16_t line = 1;

void loop() {
  delay(1000);
  // 读取湿度
  byte RH = dht.readHumidity();
  //以摄氏度读取温度
  byte Temp = dht.readTemperature();
  //打开文件DHT11Log.txt
  dataFile = SD.open("DHT11Log.txt", FILE_WRITE);

  // 如果文件打开正常,写入它:
  if (dataFile)
  {
    Serial.print(line);
    Serial.print(": 温度 = ");
    Serial.print(Temp);
    Serial.print("°C, 湿度 = ");
    Serial.print(RH);
    Serial.println("%");
    // 将数据写入 SD 卡文件 (DHT11Log.txt)
    dataFile.print(line++);
    dataFile.print(": 温度 = ");
    dataFile.print(Temp);
    dataFile.print("°C, 湿度 = ");
    dataFile.print(RH);
    dataFile.println("%");
    dataFile.close();

  }
  // 如果文件没有打开,打印错误
  else
    Serial.println("打开 DHT11Log.txt 出错");
}

实验串口返回情况

 

8.7-30.jpg

Arduino实验场景图

 

8.7-31.jpg

播放音频文件2.wav和3.wav
实验接线示意图(这里CS接D10)
 

8.7-32.jpg

Arduino参考开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序八:播放音频文件2.wav和3.wav
  实验接线:喇叭接D9
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SD.h>        //包含SD模块库
#include <TMRpcm.h>    //包含扬声器控制库

#define SD_ChipSelectPin 10   //将pin10定义为CS pin

TMRpcm tmrpcm;                //为扬声器库创建一个对象

void setup() {
  //定义扬声器引脚。扬声器库正在使用 pin9。
  tmrpcm.speakerPin = 9;

  // 设置串口
  Serial.begin(9600);
  Serial.println("准备就绪");
  

  //查看卡是否存在并且可以初始化。
  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD 失败");
    return;               //如果没有就不要再做
  }

  //每次arduino上电或重置时都会播放声音文件“2”
  Serial.println("播放声音文件2.wav");
  Serial.println(" ");
  tmrpcm.play("2.wav");
}

void loop() {
  if (Serial.available()) {
    //通过串口监视器发送字母a开始播放
    if (Serial.read() == 'a') {
      // 设置音量。数字的范围可以是 0-7。
      // 此时设置音量为5。
      tmrpcm.setVolume(5);    // 将音量设置为 5。

      // 播放文件 3。文件 3 是 Red Light 的音频。
      Serial.println("字母a");
      Serial.println("播放声音文件3.wav");
      tmrpcm.play("3.wav");
    }
  }
}

实验串口返回情况

 

8.7-33.jpg

Arduino实验场景图

 

8.7-34.jpg

评论

user-avatar
  • hacker_

    hacker_2023.08.11

    666

    0
    icon 他的勋章
      展开更多