简介
LPS27HHW是一款压阻式数字型气压传感器,传感器内部有凝胶保护IC,使得传感器可以长期在潮湿恶劣环境中工作。LPS27HHW具有24位压力数据输出和16位温度数据输出,内部的温度补偿算法使得气压数据不会受到温度变化的影响。传感器测量范围260hPa-1260hPa,绝对压力精度为0.5hPa,可用于便携式高度计、气压计、气象站设备等场景。
注意:该模块只支持3.3V,如果需要在5V主控上使用,请使用电平转换模组
特性
- 内部凝胶保护
- 260hPa至1260 hPa绝对压力范围
- 绝对压力精度:0.5 hPa
- 24位压力数据输出
应用场景
- 便携式高度计、气压计
- 气象站设备
技术规格
- 供电电压:3.3V
- 工作电流:5mA
- 通讯方式:I2C/SPI
- I2C地址:0x5D(默认)/0x5C
- 压力测量范围:260hPa~1260 hPa
- 绝对压力精度:0.5 hPa
- 工作温度范围:-40℃~85℃
- 产品尺寸:15*20mm
引脚说明
| 序号 | 丝印 | 功能描述 |
|---|---|---|
| 1 | VCC | 电源正极 |
| 2 | GND | 电源负极 |
| 3 | SCL | I2C时钟线 |
| 4 | SDA | I2C数据线 |
| 5 | 3V3 | 3V3输入 |
| 6 | GND | 电源负极 |
| 7 | SCK | SPI时钟线 |
| 8 | SDI | SPI数据线(输入) |
| 9 | SDO | SPI数据线(输出) |
| 10 | CS | SPI片选线 |
| 11 | INT | 中断引脚 |
使用教程
准备
- 硬件
- 1 x Arduino UNO控制板
- 1 x Fermion: LPS27HHW压力传感器
- 若干 杜邦线
- 软件
- Arduino IDE, 点击下载Arduino IDE
- LPS27HHW库文件和示例程序
关于如何安装库文件,点击链接
- 主要API接口函数列表
/*!
* @brief 获取此时的气压值,单位为hPA
* @return 返回此时气压值,以浮点数输出
*/
float getPressureData_hPA();
/*!
* @brief 获取此时的温度值,单位为摄氏度
* @return 返回此时温度值,以浮点数输出
*/
float getTemperature_C();
/**
* @brief Temperature output from FIFO value.[get]
* @retval 传感器气压值
*/
float getFifoPressure_hPA();
/**
* @brief Temperature output from FIFO value.[get]
* @retval 传感器温度值
*/
float getFifoTemperature_C();
/**
* @brief Temperature output from FIFO value.[get]
* @retval 传感器气压值
*/
float getFifoPressure_hPA();
/**
* @brief Temperature output from FIFO value.[get]
* @retval 传感器温度值
*/
float getFifoTemperature_C();
接线图
样例代码1 - 读取数据
获取气压、温度、海拔数据,并通过串口打印
/*!
* @file generalAccess.ino
* @brief 获取传感器获取的气压值(hPA)和温度值(℃)以及海拔值(m)
* @n 实验现象 传感器的配置信息打印在串口上,自测信息打印在串口上
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author PengKaixing(kaixing.peng@dfrobot.com)
* @version V0.1
* @date 2021-04-28
* @get from https://www.dfrobot.com
* @url https://github.com/dfrobot/DFRobot_BMM150
*/
#include "DFRobot_LPS27HHW.h"
//默认打开,此时使用IIC通信,屏蔽之后使用SPI通信
#define I2C_COMMUNICATION
#ifdef I2C_COMMUNICATION
/*!
* @brief When using I2C communication, use the following program to
* construct an object by DFRobot_LPS27HHW_I2C
* @param pWire I2C controller
* @param I2C address
* LPS27HHW_I2C_ADD_L 0x5C (SDO:0)
* LPS27HHW_I2C_ADD_H 0x5D (SDO:1)
*/
#define I2C_ADDRESS LPS27HHW_I2C_ADD_H
DFRobot_LPS27HHW_I2C LPS27HHW(&Wire,I2C_ADDRESS);
/*!
* @brief Constructor
* @param cs Chip selection pinChip selection pin
* spi连接方法
* (SDO<-->MISO) (SDI<-->MOSI)
* (SCK<-->SCK) (CS<-->CS 可自定义引脚)
*/
#else
/*!
* @brief 在使用SPI通信的时候需要根据不同的MCU改成不同的引脚值
* 这个值可以是任意一个数字IO口
* LPS27HHW_CS : D3(ESP32)
* LPS27HHW_CS : 10(UNO)
*/
#define LPS27HHW_CS D3
DFRobot_LPS27HHW_SPI LPS27HHW(/*cs = */LPS27HHW_CS);
#endif
void setup() {
Serial.begin(115200);
while(1)
{
/**
*传感器初始化,用作初始化SPI或者初始化I2C,由此时使用的通信方式来决定
*/
uint8_t status = LPS27HHW.begin();
if(status == 0)
{
Serial.println("sensor inint success !");
break;
}else{
Serial.print("sensor inint ,error code is:");
Serial.println(status);
delay(1000);
}
}
/**
*传感器软件复位
*/
while (LPS27HHW.setReset())
{
Serial.println("Unsuccessful reset!");
delay(1000);
}
Serial.println("reset success!");
/*!
* @brief 设置传感器以设置的频率的进行气压值采集
* 默认使用 LPS27HHW_75_Hz_LOW_NOISE
* @param
* LPS27HHW_POWER_DOWN
* LPS27HHW_1_Hz
* LPS27HHW_10_Hz
* LPS27HHW_25_Hz
* LPS27HHW_50_Hz
* LPS27HHW_75_Hz
* LPS27HHW_100_Hz
* LPS27HHW_200_Hz
* LPS27HHW_1_Hz_LOW_NOISE
* LPS27HHW_10_Hz_LOW_NOISE
* LPS27HHW_25_Hz_LOW_NOISE
* LPS27HHW_50_Hz_LOW_NOISE
* LPS27HHW_75_Hz_LOW_NOISE
*/
LPS27HHW.setDataRate();
}
void loop() {
float press = LPS27HHW.getPressureData_hPA();
float temp = LPS27HHW.getTemperature_C();
float alti = LPS27HHW.calAltitude(press);
Serial.println("===================");
Serial.print("Pressure : ");
Serial.print(press);
Serial.println(" hPA");
Serial.print("Temperature : ");
Serial.print(temp);
Serial.println(" ℃");
Serial.print("Altitude : ");
Serial.print(alti);
Serial.println(" m");
Serial.println("===================");
Serial.println("");
delay(1000);
}
结果

