AHT15LINE應用_教案.pdf
#include <Wire.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#define AHT15_ADDRESS 0x38
#define AHT15_RESET 0xBA
#define AHT15_INIT 0xBE
#define AHT15_START_MEASUREMENT 0xAC
char SSID[] = "Denny"; // WiFi名稱
char PASSWORD[] = "0971711565"; // WiFi密碼
String Linetoken = "iIFWvROwfBrYC7jVTvrVlmfJfJgVwiwDtvcdki9X2k6"; // LINE通知的權杖
WiFiClientSecure client; // 宣告一個加密的WiFi 連線端
char host[] = "notify-api.line.me"; // 宣告Line API 網站
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.print("Connecting Wifi: ");
Serial.println(SSID);
WiFi.begin(SSID, PASSWORD); // 連接到WiFi
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
// 連線成功,顯示取得的IP
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ip = WiFi.localIP();
Serial.println(ip);
client.setInsecure(); // 讀者若使用ESP32 1.0.6 版核心須加上這句避免SSL 問題
// Reset sensor
Wire.beginTransmission(AHT15_ADDRESS);
Wire.write(AHT15_RESET);
Wire.endTransmission();
delay(20);
// Initialize sensor
Wire.beginTransmission(AHT15_ADDRESS);
Wire.write(AHT15_INIT);
Wire.write(0x08);
Wire.write(0x00);
Wire.endTransmission();
delay(10);
}
void loop() {
// Start measurement
Wire.beginTransmission(AHT15_ADDRESS);
Wire.write(AHT15_START_MEASUREMENT);
Wire.write(0x33);
Wire.write(0x00);
Wire.endTransmission();
delay(80);
// Read data
Wire.requestFrom(AHT15_ADDRESS, 6);
uint8_t data[6];
for (int i = 0; i < 6; i++) {
data[i] = Wire.read();
}
// Calculate humidity and temperature
uint32_t rawHumidity = ((uint32_t)data[1] << 12) | ((uint32_t)data[2] << 4) | (data[3] >> 4);
float humidity = rawHumidity * 100.0 / (1 << 20);
uint32_t rawTemperature = (((uint32_t)data[3] & 0xF) << 16) | ((uint32_t)data[4] << 8) | data[5];
float temperature = ((200.0 * rawTemperature) / (1 << 20)) - 50;
// Print results
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% , ");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("°C");
if ((int)temperature >= 30 || (int)humidity >= 80) {
// 組成Line 訊息
String message = "檢測環境發生異常,請協助儘速派人查看處理,目前環境狀態:";
message += "\r\n 溫度=" + String((int)temperature) + "℃";
message += "\r\n 濕度=" + String((int)humidity) + " H";
Serial.println(message);
// 連線到Line API 網站
if (client.connect(host, 443)) { // 嘗試連接到LINE API
int LEN = message.length(); // 計算訊息的長度
// (1) 傳遞網站
String url = "/api/notify"; // Line API 網址
client.println("POST " + url + " HTTP/1.1"); // 向LINE API發送一個HTTP POST請求
client.print("Host: "); client.println(host); // 在HTTP請求的標頭中加入主機名稱
// (2) 資料表頭
client.println("Authorization: Bearer " + Linetoken); // 在HTTP請求的標頭中加入授權權杖
// (3) 內容格式
client.println("Content-Type: application/x-www-form-urlencoded"); // 設定HTTP請求的內容類型
// (4) 資料內容
client.println("Content-Length: " + String((LEN + 8)) ); // 設定HTTP請求的內容長度
client.println(); // 空行,表示標頭和內容的分隔
client.println("message=" + message); // 將訊息加入到HTTP請求的內容中
// 等候回應
delay(2000); // 讓程式暫停2秒,等待LINE API的回應
String response = client.readString(); // 讀取LINE API的回應
// 顯示傳遞結果
Serial.println(response); // 將LINE API的回應輸出到序列埠
client.stop(); // 關閉與LINE API的連接
}
else {
// 傳送失敗
Serial.println("connected fail");
}
}
delay(10000);
}