【ESP32電子工作】SDカードに記録する、温度湿度データロガー装置の作り方
209 بار بازدید -
5 ماه پیش
-
ESP32マイコンボード、DHT11温度湿度センサー、DS3231クロック
モジュール、I2C LCDモジュール、SDカードモジュールを使用した
温度と湿度データを指定時間にSDカードへ書き込む試作品を作り
ました。
ESP32マイコンボード、DHT11温度湿度センサー、DS3231クロック
モジュール、I2C LCDモジュール、SDカードモジュールを使用した
温度と湿度データを指定時間にSDカードへ書き込む試作品を作り
ました。
皆さんの参考になれば幸いです。
YOUTUBE オーディオライブラリ
「VOICEVOX:もち子(cv 明日葉よもぎ)」
不等号を半角に訂正してください。
YOUTUBEの仕様で半角の場合、書き込みができないため。
// 温湿度ロガー(SDカードにCSV保存)
// 2024.04.18 konan0119
#include <Wire.h> //DS3231 i2c通信用
#include <RTClib.h> //DS3231 リアルタイムクロック
#include <DHT.h> //センサー
#include <SD.h> //SDカード
#include <LiquidCrystal_I2C.h> //LCD
const unsigned int ADDRESS = 0x27;
const int CHARS_NUM = 16;
const int LINES_NUM = 2;
LiquidCrystal_I2C lcd(ADDRESS, CHARS_NUM, LINES_NUM);
RTC_DS3231 rtc;
int cs_SD = 5;
int bangou = 0;
String inp;
const char* f_name ="/temp.csv"; // SDcard file name
File myFile;
#define DHT_MODEL DHT11// 接続するセンサ(DHT11やDHT22)
#define DHT_PIN 2 // DHT11のDATAピンをEPS32の2ピンに指定
DHT dht(DHT_PIN, DHT_MODEL);
void setup() { //-----------------------------------------------------
Serial.begin(115200);// シリアル通信の開始
dht.begin(); // センサーの動作開始
Wire.begin(21,22); //i2c通信接続pin
lcd.init(); //LCD初期化
lcd.backlight();
delay(1000);
if (! rtc.begin()) {
Serial.println("Not find RTC");
while (1);
}
//時刻修正する場合 下記コメントアウトして再度書き込みする
//rtc.adjust(DateTime(2024, 4, 18, 18, 10, 0));//年,月,日,時,分
}
void loop(){ //--------------------------------------------------------
strt:
DateTime now = rtc.now(); // 日付時間の読み取り
float Humidity = dht.readHumidity();// 湿度の読み取り
float Temperature = dht.readTemperature();// 温度の読み取り(摂氏)
char buf1[] = "DDDMMDD hh:mm:ss"; //曜日、月日、時間読み取り
char buf2[] = "YY/MM/DD (DDD) hh:mm:ss";//日付、曜日、時間読み取り
char buf4[] = "mm:ss";//分、秒読み取り
inp = now.toString(buf4);
// LCD表示
lcd.setCursor(0, 0);
lcd.println(now.toString(buf1));
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(Temperature, 1); // 小数点1桁まで
lcd.print("C");
lcd.print(" H:");
lcd.print(Humidity, 1); // 小数点1桁まで
lcd.print("%");
//データ書き込み時間設定(5分毎出力時)
if (inp == "https://www.seevid.ir/fa/w/Su2D10ESud4") {
goto upld;
}else
if (inp == "https://www.seevid.ir/fa/w/Su2D10ESud4") {
goto upld;
}else
if (inp == "10:00") {
goto upld;
}else
if (inp == "15:00") {
goto upld;
}else
if (inp == "20:00") {
goto upld;
}else
if (inp == "25:00") {
goto upld;
}else
if (inp == "30:00") {
goto upld;
}else
if (inp == "35:00") {
goto upld;
}else
if (inp == "40:00") {
goto upld;
}else
if (inp == "45:00") {
goto upld;
}else
if (inp == "50:00") {
goto upld;
}else
if (inp == "55:00") {
goto upld;
}
goto strt;
upld:
//シリアルモニタ表示
Serial.print(" ");
Serial.print(now.toString(buf2));
Serial.print(" 温度: ");
Serial.print(Temperature, 1);// 小数点1桁まで
Serial.print("[℃]");
Serial.print(" 湿度: ");
Serial.print(Humidity, 1); // 小数点1桁まで
Serial.print("[%] ");
SD.begin(cs_SD);
Serial.print(" SD_conect...");
delay(10);
//SDカード書き込み
if (SD.begin(cs_SD)){
Serial.print(" Card failed");
}
if (SD.begin(cs_SD)){
Serial.print(" card ok! ");
myFile = SD.open(f_name,FILE_APPEND);
bangou++;
if (bangou==32767){
bangou = 2;
}
if (bangou<=1){ //行頭の見出し書き込み
myFile.print("DateTime");
myFile.print(",");
myFile.print("Temperature");
myFile.print(",");
myFile.print("Humidity");
myFile.println("");
}
if (myFile){ //データ書き込み
char buf3[] = "YY/MM/DD (DDD) hh:mm:ss";
myFile.print(now.toString(buf3));
myFile.print(",");
myFile.print(Temperature, 1);// 小数点1桁まで
myFile.print(",");
myFile.print(Humidity, 1); // 小数点1桁まで
myFile.print(",");
myFile.println(" ");
Serial.print("");
Serial.print(bangou);
Serial.println(" : Card write ok");
myFile.close();
}
else{
Serial.print(" : Card write error");
}
}
delay(2000);
}
//end of list
5 ماه پیش
در تاریخ 1403/02/03 منتشر شده
است.
209
بـار بازدید شده