Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clive520/d8c47a06dca2195b2b832bc1fc687c0c to your computer and use it in GitHub Desktop.
Save clive520/d8c47a06dca2195b2b832bc1fc687c0c to your computer and use it in GitHub Desktop.
機房溫度通知_ESP8266_DHT11_NTP_Google表單_LINE_ThingSpeak_溫度過高警示
#include <ESP8266WiFi.h> //WIFI
#include <WiFiUdp.h>
#include "esp_NTPClient.h" //NTP
#include <WiFiClientSecure.h>
#include "esp_DHTesp.h" //DHT 11
float Temp = 0; //溫度
float HUM = 0; //濕度
String T_Time; //NTP取出時間
String T_Time_STR; //NTP取出時間,換成int的中繼站
int H01 = 0;
int H10 = 0;
int HH = 0;
int M01 = 0;
int M10 = 0;
int MM = 0;
//start_num,控制開始傳送,避免同一分鐘內送多次
int start_num = 0;
int LINE_num = 10; //每小時的XX幾分鐘,上傳資料到LINE
int Google_num = 20; //每小時的XX幾分鐘,上傳資料到Google
int ThingSpeak_num = 30; //每小時的XX幾分鐘,上傳資料到ThingSpeak
//盡量不要新同時間上傳,每小時傳送一次,一天12次
int LINE_warning_NUM = 0;
//NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
DHTesp dht; //DHT 11
//WIFI
WiFiClient client;
WiFiClientSecure Secure_client;
void setup()
{
pinMode(2, OUTPUT);
pinMode(4, INPUT);
Serial.begin(9600);
WIFI_connection(); //副程式 WIFI_connection
//NTP
timeClient.begin();
timeClient.setTimeOffset(28800); //台灣時區+8,所以放入28800
dht.setup(4);//DHT 11 接在腳位4
}
void loop()
{
delay(30000);
get_time(); //副程式 取得時間並轉成int
get_data(); //副程式 取得DHT11資料
if (start_num == 0) { //start_num == 0 啟動,再判斷時間是否正確
if (MM == LINE_num ) { LINE(); start_num = 1; Serial.println(start_num); } //上傳資料到LINE
if (MM == ThingSpeak_num ) { ThingSpeak(); start_num = 1; Serial.println(start_num); } //上傳資料到ThingSpeak
if (MM == Google_num ) { Google(); start_num = 1; Serial.println(start_num); } //上傳資料到Google表單
}
else if (MM != LINE_num && MM != Google_num && MM != ThingSpeak_num ) {
start_num = 0; Serial.println(start_num); }
//若溫度高於40度,每五分鐘以LINE警告一次
if(Temp >= 40 && LINE_warning_NUM == 0){ LINE_warning(); LINE_warning_NUM = LINE_warning_NUM + 1 ; }
else if (LINE_warning_NUM > 0 && LINE_warning_NUM < 10 ){LINE_warning_NUM = LINE_warning_NUM + 1 ;}
else {LINE_warning_NUM = 0;}
}
//WIFI_connection
void WIFI_connection() {
WiFi.begin("book","12345678");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
for (int count = 0; count < 5; count++) {
digitalWrite(2,HIGH);
delay(500);
digitalWrite(2,LOW);
delay(500);
}
}
//取得時間並轉成int
void get_time() {
timeClient.update();
T_Time = timeClient.getFormattedTime();
Serial.println(T_Time);
T_Time_STR = T_Time.charAt(0);
H10 = T_Time_STR.toInt();
T_Time_STR = T_Time.charAt(1);
H01 = T_Time_STR.toInt();
HH = H10 * 10 + H01;
T_Time_STR = T_Time.charAt(3);
M10 = T_Time_STR.toInt();
T_Time_STR = T_Time.charAt(4);
M01 = T_Time_STR.toInt();
MM = M10 * 10 + M01;
//Serial.println((String("1=") + String(H10) + String("2=") + String(H01) + String("HH=") + String(HH)));
Serial.println((String("4=") + String(M10) + String("5=") + String(M01) + String("MM=") + String(MM)));
}
//取得DHT11資料
void get_data() {
Temp = dht.getTemperature();
HUM = dht.getHumidity();
if (isnan(Temp) || isnan(HUM) ) { //判斷是否有讀到數值
Serial.println("Failed to read from DHT sensor!");
return;
}
//Serial.println(Temp);
//Serial.println(HUM);
}
//上傳資料到ThingSpeak
void ThingSpeak() {
if(client.connect("api.thingspeak.com", 80)) {
String things_request = "GET /update?api_key=SPL5BSYPN18QOMQ8&field1="+ String(Temp)+"&field2="+ String(HUM)+"\r\n\r\n";
client.print(things_request);
client.stop();
}
Serial.println("ThingSpeak");
}
//上傳資料到Google表單
void Google() {
if (Secure_client.connect("docs.google.com", 443)) {
Secure_client.println("GET /forms/d/e/1FAIpQLSeKbv3Yo2r8WTlpk4y6RGOGYbQ3dQNvTScaESSaWREITVXw6g/formResponse?entry.1273328924="+ String(Temp)+"&entry.1741593155="+ String(HUM)+"&submit=Submit HTTP/1.1");
Secure_client.println("Host: docs.google.com");
Secure_client.println("Connection: close");
Secure_client.println();
Secure_client.stop();
}
Serial.println("Google");
}
//上傳資料到LINE
void LINE() {
if (Secure_client.connect("notify-api.line.me",443)) {
String data = "message="+String((String("\n四樓機房溫度:") + String(Temp) + String("\n四樓機房濕度:") + String(HUM)));
Secure_client.println("POST /api/notify HTTP/1.1");
Secure_client.println("Host: notify-api.line.me");
Secure_client.println("Authorization: Bearer DhryVqqdnWsStwHzraLj1NV90NMK96IgQWniF3omKub");
Secure_client.println("Content-Type: application/x-www-form-urlencoded");
Secure_client.print("Content-Length: ");
Secure_client.println(data.length());
Secure_client.println();
Secure_client.println(data);
Secure_client.stop();
}
Serial.println("LINE");
}
//溫度過高時,及時上傳資料到LINE
void LINE_warning() {
if (Secure_client.connect("notify-api.line.me",443)) {
String data = "message="+String((String("\n四樓機房溫度過高!!\n請特別注意!!\n四樓機房溫度:") + String(Temp) + String("\n四樓機房濕度:") + String(HUM)));
Secure_client.println("POST /api/notify HTTP/1.1");
Secure_client.println("Host: notify-api.line.me");
Secure_client.println("Authorization: Bearer DhryVqqdnWsStwHzraLj1NV90NMK96IgQWniF3omKub");
Secure_client.println("Content-Type: application/x-www-form-urlencoded");
Secure_client.print("Content-Length: ");
Secure_client.println(data.length());
Secure_client.println();
Secure_client.println(data);
Secure_client.stop();
}
Serial.println("LINE_warning");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment