6-3-1 在SD卡上保存数据

我们假设您现在需要将数据保存到SD卡,这些数据可以在以后的PC中脱机使用。

让我们像第3章“使用ESP8266的搭建家用温控器” 一样连接DHT22,并读取其值并将其记录在microSD卡的文件上。
使用相同的SPI和SD卡库:

#include <SPI.h>
#include <SD.h>
#include <DHT.h>
const int chipSelect = D8;

定义 DHT 类型,因为库可以与 DHT11DHT22 一起使用:

#define DHTTYPE DHT22
#define DHTPIN 4
#define DEV_TYPE "dht"
DHT dht(DHTPIN, DHTTYPE, 11);
float humidity, temp_f; // 从传感器读取的值

定义将读取温度的函数并使用湿度和温度更新全局变量 humidity 和 temp_f:

void gettemperature()
{
  int runs=O;
  do {
    delay(2000);
    temp_f = dht.readTemperature(false);
    humidity = dht.readHumidity();
    if(runs > O)
    Serial.println("##Failed to read from DHT sensor ! ###") ;
    runs++;
  }
  while(isnan(temp_f) && isnan(humidity));
}

初始化 SD 卡并首先读取湿度和温度:

void setup()
{
  // 打开串行通信并等待端口打开:
  Serial.begin(115200);
  Serial.print("Initializing SD card. . .");
  // 看看卡是否存在并且可以初始化:
  if (!SD.begin(chipSelect) ) {
    Serial.println("Card failed, or not present");
    // 不要做更多的事情:
    return;
  }
  Serial.println("card initialized.");
  gettemperature();
}

每隔三秒钟,读取温度和湿度,打开现有的文件并将温度添加到 DATALOG.txt 文件末尾。最后关闭文件:

void loop()
{
  // 创建一个字符串,用于汇总数据以进行记录:
    String dataString = "";
    gettemperature();
    dataString += String(temp_f);
    //打开文件请注意,在同一时刻只能打开一个文件,
    //所以你必须在打开另一个之前关闭这个。
    //要写入文件,你需要 FILE WRITE 作为第二个参数。
    //从文件中读取时,SD.open(file_name) 应该会用到
    File dataFile = SD.open("datalog. txt", FILE_WRITE);
    //如果文件可用,请写入:
    if (dataFile)
    {
      dataFile.println(dataString);
      dataFile.close();
      // 也打印到串口:
      Serial. println( dataString) ;
    }
    // 如果文件未打开,则弹出错误:
    else {
      Serial.println("error opening datalog.txt");
    }
      delay(3000);
}

检查 PC 上的 microSD 卡是否显示创建的文件:

6-3-1 在SD卡上保存数据

打开文件以查看记录的数据:

6-3-1 在SD卡上保存数据

如果您的数据是敏感的,您可以加密数据,然后将其写入SD卡。如果SD卡丢失,任何人都无法看到您的数据