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

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

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

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

 

 

传感器模块实验所需软件平台
代码编程 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

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)实验串口返回情况

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

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 出错");
}

  实验串口返回情况

Arduino实验场景图

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

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");
    }
  }
}

  实验串口返回情况

 

Arduino实验场景图

 

posted @ 2023-07-23 06:16  行者花雕  阅读(458)  评论(0编辑  收藏  举报