跳到內容
  • 版面
  • 最新
  • 標籤
  • 熱門
  • 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-數據回傳序列埠

AHT15-數據回傳序列埠

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

    AHT15溫濕度感測器數據回傳序列埠_教案.pdf

    #include <Wire.h>  // 匯入Wire函式庫,用於I2C通訊
    
    #define AHT15_ADDRESS 0x38  // 定義AHT15感測器的I2C地址
    #define AHT15_RESET 0xBA  // 定義重置命令的值
    #define AHT15_INIT 0xBE  // 定義初始化命令的值
    #define AHT15_START_MEASUREMENT 0xAC  // 定義開始測量命令的值
    
    void setup() {  // 設定函數,在程式開始時執行一次
      Wire.begin();  // 啟用Wire函式庫
      Serial.begin(115200);  // 啟動序列通訊鮑率115200
      
      // Reset sensor
      Wire.beginTransmission(AHT15_ADDRESS);  // 開始向AHT15_ADDRESS發送數據
      Wire.write(AHT15_RESET);  // 發送重置命令
      if (Wire.endTransmission() != 0) {  // 如果傳輸結束並返回錯誤
        Serial.println("重置錯誤");  // 顯示錯誤信息
        while(1);  // 進入無窮迴圈
      }
      delay(20);  // 等待20毫秒
      
      // Initialize sensor
      Wire.beginTransmission(AHT15_ADDRESS);  // 開始向AHT15_ADDRESS發送數據
      Wire.write(AHT15_INIT);  // 發送初始化命令
      Wire.write(0x08);  // 發送額外的初始化數據
      Wire.write(0x00);  // 發送額外的初始化數據
      if (Wire.endTransmission() != 0) {  // 如果傳輸結束並返回錯誤
        Serial.println("初始化錯誤");  // 顯示錯誤信息
        while(1);  // 進入無窮迴圈
      }
      delay(10);  // 等待10毫秒
    }
    
    void loop() {  // 主迴圈,會不斷重複執行
      // Start measurement
      Wire.beginTransmission(AHT15_ADDRESS);  // 開始向AHT15_ADDRESS發送數據
      Wire.write(AHT15_START_MEASUREMENT);  // 發送開始測量命令
      Wire.write(0x33);  // 發送額外的開始測量數據
      Wire.write(0x00);  // 發送額外的開始測量數據
      if (Wire.endTransmission() != 0) {  // 如果傳輸結束並返回錯誤
        Serial.println("測量失敗");  // 顯示錯誤信息
        delay(1000);  // 等待1000毫秒
        return;  // 返回,跳過此次迴圈的剩餘部分
      }
      delay(80);  // 等待80毫秒以完成測量
      
      // Read data
      Wire.requestFrom(AHT15_ADDRESS, 6);  // 從AHT15_ADDRESS請求6個字節的數據
      if (Wire.available() != 6) {  // 如果可用數據不是6個字節
        Serial.println("讀取錯誤");  // 顯示錯誤信息
        return;  // 返回,跳過此次迴圈的剩餘部分
      }
      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");  // 顯示"°C"
      
      delay(2000);  // 等待2000毫秒
    }
    

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

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


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

    • 沒有帳戶? 註冊

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