ENS160 + AHT21 CO2、溫溼度傳感器 快速使用教學

板載 ENS160 + AHT21 ,自帶電平轉換,兼容5~3.3V的系統,可以檢測溫濕度、CO2含量,是空氣品質檢測的最佳方案。

規格

電源:3.3~5V
濕度精度±2%RH(25℃)
溫度精度±0.3℃
AHT21 I2C地址:0x38
ENS160 I2C地址:0x53

點我購買本模組

硬體接線

將本模組下方列出的PIN腳連接至你的開發板對應的PIN腳,剩餘的接腳不須連接。

  • SDA(I2C)
  • SCL(I2C)
  • VIN(3.3~5V)
  • GND

程式碼

請先在Arduino IDE安裝下列兩個程式庫:

  • ENS160 – Adafruit Fork
  • DFRobot_AHT20(AHT20、AHT21程式是相同的,不用擔心)

如何在 Arduino IDE 中安裝程式庫

輸入程式碼並上傳至開發板。

#include <Wire.h>
#include "ScioSense_ENS160.h"  // 引入ENS160函式庫
//ScioSense_ENS160      ens160(ENS160_I2CADDR_0);
ScioSense_ENS160      ens160(ENS160_I2CADDR_1);  // 使用ENS160的I2C地址1,為0x53

#include "DFRobot_AHT20.h"  // 引入AHT20函式庫

DFRobot_AHT20 aht20;  // 建立AHT20物件

/*-------------------------------------------------------------------
  設定函數
  初始化感測器
 ------------------------------------------------------------------*/
void setup() {
  Serial.begin(115200);  // 設定序列埠傳輸速率為115200

  while(!Serial){
    // 等待USB序列埠連接,只對原生USB埠有效
  }
  
  uint8_t status;
  while((status = aht20.begin()) != 0){  // 初始化AHT20感測器,若失敗則持續嘗試
    Serial.print("AHT20感測器初始化失敗。錯誤狀態 : ");
    Serial.println(status);
    delay(1000);
  }

  Serial.println("----------------------------");
  Serial.println("ENS160 - 數位空氣品質感測器");
  Serial.println();
  Serial.println("標準模式下的感測器讀取");
  Serial.println();
  Serial.println("----------------------------");
  delay(1000);

  Serial.print("ENS160...");
  ens160.begin();  // 初始化ENS160感測器
  Serial.println(ens160.available() ? "完成." : "失敗!");

  if (ens160.available()) {
    // 打印ENS160版本信息
    Serial.print("\t版本: "); Serial.print(ens160.getMajorRev());
    Serial.print("."); Serial.print(ens160.getMinorRev());
    Serial.print("."); Serial.println(ens160.getBuild());
  
    Serial.print("\t標準模式 ");
    Serial.println(ens160.setMode(ENS160_OPMODE_STD) ? "完成." : "失敗!");
  }
}

/*-------------------------------------------------------------------
  主循環函數
  每1000ms循環一次並進行測量
 ------------------------------------------------------------------*/
void loop() {
  
  if (ens160.available()) {  // 若ENS160可用,則進行測量並輸出結果
    ens160.measure(true);
    ens160.measureRaw(true);
  
    Serial.print("空氣品質指數(AQI): "); Serial.println(ens160.getAQI());
    Serial.print("總揮發性有機化合物(TVOC): "); Serial.print(ens160.getTVOC()); Serial.println("ppb");
    Serial.print("二氧化碳等效濃度(eCO2): "); Serial.print(ens160.geteCO2()); Serial.println("ppm");
    Serial.print("電阻值HP0: "); Serial.print(ens160.getHP0()); Serial.println("Ohm");
    Serial.print("電阻值HP1: "); Serial.print(ens160.getHP1()); Serial.println("Ohm");
    Serial.print("電阻值HP2: "); Serial.print(ens160.getHP2()); Serial.println("Ohm");
    Serial.print("電阻值HP3: "); Serial.print(ens160.getHP3()); Serial.println("Ohm");
  }

  if(aht20.startMeasurementReady(/* crcEn = */true)){  // 若AHT20可進行測量,則輸出溫濕度數據
    Serial.print("溫度(-40~85°C): ");
    Serial.print(aht20.getTemperature_C());  // 獲取攝氏溫度
    Serial.print("°C, ");
    Serial.print(aht20.getTemperature_F());  // 獲取華氏溫度
    Serial.println("°F");
    Serial.print("濕度(0~100): ");
    Serial.print(aht20.getHumidity_RH());  // 獲取相對濕度
    Serial.println(" %RH");
  }

  Serial.println("----------------------------");
  delay(1000);  // 延遲1000ms
}

切換到序列埠監控窗,鮑率選擇115200,即可查看輸出的數據。


分類:

作者: