DHT11 Google Sheet
溫溼度、GAS、Google Sheet
溫溼度、GAS、Google Sheet
將共用設為:知道連結的任何人
NodeMCU-32S
DHT11 或 DHT22
DHT kxn (Adafruit)
LiquidCrystal I2C (Frank de Brabander)
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
#define DHTPIN 4 // DHT11 接在 GPIO4
#define DHTTYPE DHT11 // 定義 DHT 類型
String ssid = "library2G";
String password = "ksshlibrary";
//底下內容填入以GAS部署的網路應用程式網址
String serverName = "https://script.google.com/macros/s/你用GAS已部署的網路應用程式連結/exec";
DHT dht(DHTPIN, DHTTYPE);
//LCD 1602程式庫
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //0x27 是一個常見的預設地址
void setup() {
Serial.begin(115200);
//啟動DHT11
dht.begin();
//LCD 1602初始化
lcd.init(); //初始化 LCD
lcd.backlight(); //打開 LCD 的背光
// 連接 WiFi
WiFi.begin(ssid.c_str(), password.c_str());
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
lcd.setCursor(0,0); //游標被設定在第一列的第一個位置,也就是左上角
lcd.print("WiFi connected"); //LCD 上顯示已連接
}
void loop() {
// 讀取溫度和濕度
float h = dht.readHumidity();
float t = dht.readTemperature();
// 確認讀取無誤
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor! t=" + String(t) + ",h=" + String(h));
delay(5000);
return;
}
// 輸出讀取值
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
// 呼叫後端 GAS
if(WiFi.status() == WL_CONNECTED){
HTTPClient http;
String serverPath = serverName + "?temperature=" + String(t) + "&humidity=" + String(h);
http.begin(serverPath.c_str());
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: "); //正確代碼302
Serial.println(httpResponseCode);
lcd.setCursor(0, 1); // 設定 LCD 游標位置為第二行第一列
lcd.print(String(t)); // 讀取溫度值並印出,轉換為字串顯示
lcd.print(" C,"); // 在 LCD 上印出溫度單位
lcd.print(String(h)); // 讀取濕度值並印出,轉換為字串顯示
lcd.print(" %"); // 在 LCD 上印出濕度單位
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
else {
Serial.println("WiFi Disconnected");
}
// 每60秒更新一次數據
delay(60000);
}
※測試均正確執行之後,可將Serial.print()、Serial.println()移除。※
function doGet(e) {
var sheet = SpreadsheetApp.openById("Google試算表ID").getActiveSheet();
var temperature = e.parameter.temperature;
var humidity = e.parameter.humidity;
var date = new Date();
sheet.appendRow([date, temperature, humidity]);
return ContentService.createTextOutput("Success");
}