跳到內容
  • 版面
  • 最新
  • 標籤
  • 熱門
  • 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-MQTT

AHT15-MQTT

已排程 已置頂 已鎖定 已移動 AHT15溫濕度感測器
aht15溫濕度感測器mqttesp32
2 貼文 1 Posters 21 瀏覽
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • adminA 離線
    adminA 離線
    admin
    寫於 最後由 編輯
    #1

    AHT15溫濕度感測器MQTT應用_教案.pdf

    平台使用上有任何問題歡迎寄信至[email protected]詢問

    1 條回覆 最後回覆
    0
    • adminA 離線
      adminA 離線
      admin
      寫於 最後由 編輯
      #2
      #include <Wire.h>
      #include <PubSubClient.h> //請先安裝PubSubClient程式庫
      #include <WiFi.h>
      // ------ 以下修改成你自己的WiFi帳號密碼 ------
      char* ssid = "SSID";
      char* password = "SSIDpassword";
      char* MQTTServer = "mqttgo.io";//免註冊MQTT伺服器
      int MQTTPort = 1883;//MQTT Port
      char* MQTTUser = "";//不須帳密
      char* MQTTPassword = "";//不須帳密
      //推播主題1:推播溫度(記得改Topic)
      char* MQTTPubTopic1 = "Topic/room/溫度";
      //推播主題2:推播濕度(記得改Topic)
      char* MQTTPubTopic2 = "Topic/room/濕度";
      WiFiClient WifiClient;
      PubSubClient MQTTClient(WifiClient);
      
      #define AHT15_ADDRESS 0x38
      #define AHT15_RESET 0xBA
      #define AHT15_INIT 0xBE
      #define AHT15_START_MEASUREMENT 0xAC
      
      void setup() {
        Wire.begin();
        Serial.begin(115200);
       
       //開始WiFi連線
        WifiConnecte();
      
        //開始MQTT連線
        MQTTConnecte();
      
        // 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() {
      
        //如果WiFi連線中斷,則重啟WiFi連線
        if (WiFi.status() != WL_CONNECTED) {
          WifiConnecte();
        }
      
        //如果MQTT連線中斷,則重啟MQTT連線
        if (!MQTTClient.connected()) {
          MQTTConnecte();
        }
      
        // 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;
        
         MQTTClient.publish(MQTTPubTopic1, String(temperature).c_str());
        MQTTClient.publish(MQTTPubTopic2, String(humidity).c_str());
        Serial.print("溫度:");
        Serial.print(temperature);
        Serial.print("℃, 濕度:");
        Serial.print(humidity);
        Serial.println("%");
        Serial.println("溫溼度已推播到MQTT Broker");
      
        delay(10000);
       
      }
      
      //開始WiFi連線
      void WifiConnecte() {
        //開始WiFi連線
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
          delay(500);
          Serial.print(".");
        }
        Serial.println("WiFi連線成功");
        Serial.print("IP Address:");
        Serial.println(WiFi.localIP());
      }
      
      //開始MQTT連線
      void MQTTConnecte() {
        MQTTClient.setServer(MQTTServer, MQTTPort);
        while (!MQTTClient.connected()) {
          //以亂數為ClietID
          String  MQTTClientid = "esp32-" + String(random(1000000, 9999999));
          if (MQTTClient.connect(MQTTClientid.c_str(), MQTTUser, MQTTPassword)) {
            //連結成功,顯示「已連線」。
            Serial.println("MQTT已連線");
          } else {
            //若連線不成功,則顯示錯誤訊息,並重新連線
            Serial.print("MQTT連線失敗,狀態碼=");
            Serial.println(MQTTClient.state());
            Serial.println("五秒後重新連線");
            delay(5000);
          }
        }
      }
      
      
      
      

      平台使用上有任何問題歡迎寄信至[email protected]詢問

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


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

      • 沒有帳戶? 註冊

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