BMP280:测量温度、压力和高度
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
您好,欢迎来到本教程,我在 Arduino UNO 板和 OLED 显示器的帮助下使用 BMP280 测量温度、压力和高度。以下是其数据表中的一些 BMP280 关键参数:
所以对于这个项目,我们会像往常一样使用该模块在公制和英制系统中测量所有这些东西,我不确定单位,但你总是可以通过代码转换它们,这里是我们要的组件使用:
图> 图>
测试和故障排除:
连接模块后,最好测试库示例中的代码,其名称为“BMP280test”,如果未检测到您的模块,如下图所示:
您可以运行 i²c 扫描仪代码(但拔下任何其他 i²c 设备,如 LCD 或 OLED),如果您的模块没有损坏,或者没有焊接问题,您将看到该设备已被扫描仪检测到:
现在注意地址并转到您的库 c++ 文件,库通常安装在“Documents/Arduino/Libraries”中:
并用合适的编辑器打开它,我使用的是 Dev c++
然后转到“41”行,_i2caddr 将“a”更改为您在串行监视器上找到的地址:
全部保存并关闭,该库旨在处理具有 0x77 作为 i²c 地址的模块,但我使用的模块具有 0x76。
再次运行测试代码:
测试图片: 图>
我希望它对你有用,如果你有任何问题,请在评论中留言。
代码
- bmp280_Serial_metric.ino
- bmp280_Serial_Imperial.ino
- bmp280_OLED_m.ino
- bmp280_OLED_US.ino
bmp280_Serial_metric.inoArduino
/* 此代码与 Adafruit BMP280(公制)一起使用 * 它测量温度和压力,并将它们显示在带有海拔高度的串行监视器上 * 这是 Adafruit 示例代码的修改版本 * 请参阅 www.surtrtech .com 或 SurtrTech Youtube 频道 */#includeAdafruit_BMP280 bmp; // I2C Interfacevoid setup() { Serial.begin(9600); Serial.println(F("BMP280 测试")); if (!bmp.begin()) { Serial.println(F("找不到有效的 BMP280 传感器,请检查接线!"));而 (1); } /* 数据表中的默认设置。 */ bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* 操作模式。*/ Adafruit_BMP280::SAMPLING_X2, /* 温度过采样 */ Adafruit_BMP280::SAMPLING_X16, /* 压力过采样 */ Adafruit::_BMP280,/*Filtering. */ Adafruit_BMP280::STANDBY_MS_500); /* 待机时间。 */}void loop() { Serial.print(F("Temperature =")); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print(F("压力 =")); Serial.print(bmp.readPressure()/100); //以hPa为单位显示压力,您可以更改单位 Serial.println(" hPa"); Serial.print(F("大约高度 =")); Serial.print(bmp.readAltitude(1019.66)); //“1019.66”是您所在地区白天海平面的压力(hPa) Serial.println(" m"); //如果你不知道,修改它直到你得到你当前的高度 Serial.println();延迟(2000);}
bmp280_Serial_Imperial.inoArduino
/* 此代码用于 Adafruit BMP280 (Imperial) * 它测量温度和压力,并在串行监视器上显示高度 * 这是 Adafruit 示例代码的修改版本 * 请参阅 www.surtrtech .com 或 SurtrTech Youtube 频道 */#includeAdafruit_BMP280 bmp; // I2Cvoid setup() { Serial.begin(9600); Serial.println(F("BMP280 测试")); if (!bmp.begin()) { Serial.println(F("找不到有效的 BMP280 传感器,请检查接线!"));而 (1); } /* 数据表中的默认设置。 */ bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* 操作模式。*/ Adafruit_BMP280::SAMPLING_X2, /* 温度过采样 */ Adafruit_BMP280::SAMPLING_X16, /* 压力过采样 */ Adafruit::_BMP280,/*Filtering. */ Adafruit_BMP280::STANDBY_MS_500); /* 待机时间。 */}void loop() { float f =bmp.readTemperature()*9/5 + 32; //从 C 到 F 的转换 Serial.print(F("Temperature =")); Serial.print(f); Serial.println(" *F");浮动 P =bmp.readPressure()/3386.39; //以英寸汞柱显示压力,您可以更改单位 Serial.print(F("Pressure =")); Serial.print(P); Serial.println(" inHg");浮点 A =bmp.readAltitude(1019.66)*3.28084; //“1019.66”是您所在地区白天海平面的压力(hPa) Serial.print(F("Approx height =")); //如果你不知道,修改它直到你得到你当前的高度 Serial.print(A); Serial.println("英尺"); Serial.println();延迟(2000);}
bmp280_OLED_m.inoArduino
/* 此代码用于 Adafruit BMP280 和 OLED 屏幕(公制) * 测量温度和压力,并在 OLED 显示屏上显示高度 * 这是 Adafruit 示例代码的修改版本 * 请参阅www.surtrtech.com 或 SurtrTech Youtube 频道 */#include//OLED 和 BMP280 的库#include #include #define SCREEN_WIDTH 128 // OLED 显示宽度,以像素为单位#define SCREEN_HEIGHT 32 // OLED 显示高度,以像素为单位#define OLED_RESET -1 // 重置引脚#(如果共享 Arduino 重置引脚,则为 -1)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //声明显示名称(display)Adafruit_BMP280 bmp;void setup() { bmp.begin(); //启动bmp display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //启动OLED显示屏 display.clearDisplay();显示。显示(); display.setTextColor(WHITE); display.setTextSize(1); display.print("SurtrTech"); //显示名称,可以去掉也可以替换 display.setCursor(32,12); display.setTextSize(2); display.println("BMP280");显示。显示(); delay(2000);}void loop() { display.clearDisplay(); float T =bmp.readTemperature(); //读取C中的温度 float P =bmp.readPressure()/100; //以Pa为单位读取压力并转换为hPa float A =bmp.readAltitude(1019.66); //计算海拔高度,“1019.66”是您所在地区白天海平面的压力(hPa)//如果您不知道它,请修改它直到获得您所在位置的海拔高度 display.setCursor(0 ,0); //oled显示,只需要玩文字大小和光标就可以得到你想要的显示 display.setTextColor(WHITE); display.setTextSize(2); display.print("Temp"); display.setCursor(0,18); display.print(T,1); display.setCursor(50,17); display.setTextSize(1); display.print("C"); display.setTextSize(1); display.setCursor(65,0); display.print("Pres"); display.setCursor(65,10);显示.打印(P); display.setCursor(110,10); display.print("hPa"); display.setCursor(65,25); display.print("Alt"); display.setCursor(90,25); display.print(A,0); display.setCursor(110,25); display.print("m");显示。显示();延迟(2000);}
bmp280_OLED_US.inoArduino
/* 此代码用于 Adafruit BMP280 和 OLED 屏幕(英制) * 测量温度和压力,并在 OLED 显示屏上显示高度 * 这是 Adafruit 示例代码的修改版本 * 参考www.surtrtech.com 或 SurtrTech Youtube 频道 */ #include//OLED 和 BMP280 的库#include #include #define SCREEN_WIDTH 128 // OLED 显示宽度,以像素为单位#define SCREEN_HEIGHT 32 // OLED 显示高度,以像素为单位#define OLED_RESET -1 // 重置引脚#(如果共享 Arduino 重置引脚,则为 -1)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //声明显示名称(display)Adafruit_BMP280 bmp;void setup() { bmp.begin(); //启动bmp display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //启动OLED显示屏 display.clearDisplay();显示。显示(); display.setTextColor(WHITE); display.setTextSize(1); display.print("SurtrTech"); //显示名称,可以去掉也可以替换 display.setCursor(32,12); display.setTextSize(2); display.println("BMP280");显示。显示(); delay(2000);}void loop() { display.clearDisplay(); float T =bmp.readTemperature()*9/5 + 32; //读取C中的温度并转换为F float P =bmp.readPressure()/3386.39; //以Pa为单位读取压力并转换为英寸汞柱浮点A =bmp.readAltitude(1019.66)*3.28084; //计算海拔高度,“1019.66”是您所在地区白天海平面的压力(hPa)//如果您不知道它,只需修改它直到您获得您所在位置的海拔高度 display.setCursor(0 ,0); //oled显示,只需要玩文字大小和光标就可以得到你想要的显示 display.setTextColor(WHITE); display.setTextSize(2); display.print("Temp"); display.setCursor(0,18); display.print(T,1); display.setCursor(50,17); display.setTextSize(1); display.print("F"); display.setTextSize(1); display.setCursor(65,0); display.print("Pres"); display.setCursor(65,10);显示.打印(P); display.setCursor(100,10); display.print("inHg"); display.setCursor(65,25); display.print("Alt"); display.setCursor(90,25); display.print(A,0); display.setCursor(110,25); display.print("ft");显示。显示();延迟(2000);}
BMP280_Adafruit_library
您可能想要更改教程中的内容https://github.com/adafruit/Adafruit_BMP280_LibraryAdafruit GFX 库
https://github.com/adafruit/Adafruit-GFX-LibraryAdafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306示意图
两个模块均采用i²c接口,SDA/SCL采用A4和A5,BMP280采用5v供电,OLED采用3.3v供电。制造工艺