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 类型,因为库可以与 DHT11 和 DHT22 一起使用:
#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 卡是否显示创建的文件:
打开文件以查看记录的数据:
如果您的数据是敏感的,您可以加密数据,然后将其写入SD卡。如果SD卡丢失,任何人都无法看到您的数据