/** * @file bme280.h * @author marisa (marisa@fwmari.net) * @brief BME280 helper * @version 0.1 * @date 2024-05-06 * * @copyright Copyright (c) 2024 * */ #pragma once #include #include enum BME280Regs { // Start of first calibration data registers REG_CALIB00 = 0x88, // Temperature calibration data registers REG_T1 = 0x88, REG_T2 = 0x8A, REG_T3 = 0x8C, // Pressure calibration data registers REG_P1 = 0x8E, REG_P2 = 0x90, REG_P3 = 0x92, REG_P4 = 0x94, REG_P5 = 0x96, REG_P6 = 0x98, REG_P7 = 0x9A, REG_P8 = 0x9C, REG_P9 = 0x9E, // Humidity calibration data registers REG_H1 = 0xA1, REG_H2 = 0xE1, REG_H3 = 0xE3, REG_E4 = 0xE4, REG_E5 = 0xE5, REG_E6 = 0xE6, REG_H6 = 0xE7, // Start of second calibration data registers REG_CALIB26 = 0xE1, // System registers REG_CHIP_ID = 0xD0, REG_RESET = 0xE0, REG_CTRL_HUM = 0xF2, REG_STATUS = 0xF3, REG_CTRL_MEAS = 0xF4, REG_CONFIG = 0xF5, // Start of raw data registers REG_RAWDATA = 0xF7, REG_P_MSB = 0xF7, REG_P_LSB = 0xF8, REG_P_XLSB = 0xF9, REG_T_MSB = 0xFA, REG_T_LSB = 0xFB, REG_T_XLSB = 0xFC, REG_H_MSB = 0xFD, REG_H_LSB = 0xFE, }; struct BME280CalibParams { // Temperature trimming parameters uint16_t t1; int16_t t2, t3; // Pressure trimming parameters uint16_t p1; int16_t p2, p3, p4, p5, p6, p7, p8, p9; // Humidity trimming params uint8_t h1; int16_t h2; int8_t h3, h4, h5, h6; }; struct BME280Reading { double tempC, humidity, pressurehPa; }; enum BME280Oversampling { OVSP_X1 = 1, OVSP_X2, OVSP_X4, OVSP_X8, OVSP_X16, }; struct BME280 { struct BME280CalibParams calibParams; enum BME280Oversampling oversampling; i2c_master_dev_handle_t i2cHandle; }; /** * @brief Initializes BME280 struct. Creates i2c handle, sets oversampling and calibParams * * @param bme */ void BME280Init(struct BME280 *bme, enum BME280Oversampling oversampling); struct BME280Reading BME280Read(struct BME280 *bme);