I am working on simulating a BME280 sensor in software, I have figured out values to pass in for the dig_T* values so that the compensation formulas just pass through what I send as my raw data over I2C, however I have been unable to work out values for the dig_P* values or the dig_H* values so that I can consistently send a value that will be translated to what I want at the end. If there are any defualt values or some values that will result in scaled versions of my raw data that would be greatly appreciated.
Solved! Go to Solution.
BME280 dig_T*, dig_P*, and dig_H* registers are trimming coefficients unique to each part. Therefore the best thing you could do is to copy 1 set of values from a sensor to simulate the output of that specific sensor.
Maybe what you are looking for is simply the API to read uncompensated data ?
First you can grab the raw data directly from the bus with this API:
int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, const struct bme280_dev *dev);
Then you parse it into an uncompensated data structure with this API:
void bme280_parse_sensor_data(const uint8_t *reg_data, struct bme280_uncomp_data *uncomp_data);
The latest BME280 driver is always found on Bosch Sensortec's official GitHub page.