【ESP32】DS3231で時間指定し、スマホで見られるグーグルスプレッドシートにBME280の温度・湿度・気圧データを書き込む方法
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
グーグルスプレッドシートにデータを記録する方法を
紹介します。
参考になれば幸いです。
声: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
بـار بازدید شده