样例代码2 - 从FIFO中读取数据
此代码是从传感器的FIFO中读取数据,使用FIFO读取数据可以降低功耗
/*!
* @file getdatabyfifo.ino
* @brief MCU从传感器的FIFO获取数据并通过串口打印出来
* @n 实验现象 传感器的配置信息打印在串口上,自测信息打印在串口上
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author PengKaixing(kaixing.peng@dfrobot.com)
* @version V0.1
* @date 2021-04-28
* @get from https://www.dfrobot.com
* @url https://github.com/dfrobot/DFRobot_BMM150
*/
#include "DFRobot_LPS27HHW.h"
//默认打开,此时使用IIC通信,屏蔽之后使用SPI通信
#define I2C_COMMUNICATION
#ifdef I2C_COMMUNICATION
/*!
* @brief When using I2C communication, use the following program to
* construct an object by DFRobot_LPS27HHW_I2C
* @param pWire I2C controller
* @param I2C address
* LPS27HHW_I2C_ADD_L 0x5C (SDO:0)
* LPS27HHW_I2C_ADD_H 0x5D (SDO:1)
*/
#define I2C_ADDRESS LPS27HHW_I2C_ADD_H
DFRobot_LPS27HHW_I2C LPS27HHW(&Wire,I2C_ADDRESS);
/*!
* @brief Constructor
* @param cs Chip selection pinChip selection pin
* spi连接方法
* (SDO<-->MISO) (SDI<-->MOSI)
* (SCK<-->SCK) (CS<-->CS 可自定义引脚)
*/
#else
/*!
* @brief 在使用SPI通信的时候需要根据不同的MCU改成不同的引脚值
* 这个值可以是任意一个数字IO口
* LPS27HHW_CS : D3(ESP32)
* LPS27HHW_CS : 10(UNO)
*/
#define LPS27HHW_CS D3
DFRobot_LPS27HHW_SPI LPS27HHW(/*cs = */LPS27HHW_CS);
#endif
void setup() {
Serial.begin(115200);
while(1)
{
/**
*传感器初始化,用作初始化SPI或者初始化I2C,由此时使用的通信方式来决定
*/
uint8_t status = LPS27HHW.begin();
if(status == 0)
{
Serial.println("sensor inint success !");
break;
}else
{
Serial.print("sensor inint ,error code is:");
Serial.println(status);
delay(1000);
}
}
/**
*传感器软件复位
*/
while (LPS27HHW.setReset())
{
Serial.println("Unsuccessful reset!");
delay(1000);
}
Serial.println("reset success!");
/*!
* @brief 设置传感器以设置的频率的进行气压值采集
* 默认使用 LPS27HHW_75_Hz_LOW_NOISE
* @param
* LPS27HHW_POWER_DOWN
* LPS27HHW_1_Hz
* LPS27HHW_10_Hz
* LPS27HHW_25_Hz
* LPS27HHW_50_Hz
* LPS27HHW_75_Hz
* LPS27HHW_100_Hz
* LPS27HHW_200_Hz
* LPS27HHW_1_Hz_LOW_NOISE
* LPS27HHW_10_Hz_LOW_NOISE
* LPS27HHW_25_Hz_LOW_NOISE
* LPS27HHW_50_Hz_LOW_NOISE
* LPS27HHW_75_Hz_LOW_NOISE
*/
LPS27HHW.setDataRate();
/*!
* @brief 配置MCU从传感器的fifo中获取数据
*/
LPS27HHW.cfgGainDataByFifo();
}
void loop() {
float press = LPS27HHW.getFifoPressure_hPA();
float temp = LPS27HHW.getFifoTemperature_C();
float alti = LPS27HHW.calAltitude(press);
Serial.println("===================");
Serial.print("Pressure : ");
Serial.print(press);
Serial.println(" hPA");
Serial.print("Temperature : ");
Serial.print(temp);
Serial.println(" ℃");
Serial.print("Altitude : ");
Serial.print(alti);
Serial.println(" m");
Serial.println("===================");
Serial.println("");
delay(1000);
}
结果

