跳到內容
  • 版面
  • 最新
  • 標籤
  • 熱門
  • World
  • 使用者
  • 群組
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 預設 (Yeti)
  • 未使用主題設計
Collapse
品牌標誌
  1. 首頁
  2. ESP32教學與討論
  3. AHT15溫濕度感測器
  4. AHT15-LINE應用

AHT15-LINE應用

已排程 已置頂 已鎖定 已移動 AHT15溫濕度感測器
1 貼文 1 Posters 12 瀏覽
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • A 離線
    A 離線
    admin
    寫於 2025年3月4日 上午7:23 最後由 編輯
    #1

    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);
    }
    

    平台使用上有任何問題歡迎寄信至4B0G0033@stust.edu.tw詢問

    1 條回覆 最後回覆
    0
    回覆
    • 在新貼文中回覆
    登入後回覆
    • 從舊到新
    • 從新到舊
    • 最多點贊

    1/1

    2025年3月4日 上午7:23


    風狂logo 藏碳logo 南台logo SDGS2 SDGS7 SDGS12
    • 登入

    • 沒有帳戶? 註冊

    Powered by NodeBB Contributors
    1 / 1
    • 第一個貼文
      1/1
      最後的貼文
    0
    • 版面
    • 最新
    • 標籤
    • 熱門
    • World
    • 使用者
    • 群組