ESP8266-Arduino编程实例-HP303B数字气压传感器驱动

HP303B数字气压传感器驱动

1、HP303B介绍

HP303B是一款高精度、低电流消耗的微型数字气压传感器,能够测量压力和温度。压力传感器元件基于电容传感原理,可确保温度变化期间的高精度。小巧的封装使 HP303B 成为移动应用和可穿戴设备的理想选择。

内部信号处理器将压力和温度传感器元件的输出转换为 24 位结果。每个单元都单独校准,在此过程中计算的校准系数存储在校准寄存器中。应用中使用系数将测量结果转换为高精度压力和温度值。

结果 FIFO 可以存储多达 32 个测量结果,从而降低主机处理器的轮询率。传感器测量和校准系数可通过串行 I2C 或 SPI 接口获得。测量状态由 SDO 引脚上的状态位或中断指示。
在这里插入图片描述

HP303B具有如下特性:

  • 操作范围:压力:300 –1200 hPa。 温度:-40 – 85 °C。
  • 压力传感器精度:± 0.005 hPa(或±0.05 m)(高精度模式)。
  • 相对精度:± 0.06 hPa(或 ±0.5 m)
  • 绝对精度:± 1 hPa(或 ±8 m)
  • 温度精度:± 0.5°C。
  • 压力温度灵敏度:0.5Pa/K
  • 测量时间:典型值:标准模式 (16x) 为 27.6 ms。 最小值:低精度模式为 3.6 ms。
  • 平均电流消耗:压力测量1.7 µA,温度测量1.5 µA @1Hz 采样率,待机:0.5 µA。
  • 电源电压:VDDIO:1.2 – 3.6 V,VDD:1.7 – 3.6 V。
  • 操作模式:命令(手动)、后台(自动)和待机。
  • 校准:使用系数单独校准以进行测量校正。
  • FIFO:存储多达 32 个压力或温度测量值。
  • 接口:I2C 和 SPI(均带有可选中断)

2、硬件准备

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

硬件接线如下:

传感器引脚 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
#include <LOLIN\_HP303B.h>

// HP303B Opject
LOLIN_HP303B HP303BPressureSensor;


void setup()
{
Serial.begin(115200);
while (!Serial);
HP303BPressureSensor.begin();
Serial.println("Init complete!");
}


void loop()
{
int32\_t temperature;
int32\_t pressure;
int16\_t oversampling = 7;
int16\_t ret;
Serial.println();

ret = HP303BPressureSensor.measureTempOnce(temperature, oversampling);

if (ret != 0)
{
//Something went wrong.
//Look at the library code for more information about return codes
Serial.print("FAIL! ret = ");
Serial.println(ret);
}
else
{
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" degrees of Celsius");
}

//Pressure measurement behaves like temperature measurement
//ret = HP303BPressureSensor.measurePressureOnce(pressure);
ret = HP303BPressureSensor.measurePressureOnce(pressure, oversampling);
if (ret != 0)
{
//Something went wrong.
//Look at the library code for more information about return codes
Serial.print("FAIL! ret = ");
Serial.println(ret);
}
else
{
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" Pascal");
}

//Wait some time
delay(500);
}

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