样例代码3 - 中断输出
在气压高于设置的值时中断引脚会输出高电平并且打印数据
/*!
* @file sensorinterupt.ino
* @brief 先设置传感器产生中断的条件:阈值和触发方式,并将传感器的
* int中断引脚与MCU的中断引脚连接在一起,当此时环境中的气压
* 达到条件的时候,MCU会产生中断并且打印此时的气压和温度值
* @n 实验现象 传感器的配置信息打印在串口上,自测信息打印在串口上
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author PengKaixing(kaixing.peng@dfrobot.com)
* @version V0.1
* @date 2021-04-28
* @get from https://www.dfrobot.com
* @url https://github.com/dfrobot/DFRobot_BMM150
*/
#include "DFRobot_LPS27HHW.h"
/*!
* @brief 需要根据不同的MCU改成不同的引脚值
* MCU | intPin
* UNO | 2,3
* Mega2560 | 2, 3, 18, 19, 20, 21
* Leonardo | 0, 1, 2, 3, 7
* ESP32 | 所有数字口
* ESP8266 | 所有数字口
*/
#define intPin D2
//默认打开,此时使用IIC通信,屏蔽之后使用SPI通信
#define I2C_COMMUNICATION
#ifdef I2C_COMMUNICATION
/*!
* @brief When using I2C communication, use the following program to
* construct an object by DFRobot_LPS27HHW_I2C
* @param pWire I2C controller
* @param I2C address
* LPS27HHW_I2C_ADD_L 0x5C (SDO:0)
* LPS27HHW_I2C_ADD_H 0x5D (SDO:1)
*/
#define I2C_ADDRESS LPS27HHW_I2C_ADD_H
DFRobot_LPS27HHW_I2C LPS27HHW(&Wire,I2C_ADDRESS);
/*!
* @brief Constructor
* @param cs Chip selection pinChip selection pin
* spi连接方法
* (SDO<-->MISO) (SDI<-->MOSI)
* (SCK<-->SCK) (CS<-->CS 可自定义引脚)
*/
#else
/*!
* @brief 在使用SPI通信的时候需要根据不同的MCU改成不同的引脚值
* 这个值可以是任意一个数字IO口
* LPS27HHW_CS : D3(ESP32)
* LPS27HHW_CS : 10(UNO)
*/
#define LPS27HHW_CS D3
DFRobot_LPS27HHW_SPI LPS27HHW(/*cs = */LPS27HHW_CS);
#endif
bool intflag;
void funcCallback()
{
if(digitalRead(intPin))
intflag=1;
else
intflag=0;
}
void setup() {
Serial.begin(115200);
while(1)
{
/**
*传感器初始化,用作初始化SPI或者初始化I2C,由此时使用的通信方式来决定
*/
uint8_t status = LPS27HHW.begin();
if(status == 0)
{
Serial.println("sensor inint success !");
break;
}else
{
Serial.print("sensor inint ,error code is:");
Serial.println(status);
delay(1000);
}
}
/**
*传感器软件复位
*/
while (LPS27HHW.setReset())
{
Serial.println("Unsuccessful reset!");
delay(1000);
}
Serial.println("reset success!");
/*!
* @brief 为了保证读取的气压值的准确性,需要把传感器的
* 持续更新关闭
*/
LPS27HHW.closeBlockDataUpdate();
/*!
* @brief 设置传感器以设置的频率的进行气压值采集
* 默认使用 LPS27HHW_75_Hz_LOW_NOISE
* @param
* LPS27HHW_POWER_DOWN
* LPS27HHW_1_Hz
* LPS27HHW_10_Hz
* LPS27HHW_25_Hz
* LPS27HHW_50_Hz
* LPS27HHW_75_Hz
* LPS27HHW_100_Hz
* LPS27HHW_200_Hz
* LPS27HHW_1_Hz_LOW_NOISE
* LPS27HHW_10_Hz_LOW_NOISE
* LPS27HHW_25_Hz_LOW_NOISE
* LPS27HHW_50_Hz_LOW_NOISE
* LPS27HHW_75_Hz_LOW_NOISE
*/
LPS27HHW.setDataRate();
/*!
* @brief 设置传感器产生中断的条件:
* LPS27HHW_NO_THRESHOLD
* LPS27HHW_POSITIVE
* LPS27HHW_NEGATIVE
* LPS27HHW_BOTH
*/
LPS27HHW.setInterupt(/*阈值/hPA*/500,LPS27HHW.LPS27HHW_POSITIVE);
/*!
* 配置MCU中断
*/
pinMode(intPin,INPUT);
attachInterrupt(digitalPinToInterrupt(intPin), funcCallback, CHANGE);
}
void loop() {
if(intflag)
{
float press = LPS27HHW.getPressureData_hPA();
float temp = LPS27HHW.getTemperature_C();
float alti = LPS27HHW.calAltitude(press);
Serial.println("===================");
Serial.print("Pressure : ");
Serial.print(press);
Serial.println(" hPA");
Serial.print("Temperature : ");
Serial.print(temp);
Serial.println(" ℃");
Serial.print("Altitude : ");
Serial.print(alti);
Serial.println(" m");
Serial.println("===================");
Serial.println("");
}
else
Serial.println("No interruptions occur!");
delay(1000);
}
结果

常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。
