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秒更新一次 }
测试结果:
因为都能测试温度,刚好可以做个对比。显然差别不是很大,说明这两款传感器测量温度还是挺靠谱的。