ESP8266 and MS5611 barometric pressure sensor example

In this example we look at the MS5611 barometric pressure sensor

This barometric pressure sensor is optimized for altimeters and variometers with an altitude resolution of 10 cm. The sensor module includes a high linearity pressure sensor and an ultra-low power 24 bit ΔΣ ADC with internal factory calibrated coefficients. It provides a precise digital 24 Bit pressure and temperature value and different operation modes that allow the user to optimize for conversion speed and current consumption. A high resolution temperature output allows the implementation of an altimeter/thermometer function without any additional sensor.

 

features

 

  • High resolution module, 10 cm
  • Fast conversion down to 1 ms
  • Low power, 1 µA (standby < 0.15 µA)
  • QFN package 5.0 x 3.0 x 1.0 mm3
  • Supply voltage 1.8 to 3.6 V
  • Integrated digital pressure sensor (24 bit ΔΣ ADC)
  • Operating range: 10 to 1200 mbar, -40 to +85 °C
  • I2C and SPI interface up to 20 MHz
  • No external components (Internal oscillator)
  • Excellent long term stability

 

 

Connection

Wemos Module connection
3.3v Vcc
Gnd Gnd
SCL SCL
SDA SDA

 

Code

This example is adapted from the https://github.com/jarzebski/Arduino-MS5611 library

[codesyntax lang=”cpp”]

#include <Wire.h>
#include <MS5611.h>

MS5611 ms5611;

double referencePressure;

void setup() 
{
  Serial.begin(9600);

  // Initialize MS5611 sensor
  Serial.println("Initialize MS5611 Sensor");

  while(!ms5611.begin())
  {
    Serial.println("Could not find a valid MS5611 sensor, check wiring!");
    delay(500);
  }

  // Get reference pressure for relative altitude
  referencePressure = ms5611.readPressure();

  // Check settings
  checkSettings();
}

void checkSettings()
{
  Serial.print("Oversampling: ");
  Serial.println(ms5611.getOversampling());
}

void loop()
{
  // Read raw values
  uint32_t rawTemp = ms5611.readRawTemperature();
  uint32_t rawPressure = ms5611.readRawPressure();

  // Read true temperature & Pressure
  double realTemperature = ms5611.readTemperature();
  long realPressure = ms5611.readPressure();

  // Calculate altitude
  float absoluteAltitude = ms5611.getAltitude(realPressure);
  float relativeAltitude = ms5611.getAltitude(realPressure, referencePressure);

  Serial.println("--");

  Serial.print(" rawTemp = ");
  Serial.print(rawTemp);
  Serial.print(", realTemp = ");
  Serial.print(realTemperature);
  Serial.println(" *C");

  Serial.print(" rawPressure = ");
  Serial.print(rawPressure);
  Serial.print(", realPressure = ");
  Serial.print(realPressure);
  Serial.println(" Pa");

  Serial.print(" absoluteAltitude = ");
  Serial.print(absoluteAltitude);
  Serial.print(" m, relativeAltitude = ");
  Serial.print(relativeAltitude);    
  Serial.println(" m");

  delay(1000);
}

[/codesyntax]

 

Output

Open the serial monitor and you will see something like this

Temp = 25.85 *C
Pressure = 101704 Pa
absoluteAltitude = -31.51 m, relativeAltitude = -0.75 m

Temp = 27.66 *C
Pressure = 101710 Pa
absoluteAltitude = -32.00 m, relativeAltitude = -1.24 m

Temp = 28.35 *C
Pressure = 101703 Pa
absoluteAltitude = -31.42 m, relativeAltitude = -0.66 m

Temp = 27.80 *C
Pressure = 101693 Pa
absoluteAltitude = -30.59 m, relativeAltitude = 0.17 m

Temp = 27.47 *C
Pressure = 101687 Pa
absoluteAltitude = -30.09 m, relativeAltitude = 0.66 m

 

Link

GY-63 MS5611-01BA03 Precision MS5611 Atmospheric Pressure Sensor Module Height Sensor Module