物联网AI MicroPython传感器学习 之 BMP280气压传感器

慈云数据 2024-04-19 技术支持 76 0

物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

BMP280是博世出品的气压传感器,它集成了压电压力传感单元、信号处理电路及模数转换器,气压值可以通过SPI或I2C读出,在室内导航、无人机、气象站等场景有广泛应用。

本文档使用I2C通信接口作为本教学文档输出。

image.png

引脚定义

  • VCC: 3.3V
  • GND: GND
  • SCL: IIC时钟
  • SDA: IIC数据
  • CSB: 3.3V
  • SDO: GND

    二、技术参数

    • 供电电压:1.9~3.6V
    • 通信方式:可以采用I2C或SPI通信协议
    • 气压测量范围: 300hPa至1100hPa,最大误差为±12hPa
    • 工作温度范围: -40摄氏度 - +85摄氏度
    • 封装尺寸: 2.0mm * 2.5mm* 0.95mm

      三、软件接口

      BMP280(i2cObj) - 创建BMP280驱动对象

      • 函数原型:

        bmpObj = BMP280(i2cObj)

        • 参数说明:
          参数类型必选参数?说明
          i2cObjI2C传入I2C对象
          • 返回值:

            BMP280对象成功,返回BMP280对象;BMP280对象创建失败,抛出Exception

          • 示例代码:
            from machine import I2C,Pin          # 驱动库
            import bmp280                        # BMP280温湿度传感器驱动库
            # 初始化I2C类型的设备
            i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
            print("bmp280 inited!")
            bmpObj = bmp280.BMP280(i2cObj)  # 初始化创建BMP280传感器
            
            • 输出:
              bmp280 inited!
              

              getPressure - 测量气压

              • 函数功能:

                量测气压值并返回测量结果

              • 函数原型:

                BMP280.getPressure()

                • 参数说明:

                • 返回值:

                  成功返回温度测量结果(数据类型:浮点型;单位:Pa);失败抛出Exception

                • 示例:
                  from machine import I2C,Pin          # 驱动库
                  import bmp280                        # BMP280温湿度传感器驱动库
                  # 初始化I2C类型的设备
                  i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
                  print("bmp280 inited!")
                  bmpObj = bmp280.BMP280(i2cObj)  # 初始化创建BMP280传感器
                  pressure = bmpObj.getPressure()
                  print("pressure is ", pressure, "Pa")
                  
                  • 输出:
                    pressure is 103000Pa
                    

                    四、接口案例

                    # Python代码
                    import utime                         # 延时API所在组件
                    from machine import I2C,Pin          # 驱动库
                    import bmp280                        # BMP280温湿度传感器驱动库
                    # 初始化I2C类型的设备
                    i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
                    print("bmp280 inited!")
                    bmpObj = bmp280.BMP280(i2cObj)  # 初始化创建BMP280传感器
                    def get_pressure():
                        pressure = bmp280.getPressure()         # 获取大气压测量结果
                        print("The pressure is: %.1f" % pressure)
                        return pressure                        # 返回读取到的大气压值
                    if __name__ == '__main__':
                        while True:
                            data = get_pressure()                          # 读取温度信息和相对湿度信息
                            utime.sleep(1)                                  # 每隔1秒钟进行一次温湿度信息测量和打印
                    
                    • 输出:
                      ...
                      bmp280 inited!
                      The pressure is 103000Pa
                      ...
                      

                      五、通信协议

                      I2C最高传输速率可到3.4MHz,SPI最高传输速率可达10MHz,当CSB管脚接VCC时选择为IIC接口,当CSB管脚接GND时选择为SPI接口,I2C地址可配置0X76或者0x77,取决于SDO,SDO接GND时I2C地址维0x76,SDO接VCC时I2C地址为0x77

                      主控芯片和 BMP280 传感器之间通信所用命令字如下表所示:

                      序号命令字功能说明命令字宏定义
                      10x88读T1校准参数CMD_READ_DIG_T1
                      20x82读T2校准参数CMD_READ_DIG_T2
                      30x8c读T3校准参数CMD_READ_DIG_T3
                      40x8e读P1校准参数CMD_READ_DIG_P1
                      50x90读P2校准参数CMD_READ_DIG_P2
                      60x92读P3校准参数CMD_READ_DIG_P3
                      70x94读P4校准参数CMD_READ_DIG_P4
                      80x96读P5校准参数CMD_READ_DIG_P5
                      90x98读P6校准参数CMD_READ_DIG_P6
                      100x9a读P7校准参数CMD_READ_DIG_P7
                      110x9c读P8校准参数CMD_READ_DIG_P8
                      120xFA读取温度CMD_READ_TEMPERATURE
                      130xF7读取大气压CMD_READ_PRESSURE

                      实际控制此传感器的流程可参考如下描述。

                      • 一次获取数据
                        通过 IIC 发送CMD_READ_DIG_T1-CMD_READ_DIG_T3获取温度校准参数并且发送CMD_READ_DIG_P1-CMD_READ_DIG_P8获取气压校准参数;
                        通过 IIC 发送CMD_READ_TEMPERATURE获取温度RAW数据,通过温度校准参数计算
                        得到实际摄氏度温度;
                        通过 IIC 发送CMD_READ_PRESSURE获取气压RAW数据, 通过气压校准参数和温度校准
                        参数数计算得到实际气压Pa;
                        

                        六、工作原理

                        从下图可以看到bmp280内部集成了压力传感单元,通过ADC采样输入到校正储存器。通过数字接口IIC或SPI读取数据,引脚分布如下:

                        image.png

                        典型电路如下,由于SCL和SDA为开漏输出,驱动能力不足,需要接上拉电阻。要通过IIC总线访问bmp280,CSB需要接到VDDIO。

                        image.png

                        参考文献及购买链接

                        [1] BMP280气压传感器 - 学习手册

                        [2] BMP280气压传感器 - 购买链接

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon