AS7341可见光传感器

简介

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 中断引脚

使用教程

准备

关于如何安装库文件,点击链接

  • 主要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);
}

结果

SEN0446result1

样例代码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);
}

结果

SEN0446result2

样例代码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);
}

结果

SEN0446result3

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接