ESP8266-Arduino编程实例-DHT11传感器数据储存到SD卡

DHT11传感器数据储存到SD卡

1、应用实例介绍

本次实例将演示如何将DHT11传感器数据以CSV形式保存到SD卡中。实例主要为两个部分:

第一部分:DHT11温度湿度传感器数据采集。

第二部分:SD卡保存DHT11传感器数据。

在前面的文章中,对DHT11、驱动及应用做了详细的介绍,请参考:

在前面的文章中,对SD卡、驱动及应用做了详细的介绍,请参考:

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • DHT11传感器模块一个
  • SD卡及SD模块各一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

在这里插入图片描述

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次使用到的DHT11驱动库如下:

SD卡驱动库使用自带库。

1)导入依赖库头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "DHT.h"
#include <SPI.h>
#include <SD.h>

// DHT11设备数据引脚
#define DHTPIN D4
// DHT设备类型
#define DHTTYPE DHT11
// 创建DHT11设备
DHT dht(DHTPIN, DHTTYPE);

// SD卡CS引脚
const int chipSelect = D8;
// 创建SD卡文件对象
File myFile;

2)设备初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void setup()
{
// 初始化串口
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Serial.print("Initializing SD card...");
// 初始化SD卡
if (!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// 初始化DHT11
dht.begin();

}

3)数据采集及储存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void loop()
{
delay(2000);
// 打开文件
myFile = SD.open("dht11.csv", FILE_WRITE);

// 读取DHT11温度及湿度数据
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// 判断数据是否有效
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
// 判断文件是否打开成功
if (myFile)
{
Serial.print("opened dht11.csv...");
// 写入数据
myFile.print(h);
myFile.print(",");
myFile.print(t);
myFile.print(",");
myFile.println(f);
// 关闭文件
myFile.close();
Serial.println("closed dht11.csv.");
}
else {
// 打开失败,输出提示
Serial.println("error opening dht11.csv");
}
}

文章来源: https://iotsmart.blog.csdn.net/article/details/127663110