ESP8266-Arduino编程实例-MS5611气压传感器驱动

MS5611气压传感器驱动

1、MS5611介绍

MS5611气压传感器针对高度计和变异计进行了优化,高度分辨率为 10 厘米。 传感器模块包括一个高线性压力传感器和一个具有内部工厂校准系数的超低功耗 24 位 ΔΣ ADC。 它提供精确的 24 位数字压力和温度值以及不同的操作模式,允许用户优化转换速度和电流消耗。 高分辨率温度输出允许在没有任何附加传感器的情况下实现高度计/温度计功能。

在这里插入图片描述

MS5611具有如下特性:

  • 高分辨率模块,10 cm
  • 快速转换低至 1 毫秒
  • 低功耗,1 µA(待机 < 0.15 µA)
  • QFN 封装 5.0 x 3.0 x 1.0 mm3
  • 电源电压 1.8 至 3.6 V
  • 集成数字压力传感器(24 位 ΔΣ ADC)
  • 工作范围:10 至 1200 mbar,-40 至 +85 °C
  • I2C 和 SPI 接口高达 20 MHz
  • 无外部元件(内部振荡器)
  • 出色的长期稳定性

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • MS5611传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用如下驱动库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#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);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126555287