# DFRobot_BMP58X **Repository Path**: dfrobot/DFRobot_BMP58X ## Basic Information - **Project Name**: DFRobot_BMP58X - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-23 - **Last Updated**: 2025-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DFRobot_BMP58X * [English Version](./README.md) 这是一个BMP58X的库,功能是读取温度和压力。BMP(585/581)是一款基于可靠传感原理的压力和温度测量数字传感器。 ### SEN0664

### SEN0665

### SEN0666

### SEN0667

## 产品链接(https://www.dfrobot.com) SKU: SEN0664/SEN0665/SEN0666/SEN0667 ## 目录 * [概述](#概述) * [库安装](#库安装) * [方法](#方法) * [兼容性](#兼容性) * [历史](#历史) * [创作者](#创作者) ## 概述 * 该库支持BMP585/581传感器。 * 该库支持读取温度和压力。 * 该库支持设置传感器的工作模式。 * 该库支持设置传感器的输出数据率。 * 该库支持设置传感器的过采样率。 * 该库支持设置传感器的IIR滤波器系数。 * 该库支持设置传感器的FIFO操作。 * 该库支持设置传感器的中断行为。 * 该库支持设置传感器的压力超限检测。 * 该库支持读取传感器的中断状态。 ## 库安装 使用此库前,请首先安装依赖库 DFRobot_RTU,让后再下载库文件,将其粘贴到\Arduino\libraries目录中,然后打开examples文件夹并在该文件夹中运行演示。 ## 方法 ```C++ /** * @fn begin * @brief 初始化传感器硬件接口 * @return 初始化成功返回true,失败返回false */ bool begin(void); /** * @fn setODR * @brief 配置传感器输出数据率(ODR) * @param odr 输出数据率选择(见: eOdr_t) * @n 可用速率: * @n - eOdr240Hz: 输出速率240 Hz * @n - eOdr218_5Hz: 输出速率218.5 Hz * @n - eOdr199_1Hz: 输出速率199.1 Hz * @n - eOdr179_2Hz: 输出速率179.2 Hz * @n - eOdr160Hz: 输出速率160 Hz * @n - eOdr149_3Hz: 输出速率149.3 Hz * @n - eOdr140Hz: 输出速率140 Hz * @n - eOdr129_8Hz: 输出速率129.8 Hz * @n - eOdr120Hz: 输出速率120 Hz * @n - eOdr110_1Hz: 输出速率110.1 Hz * @n - eOdr100_2Hz: 输出速率100.2 Hz * @n - eOdr89_6Hz: 输出速率89.6 Hz * @n - eOdr80Hz: 输出速率80 Hz * @n - eOdr70Hz: 输出速率70 Hz * @n - eOdr60Hz: 输出速率60 Hz * @n - eOdr50Hz: 输出速率50 Hz * @n - eOdr45Hz: 输出速率45 Hz * @n - eOdr40Hz: 输出速率40 Hz * @n - eOdr35Hz: 输出速率35 Hz * @n - eOdr30Hz: 输出速率30 Hz * @n - eOdr25Hz: 输出速率25 Hz * @n - eOdr20Hz: 输出速率20 Hz * @n - eOdr15Hz: 输出速率15 Hz * @n - eOdr10Hz: 输出速率10 Hz * @n - eOdr5Hz: 输出速率5 Hz * @n - eOdr4Hz: 输出速率4 Hz * @n - eOdr3Hz: 输出速率3 Hz * @n - eOdr2Hz: 输出速率2 Hz * @n - eOdr1Hz: 输出速率1 Hz * @n - eOdr0_5Hz: 输出速率0.5 Hz * @n - eOdr0_250Hz: 输出速率0.250 Hz * @n - eOdr0_125Hz: 输出速率0.125 Hz * @return 成功返回0,错误返回1 */ uint8_t setODR(eODR_t odr); /** * @fn setOSR * @brief 设置温度和压力的过采样率 * @param osrTemp 温度过采样(见: eOverSampling_t) * @param osrPress 压力过采样(见: eOverSampling_t) * @n 支持的值: * @n - eOverSampling1: 1倍过采样 * @n - eOverSampling2: 2倍过采样 * @n - eOverSampling4: 4倍过采样 * @n - eOverSampling8: 8倍过采样 * @n - eOverSampling16: 16倍过采样 * @n - eOverSampling32: 32倍过采样 * @n - eOverSampling64: 64倍过采样 * @n - eOverSampling128: 128倍过采样 * @return 成功返回0,错误返回1 */ uint8_t setOSR(eOverSampling_t osrTemp, eOverSampling_t osrPress); /** * @fn setMeasureMode * @brief 配置传感器电源/测量模式 * @param mode 操作模式(见: eMeasureMode_t) * @n 可用模式: * @n - eSleep: 睡眠模式 * @n - eNormal: 正常测量模式 * @n - eSingleShot: 单次测量 * @n - eContinuous: 连续测量 * @n - eDeepSleep: 深度睡眠模式 * @return 成功返回0,错误返回1 */ uint8_t setMeasureMode(eMeasureMode_t mode); /** * @fn reset * @brief 执行传感器软件复位 * @return 成功返回0,错误返回1 */ uint8_t reset(void); /** * @fn readTempC * @brief 读取校准后的温度数据 * @return 温度值(摄氏度) */ float readTempC(void); /** * @fn readPressPa * @brief 读取校准后的压力数据 * @return 压力值(帕斯卡) */ float readPressPa(void); /** * @fn readAltitudeM * @brief 根据压力读数计算海拔高度 * @note 使用公式: * @n altitude = (1 - (P/101325)^0.190284) * 44307.7 * @n 其中P = 当前压力值(Pa) * @return 海拔高度(米) */ float readAltitudeM(void); /** * @fn configIIR * @brief 配置IIR滤波器系数 * @param iirTemp 温度IIR滤波器(见: eIIRFilter_t) * @param iirPress 压力IIR滤波器(见: eIIRFilter_t) * @n 可用系数: * @n - eFilterBypass: 旁路滤波器 * @n - eFilter1: 1阶滤波器 * @n - eFilter3: 3阶滤波器 * @n - eFilter7: 7阶滤波器 * @n - eFilter15: 15阶滤波器 * @n - eFilter31: 31阶滤波器 * @n - eFilter63: 63阶滤波器 * @n - eFilter127: 127阶滤波器 * @return 成功返回0,错误返回1 */ uint8_t configIIR(eIIRFilter_t iirTemp, eIIRFilter_t iirPress); /** * @fn configFIFO * @brief 配置FIFO操作参数 * @param dataSel 数据帧类型(见: eFIFODataSel_t) * @n 可用类型: * @n - eFIFODisable: FIFO禁用 * @n - eFIFOTempData: 仅温度数据 * @n - eFIFOPressData: 仅压力数据 * @n - eFIFOPressAndTempData: 压力和温度数据 * * @param downSampling 下采样率(见: eFIFODownSampling_t) * @n 可用比率: * @n - eNoDownSampling: 无下采样 * @n - eDownSampling2: 2倍下采样 * @n - eDownSampling4: 4倍下采样 * @n - eDownSampling8: 8倍下采样 * @n - eDownSampling16: 16倍下采样 * @n - eDownSampling32: 32倍下采样 * @n - eDownSampling64: 64倍下采样 * @n - eDownSampling128: 128倍下采样 * * @param mode FIFO操作模式(见: eFIFOWorkMode_t) * @n 可用模式: * @n - eFIFOOverwriteMode: 连续数据流模式 * @n - eFIFOFullStopMode: FIFO满时停止 * * @param threshold FIFO触发阈值(0=禁用, 1-31=帧数) * @n - 0x0F: 15帧。这是PT模式下的最大设置。最高有效位被忽略。 * @n - 0x1F: 31帧。这是P或T模式下的最大设置。 * @return 成功返回0,错误返回1 */ uint8_t configFIFO(eFIFODataSel_t dataSel, eFIFODownSampling_t downSampling, eFIFOWorkMode_t mode, uint8_t threshold); /** * @fn getFIFOCount * @brief 获取FIFO中当前的帧数 * @return 存储的数据帧数(0-31) */ uint8_t getFIFOCount(void); /** * @fn getFIFOData * @brief 从FIFO读取所有数据 * @return sFIFOData_t 包含压力和温度数据的结构体 * @n - len: 存储的数据帧数(0-31) * @n - pressure: 压力值数组 * @n - temperature: 温度值数组 */ sFIFOData_t getFIFOData(void); /** * @fn configInterrupt * @brief 配置中断行为 * @param intMode 触发模式(见: eIntMode_t) * @n 可用模式: * @n - eIntModePulsed: 脉冲模式 * @n - eIntModeLatched: 锁存模式 * * @param intPol 信号极性(见: eIntPolarity_t) * @n 可用极性: * @n - eIntLowActive: 低电平有效 * @n - eIntHighActive: 高电平有效 * * @param intOd 输出驱动类型(见: eIntOutputMode_t) * @n 可用类型: * @n - eIntPushPull: 推挽输出 * @n - eIntOpenDrain: 开漏输出 * * @return 成功返回0,错误返回1 */ uint8_t configInterrupt(eIntMode_t mode, eIntPolarity_t pol, eIntOutputMode_t outputMode); /** * @fn setIntSource * @brief 启用特定的中断源 * @param source 触发位掩码(见: eIntSource_t) * @n 可用源: * @n - eIntDataReady: 数据就绪中断 * @n - eIntFIFOFull: FIFO满中断 * @n - eIntFIFOThres: FIFO阈值中断 * @n - eIntPressureOOR: 压力超出范围中断 * @details 可以使用按位或(|)组合多个中断源。 * 示例: 同时启用数据就绪和FIFO满中断: * @code * setIntSource(bmp58x.eIntDataReady | bmp58x.eIntFIFOFull); * @endcode * @return 成功返回0,错误返回1 */ uint8_t setIntSource(uint8_t source); /** * @fn getIntStatus * @brief 读取当前中断状态标志 * @return uint16_t 活动中断的位掩码 * @n 可能的标志: * @n - eIntStatusDataReady: 数据就绪(0x01) * @n - eIntStatusFIFOFull: FIFO已满 (0x02) * @n - eIntStatusFIFOThres: FIFO达到阈值(0x04) * @n - eIntStatusPressureOOR: 压力超出范围(0x08) * @n - eIntStatusResetComplete: 复位完成(0x10) */ uint16_t getIntStatus(void); /** * @fn setPressOOR * @brief 配置压力超出范围检测 * @param oor 阈值压力值(0x00000-0x1FFFF) * @param range 迟滞范围(0-255) * @n oor - range < 压力 < oor + range * @param cntLimit 触发持续计数 * @n 可用持续设置: * @n - eOORCountLimit1: 1次计数 * @n - eOORCountLimit3: 3次计数 * @n - eOORCountLimit7: 7次计数 * @n - eOORCountLimit15: 15次计数 * @return 成功返回0,错误返回1 */ uint8_t setPressOOR(uint32_t oor, uint8_t range, eOORCountLimit_t cntLimit); /** * @fn calibratedAbsoluteDifference * @brief 使用给定的当前海拔高度作为参考值,消除后续压力和海拔数据的绝对差值 * @param altitude 当前海拔高度 * @return 布尔值,表示参考值是否设置成功 * @retval True 表示参考值设置成功 * @retval False 表示设置参考值失败 */ bool calibratedAbsoluteDifference(float altitude); /** * @fn setBaud * @brief 设置UART通信波特率 * @details 使用指定的波特率枚举值配置串行通信速度。 * 该函数初始化必要的硬件寄存器以实现所需的数据传输速率。 * @param baud eBaud枚举值,指定所需的波特率。 * 如果未显式设置,默认为e9600。 * @note 实际硬件配置可能因微控制器型号而异。 * 该函数假设使用标准时钟频率;如果使用非默认系统时钟配置,请调整时钟设置。 * @warning 在通信过程中更改波特率可能导致数据丢失或通信错误(如果两个设备未同步)。 * @see eBaud可用的波特率选项: * - e2400: 2400比特/秒 * - e4800: 4800比特/秒 * - e9600: 9600比特/秒(默认值) * - e14400: 14400比特/秒 * - e19200: 19200比特/秒 * - e38400: 38400比特/秒 * - e57600: 57600比特/秒 * - e115200: 115200比特/秒 */ void setBaud(eBaud baud); ``` ## 兼容性 | MCU | 运行良好 | 运行异常 | 未测试 | 备注 | | ------------------ |:---------:|:----------:|:--------:| ------- | | Arduino uno | √ | | | | | FireBeetle esp32 | √ | | | | | FireBeetle esp8266 | √ | | | | | FireBeetle m0 | √ | | | | | Leonardo | √ | | | | | Microbit | √ | | | | | Arduino MEGA2560 | √ | | | | ## 历史 - Data 2025-09-22 - Version V1.0.0 ## 创作者 Written by(yuanlong.yu@dfrobot.com), 2025. (Welcome to our [website](https://www.dfrobot.com/))