【ESP32】DS3231で時間指定し、スマホで見られるグーグルスプレッドシートにBME280の温度・湿度・気圧データを書き込む方法

konan0119
konan0119
177 بار بازدید - 3 ماه پیش - 毎度ご視聴ありがとうございます。グーグルスプレッドシートにデータを記録する方法を紹介します。参考になれば幸いです。声:VOICEVOX「VOICEVOX:四国めたん」
毎度ご視聴ありがとうございます。
グーグルスプレッドシートにデータを記録する方法を
紹介します。
参考になれば幸いです。
声:VOICEVOX
「VOICEVOX:四国めたん」
https://voicevox.hiroshiba.jp/

文字数制限のため、0分、5分にデータ取得設定しています。
YOUTUBE仕様により、<>を半角に書き換えてください。

グーグルスクリプト------------------
function doGet(e) {
 const url = "https://docs.google.com/spreadsheets/";
 const ss = SpreadsheetApp.openByUrl(url);
 const sheet = ss.getSheets()[0];
 const params = {
   "buf1": e.parameter.buf1,
   "temperature": e.parameter.temp,
   "temper": e.parameter.Temper,
   "humidity": e.parameter.humid,
   "humidi": e.parameter.Humidi,
   "pressure": e.parameter.pressure
};
sheet.appendRow(Object.values(params));
return ContentService.createTextOutput('sccess');
}

ESP32プログラム--------------------
// 温湿度ロガー(グーグルスプレッドシート保存)
// 2024.05.30 konan0119
#include <Adafruit_BME280.h>    //BME280
#include <Adafruit_Sensor.h>    //Adafruit United Sensor
#include <DHT.h>                //DHT11
#include <WiFi.h>               //wifi
#include <HTTPClient.h>         //クライアント
#include <LiquidCrystal_I2C.h>  //LCD
#include <Wire.h>               //DS3231 I2C通信用
#include <RTClib.h>             //DS3231 リアルタイムクロック
RTC_DS3231 rtc;
Adafruit_BME280 bme;
#define DHT_MODEL DHT11// 接続するセンサ(DHT11やDHT22)
#define DHT_PIN 2      // DHT11のDATAピンをEPS32の2ピンに指定
DHT dht(DHT_PIN, DHT_MODEL);
const unsigned int ADDRESS = 0x27;
const int CHARS_NUM = 16;
const int LINES_NUM = 2;
LiquidCrystal_I2C lcd(ADDRESS, CHARS_NUM, LINES_NUM);
//Wi-Fi
const char* ssid     = "Buffalo"; //Your SSID
const char* password = "******"; //Your Password
//Google Spreadsheet url
const String url = "https://script.google.com/macros/*****";
float temp;
float pressure;
float humid;
int bangou = 0;
String inp;
void setup() {
    Serial.begin(115200);// シリアル通信の開始
    dht.begin();         // センサーの動作開始
    Wire.begin(21,22);   //i2c通信接続pin
    lcd.init();          //LCD初期化
    lcd.backlight();
    bool status;
    status = bme.begin(0x76);  
    while (!status) {
          Serial.println("BME280 sensorが使えません");
          delay(1000);
    }
    delay(1000);
    if (! rtc.begin()) {
       Serial.println("Not find RTC");
       while (1);
    }
//時刻修正する場合 下記コメントアウトして再度書き込みする
//rtc.adjust(DateTime(2024, 4, 18, 18, 10, 0));//年,月,日,時,分
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    if (WiFi.begin(ssid, password) != WL_DISCONNECTED) {
       ESP.restart();
    }
    while (WiFi.status() != WL_CONNECTED) {
          delay(1000);
          Serial.print(".");
     }
    Serial.println("Connected to the WiFi network!");
}
void loop(){
strt:
    //DHT11
    float Temper = dht.readTemperature();// 温度の読み取り(摂氏)
    float Humidi = dht.readHumidity();// 湿度の読み取り
    //BME280
    temp=bme.readTemperature();
    pressure=bme.readPressure() / 100.0F;
    humid=bme.readHumidity();
    //時間読み込み    
    DateTime now = rtc.now();
    char buf1[] = "YY.MM.DD_DDD_hh:mm:ss";
    char buf2[] = "mm:ss";
    char buf3[] = "DDDMMDD_hh:mm:ss";
    inp = now.toString(buf2);
     // LCD表示
    lcd.setCursor(0, 0);
    lcd.print("DHT/T");
    lcd.print(Temper,1); // 小数点1桁まで
    lcd.print("H");
    lcd.print(Humidi,1);    // 小数点1桁まで
    lcd.setCursor(0, 1);
    lcd.print("T");
    lcd.print(temp,1); // 小数点1桁まで
    lcd.print("H");
    lcd.print(humid,1);    // 小数点1桁まで
    lcd.print("P");
    lcd.print(pressure,0);
    //データ書き込み時間設定(5分毎出力時)
     if (inp == "00:00") {
        goto upld;
     }else
     if (inp == "05:00") {
        goto upld;
     }
     goto strt;
upld:
    //シリアルモニタ表示
    Serial.println("Sending data to Google SpreadSheet:");
    Serial.print("TIME: ");
    Serial.println(now.toString(buf1));
    Serial.print("BME280  Temperature: ");
    Serial.print(temp);
    Serial.print(" *C ");
    Serial.print(" Humidity: ");
    Serial.print(humid);
    Serial.print(" %\t");
    Serial.print("pressure:");
    Serial.print(pressure);
    Serial.println(" hPa");
    Serial.print("DHT11   Temperature: ");
    Serial.print(Temper);
    Serial.print(" *C ");
    Serial.print(" Humidity: ");
    Serial.print(Humidi);
    Serial.println(" %\t");
    //UP DATA
    String urlFinal = url + "?buf1=" + String(now.toString(buf1)) + "&temp=" + String(temp) +  "&Temper=" + String(Temper) + "&humid=" + String(humid) + "&Humidi=" + String(Humidi) + "&pressure=" + String(pressure);
    //Serial.println(urlFinal);
    // グーグルスプレッドシート接続書き込み
    HTTPClient http;
    http.begin(urlFinal.c_str());
    http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
    int httpCode = http.GET(); //HTTP レスポンスステータスコード取得
    Serial.print("HTTP Status Code: ");
    Serial.println(httpCode);
    String payload;
    if (httpCode > 0) {
       payload = http.getString();
       Serial.println("Payload: "+payload);    
     }
     http.end();
     delay(2000);
 }
//end of list
3 ماه پیش در تاریخ 1403/03/20 منتشر شده است.
177 بـار بازدید شده
... بیشتر