BMP280是一款压力传感器,精度高,体积小。绝对精度可以达到0.2hPa,耗电低,只有2.7μA。它的压力范围是300~1100hPa,对应于海拔9000米~500米,工作电压为1.7V~3.6V,可使用I2C、SPI总线通讯。


SCL:I2C/SPI串行时钟线
SDA:I2C的串行数据线
3线SPI串行数据的输入输出端口
4线SPI的串行数据输入端口
CSB:片选引脚。高电平(默认)时,使用I2C通讯接口;低电平时,使用SPI通讯接口
SDO:I2C地址选择位。
4线SPI串行输出端口。
在使用I2C方式下,通过SDO引脚确定器件地址。SDO=0时,从机地址为0x76。SDO=1时,从机地址为0x77。
工作模式分为三种睡眠模式、触发模式和正常模式。
※睡眠模式:可以理解为不工作了
※触发模式:测一次之后传感器进入睡眠状态(目的也是为了节省资源)
内部寄存器设置

使用ESP8266接BMP280模块时,使用I2C方式通讯,BMP280的SDA接ESP8266的GPIO4(D2),BMP280的SCL接ESP8266的GPIO5(D1)。

Arduino的程序代码如下:
#include "DFRobot_BMP280.h"
#include "Wire.h"
typedef DFRobot_BMP280_IIC    BMP;
BMP   bmp(&Wire, BMP::eSdoLow);
// 海平面压力值
#define SEA_LEVEL_PRESSURE    1015.0f
// show last sensor operate status
void printLastOperateStatus(BMP::eStatus_t eStatus) {
  switch(eStatus) {
  case BMP::eStatusOK:    Serial.println("everything ok"); break;
  case BMP::eStatusErr:   Serial.println("unknow error"); break;
  case BMP::eStatusErrDeviceNotDetected:    Serial.println("device not detected"); break;
  case BMP::eStatusErrParameter:    Serial.println("parameter error"); break;
  default: Serial.println("unknow status"); break;
  }
}
void setup() {
  // 初始化串口波特率
  Serial.begin(115200);
  // 初始化BMP280
  bmp.reset();
  
  Serial.println("Start test ...");
  while(bmp.begin() != BMP::eStatusOK) {
    Serial.println("bmp faild");
    printLastOperateStatus(bmp.lastOperateStatus);
    delay(2000);
  }
  Serial.println("bmp is ok !");
  delay(100);
}
void loop() {
  // 获取温度
  float   temp = bmp.getTemperature();
  // 获取压力
  uint32_t    press = bmp.getPressure();
  // 计算海平面高度
  float   alti = bmp.calAltitude(SEA_LEVEL_PRESSURE, press);
  // 输出结果
  Serial.println();
  Serial.println("======== start print ========");
  Serial.print("temperature (unit Celsius): "); Serial.println(temp);
  Serial.print("pressure (unit pa):         "); Serial.println(press);
  Serial.print("altitude (unit meter):      "); Serial.println(alti);
  Serial.println("========  end print  ========");
  delay(1000);
}
测试中发现,温度一直慢慢在下降,花了很长时间才保持稳定,不知道是不是器件热特性有关。海拔高度数据倒是挺稳定的。由于本次测试使用Arduino中的库函数,所以代码很简单。后面我会使用51单片制作驱动代码。

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

