AHT20是测量温湿度的传感器,BMP280是测量气压、温度的传感器,因为都是用I2C总线,且地址不同,所以可以组合使用。

测试依旧使用ESP8266,在Arduino下测试,接线方式:
BMP280 & AHT20 ESP8266
---------------------------------
VDD 3.3V
GND GND
SCL D1(GPIO5)
SDA D2(GPIO4)
---------------------------------
代码如下:
/**
BMP280:
工作电压:BME:1.7~3.6V;BMP:5V(实测3.3V也可以)
温度测量范围:0C°~65C°
温度测量误差:±0.5C° MAX±1C°;分辨率0.1C°
相对湿度测量范围:0%~100% 湿度响应时间:大于1S
相对湿度测量误差:±2%;湿度迟滞:±1%;分辨率:0.8%;
气压测量范围:300~1100hPa(百帕斯卡)
气压测量误差:±1hPa;分辨率:0.18Pa
数字接口类型:IIC(从模式3.4MHz)或者SPI(3线或四线制,从模式10MHz)
VCC --- 电源正
GND --- 地
SCL --- I2C / SPI
3线SPI串行接口输入输出端口
4线SPI串行接口输入端口
CSB --- 片选。
高电平(默认):IIC接口方式
低电平:SPI接口方式
SDO --- I2C地址选择位;4线SPI串行输出端口
IIC模式下:0 - 地址0x76;1 - 地址0x77
测试接线:
BMP280 & AHT20 ESP8266
---------------------------------
VDD 3.3V
GND GND
SCL D1(GPIO5)
SDA D2(GPIO4)
---------------------------------
*/
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <AHT20.h>
AHT20 aht20;
Adafruit_BMP280 bmp; // 创建传感器对象
void setup() {
Serial.begin(115200); // 初始化串口
while (!Serial); // 等待串口就绪(仅调试需)
if (!bmp.begin(0x76)) { // 初始化传感器(地址0x76或0x77)
//Serial.println("BMP280未找到!检查接线和地址!");
//while (1); // 停止运行
if (!bmp.begin(0x77)) { // 初始化传感器(地址0x76或0x77)
Serial.println("\nBMP280未找到!检查接线和地址!");
while (1); // 停止运行
} else {
Serial.println("\n找到BMP280(地址0x77)");
}
} else {
Serial.println("\n找到BMP280(地址0x76)");
}
if (aht20.begin() == false) {
Serial.println("未找到AHT20.");
while(true);
} else {
Serial.println("找到AHT20(地址0x38).");
}
// 配置传感器参数(可选)
bmp.setSampling(
Adafruit_BMP280::MODE_NORMAL, // 工作模式(持续测量)
Adafruit_BMP280::SAMPLING_X2, // 温度采样精度
Adafruit_BMP280::SAMPLING_X16, // 气压采样精度
Adafruit_BMP280::FILTER_X16, // 滤波等级
Adafruit_BMP280::STANDBY_MS_500 // 待机时间
);
Serial.println("BMP280初始化成功!");
}
void read_aht20(void) {
float temperature = aht20.getTemperature();
float humidity = aht20.getHumidity();
Serial.println("-----AHT20-----: ");
Serial.print(" 温度: ");
Serial.print(temperature, 2);
Serial.println(" C\t");
Serial.print(" 湿度: ");
Serial.print(humidity, 2);
Serial.println("% RH");
}
void read_bmp280(void) {
// 读取并打印数据
Serial.println("-----BMP280-----: ");
Serial.print(" 温度: ");
Serial.print(bmp.readTemperature()); // 摄氏度
Serial.println(" °C");
Serial.print(" 气压: ");
Serial.print(bmp.readPressure() / 100.0); // 转换为hPa
Serial.println(" hPa");
Serial.print(" 海拔: ");
Serial.print(bmp.readAltitude(1013.25)); // 相对海平面高度(需校准)
Serial.println(" m");
}
void loop() {
read_aht20();
read_bmp280();
Serial.println("");
Serial.println("");
delay(2000); // 2秒更新一次
}
测试结果:

因为都能测试温度,刚好可以做个对比。显然差别不是很大,说明这两款传感器测量温度还是挺靠谱的。
我要赚赏金
