
板載 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程式是相同的,不用擔心)
輸入程式碼並上傳至開發板。
#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,即可查看輸出的數據。
