【ESP32電子工作】SDカードに記録する、温度湿度データロガー装置の作り方

konan0119
konan0119
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 بـار بازدید شده
... بیشتر