Kenji Arai / BME280
Committer:
kenjiArai
Date:
Tue Jan 22 22:18:35 2019 +0000
Revision:
8:4c37112d31cf
Parent:
7:d94871acb463
address auto selection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 1:763a4018aaec 1 /**
MACRUM 5:c1f1647004c4 2 ******************************************************************************
MACRUM 5:c1f1647004c4 3 * @file BME280.h
MACRUM 5:c1f1647004c4 4 * @author Toyomasa Watarai
MACRUM 5:c1f1647004c4 5 * @version V1.0.0
MACRUM 5:c1f1647004c4 6 * @date 11 March 2017
MACRUM 5:c1f1647004c4 7 * @brief This file contains the class of a BME280 Combined humidity and pressure sensor library with I2C interface
MACRUM 5:c1f1647004c4 8 ******************************************************************************
MACRUM 5:c1f1647004c4 9 * @attention
MACRUM 1:763a4018aaec 10 *
MACRUM 5:c1f1647004c4 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
MACRUM 5:c1f1647004c4 12 * of this software and associated documentation files (the "Software"), to deal
MACRUM 5:c1f1647004c4 13 * in the Software without restriction, including without limitation the rights
MACRUM 5:c1f1647004c4 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
MACRUM 5:c1f1647004c4 15 * copies of the Software, and to permit persons to whom the Software is
MACRUM 5:c1f1647004c4 16 * furnished to do so, subject to the following conditions:
MACRUM 5:c1f1647004c4 17 *
MACRUM 5:c1f1647004c4 18 * The above copyright notice and this permission notice shall be included in
MACRUM 5:c1f1647004c4 19 * all copies or substantial portions of the Software.
MACRUM 1:763a4018aaec 20 *
MACRUM 5:c1f1647004c4 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
MACRUM 5:c1f1647004c4 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
MACRUM 5:c1f1647004c4 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
MACRUM 5:c1f1647004c4 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
MACRUM 5:c1f1647004c4 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
MACRUM 5:c1f1647004c4 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
MACRUM 5:c1f1647004c4 27 * THE SOFTWARE.
MACRUM 5:c1f1647004c4 28 */
MACRUM 5:c1f1647004c4 29
MACRUM 5:c1f1647004c4 30 /**
MACRUM 1:763a4018aaec 31 * Library for "BME280 temperature, humidity and pressure sensor module" from Switch Science
MACRUM 1:763a4018aaec 32 * https://www.switch-science.com/catalog/2236/
MACRUM 1:763a4018aaec 33 *
MACRUM 1:763a4018aaec 34 * For more information about the BME280:
takafuminaka 4:ddcaa259e65b 35 * http://ae-bst.resource.bosch.com/media/products/dokumente/bme280/BST-BME280_DS001-10.pdf
MACRUM 1:763a4018aaec 36 */
kenjiArai 6:f94ffb546799 37
kenjiArai 6:f94ffb546799 38 /*
kenjiArai 6:f94ffb546799 39 * Modified by Kenji Arai / JH1PJL
kenjiArai 6:f94ffb546799 40 *
kenjiArai 6:f94ffb546799 41 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 6:f94ffb546799 42 * http://mbed.org/users/kenjiArai/
kenjiArai 6:f94ffb546799 43 * Created: November 21st, 2018
kenjiArai 8:4c37112d31cf 44 * Revised: January 22nd, 2019
kenjiArai 6:f94ffb546799 45 *
kenjiArai 6:f94ffb546799 46 * Refrence software
kenjiArai 6:f94ffb546799 47 * bme280 library
kenjiArai 6:f94ffb546799 48 * https://os.mbed.com/users/loopsva/code/bme280/file/96075bee19f0/bme280.h/
kenjiArai 6:f94ffb546799 49 * by Kevin Braun
kenjiArai 6:f94ffb546799 50 *
kenjiArai 6:f94ffb546799 51 * BME280_driver
kenjiArai 6:f94ffb546799 52 * https://github.com/BoschSensortec/BME280_driver
kenjiArai 6:f94ffb546799 53 * by Bosch Sensortec GmbH
kenjiArai 6:f94ffb546799 54 *
kenjiArai 6:f94ffb546799 55 * Reference formula
kenjiArai 6:f94ffb546799 56 * https://keisan.casio.jp/exec/system/1257609530
kenjiArai 6:f94ffb546799 57 * https://github.com/arahatashun/cansat/blob/master/bme280.c
kenjiArai 6:f94ffb546799 58 *
kenjiArai 6:f94ffb546799 59 */
kenjiArai 6:f94ffb546799 60
MACRUM 0:ade9be832910 61 #ifndef MBED_BME280_H
MACRUM 0:ade9be832910 62 #define MBED_BME280_H
MACRUM 0:ade9be832910 63
MACRUM 0:ade9be832910 64 #include "mbed.h"
MACRUM 0:ade9be832910 65
MACRUM 0:ade9be832910 66 #define DEFAULT_SLAVE_ADDRESS (0x76 << 1)
kenjiArai 6:f94ffb546799 67 #define ANOTHER_SLAVE_ADDRESS (0x77 << 1)
MACRUM 0:ade9be832910 68
MACRUM 0:ade9be832910 69 #ifdef _DEBUG
MACRUM 0:ade9be832910 70 extern Serial pc;
MACRUM 0:ade9be832910 71 #define DEBUG_PRINT(...) pc.printf(__VA_ARGS__)
MACRUM 0:ade9be832910 72 #else
MACRUM 0:ade9be832910 73 #define DEBUG_PRINT(...)
MACRUM 0:ade9be832910 74 #endif
MACRUM 0:ade9be832910 75
kenjiArai 6:f94ffb546799 76 typedef struct {
kenjiArai 6:f94ffb546799 77 double pressue;
kenjiArai 6:f94ffb546799 78 double temperatue;
kenjiArai 6:f94ffb546799 79 double humidity;
kenjiArai 6:f94ffb546799 80 } BME280_Data_TypeDef;
kenjiArai 6:f94ffb546799 81
MACRUM 5:c1f1647004c4 82 /** Interface for controlling BME280 Combined humidity and pressure sensor
MACRUM 5:c1f1647004c4 83 *
MACRUM 5:c1f1647004c4 84 * @code
MACRUM 5:c1f1647004c4 85 * #include "mbed.h"
MACRUM 5:c1f1647004c4 86 * #include "BME280.h"
MACRUM 5:c1f1647004c4 87 *
MACRUM 5:c1f1647004c4 88 * Serial pc(USBTX, USBRX);
MACRUM 5:c1f1647004c4 89 *
MACRUM 5:c1f1647004c4 90 * #if defined(TARGET_LPC1768)
MACRUM 5:c1f1647004c4 91 * BME280 sensor(p28, p27);
MACRUM 5:c1f1647004c4 92 * #else
MACRUM 5:c1f1647004c4 93 * BME280 sensor(I2C_SDA, I2C_SCL);
MACRUM 5:c1f1647004c4 94 * #endif
MACRUM 5:c1f1647004c4 95 *
MACRUM 5:c1f1647004c4 96 * int main() {
MACRUM 5:c1f1647004c4 97 *
MACRUM 5:c1f1647004c4 98 * while(1) {
MACRUM 5:c1f1647004c4 99 * pc.printf("%2.2f degC, %04.2f hPa, %2.2f %%\n", sensor.getTemperature(), sensor.getPressure(), sensor.getHumidity());
MACRUM 5:c1f1647004c4 100 * wait(1);
MACRUM 5:c1f1647004c4 101 * }
MACRUM 5:c1f1647004c4 102 * }
MACRUM 5:c1f1647004c4 103 *
MACRUM 5:c1f1647004c4 104 * @endcode
MACRUM 5:c1f1647004c4 105 */
MACRUM 5:c1f1647004c4 106
MACRUM 0:ade9be832910 107 /** BME280 class
MACRUM 0:ade9be832910 108 *
MACRUM 5:c1f1647004c4 109 * BME280: A library to correct environmental data using Boshe BME280 environmental sensor device
MACRUM 0:ade9be832910 110 *
MACRUM 5:c1f1647004c4 111 */
MACRUM 0:ade9be832910 112 class BME280
MACRUM 0:ade9be832910 113 {
MACRUM 0:ade9be832910 114 public:
MACRUM 0:ade9be832910 115
MACRUM 0:ade9be832910 116 /** Create a BME280 instance
MACRUM 0:ade9be832910 117 * which is connected to specified I2C pins with specified address
MACRUM 0:ade9be832910 118 *
MACRUM 0:ade9be832910 119 * @param sda I2C-bus SDA pin
MACRUM 0:ade9be832910 120 * @param scl I2C-bus SCL pin
MACRUM 0:ade9be832910 121 * @param slave_adr (option) I2C-bus address (default: 0x76)
MACRUM 0:ade9be832910 122 */
MACRUM 0:ade9be832910 123 BME280(PinName sda, PinName sck, char slave_adr = DEFAULT_SLAVE_ADDRESS);
MACRUM 0:ade9be832910 124
MACRUM 0:ade9be832910 125 /** Create a BME280 instance
MACRUM 0:ade9be832910 126 * which is connected to specified I2C pins with specified address
MACRUM 0:ade9be832910 127 *
MACRUM 0:ade9be832910 128 * @param i2c_obj I2C object (instance)
MACRUM 0:ade9be832910 129 * @param slave_adr (option) I2C-bus address (default: 0x76)
MACRUM 0:ade9be832910 130 */
MACRUM 0:ade9be832910 131 BME280(I2C &i2c_obj, char slave_adr = DEFAULT_SLAVE_ADDRESS);
MACRUM 0:ade9be832910 132
MACRUM 0:ade9be832910 133 /** Destructor of BME280
MACRUM 0:ade9be832910 134 */
MACRUM 0:ade9be832910 135 virtual ~BME280();
MACRUM 0:ade9be832910 136
MACRUM 0:ade9be832910 137 /** Initializa BME280 sensor
MACRUM 0:ade9be832910 138 *
MACRUM 0:ade9be832910 139 * Configure sensor setting and read parameters for calibration
MACRUM 0:ade9be832910 140 *
MACRUM 0:ade9be832910 141 */
MACRUM 0:ade9be832910 142 void initialize(void);
MACRUM 0:ade9be832910 143
MACRUM 0:ade9be832910 144 /** Read the current temperature value (degree Celsius) from BME280 sensor
MACRUM 0:ade9be832910 145 *
MACRUM 0:ade9be832910 146 */
MACRUM 0:ade9be832910 147 float getTemperature(void);
MACRUM 0:ade9be832910 148
MACRUM 0:ade9be832910 149 /** Read the current pressure value (hectopascal)from BME280 sensor
MACRUM 0:ade9be832910 150 *
MACRUM 0:ade9be832910 151 */
MACRUM 0:ade9be832910 152 float getPressure(void);
MACRUM 0:ade9be832910 153
MACRUM 0:ade9be832910 154 /** Read the current humidity value (humidity %) from BME280 sensor
MACRUM 0:ade9be832910 155 *
MACRUM 0:ade9be832910 156 */
MACRUM 0:ade9be832910 157 float getHumidity(void);
MACRUM 0:ade9be832910 158
kenjiArai 6:f94ffb546799 159 /** Read all compensated data
kenjiArai 6:f94ffb546799 160 *
kenjiArai 6:f94ffb546799 161 */
kenjiArai 6:f94ffb546799 162 void getAll_compensated_data(BME280_Data_TypeDef *dt);
kenjiArai 6:f94ffb546799 163
kenjiArai 6:f94ffb546799 164 /** Read the ID from BME280 sensor
kenjiArai 6:f94ffb546799 165 *
kenjiArai 6:f94ffb546799 166 */
kenjiArai 6:f94ffb546799 167 uint8_t getID(void);
kenjiArai 6:f94ffb546799 168
kenjiArai 6:f94ffb546799 169 /** Software reset
kenjiArai 6:f94ffb546799 170 *
kenjiArai 6:f94ffb546799 171 */
kenjiArai 6:f94ffb546799 172 bool resetChip_by_sw(void);
kenjiArai 6:f94ffb546799 173
kenjiArai 6:f94ffb546799 174 /** Check BME280 is okay or not
kenjiArai 6:f94ffb546799 175 *
kenjiArai 6:f94ffb546799 176 */
kenjiArai 6:f94ffb546799 177 bool check_chip(void);
kenjiArai 6:f94ffb546799 178
kenjiArai 7:d94871acb463 179 /** Set I2C clock frequency
kenjiArai 7:d94871acb463 180 * @param freq.
kenjiArai 7:d94871acb463 181 * @return none
kenjiArai 7:d94871acb463 182 */
kenjiArai 7:d94871acb463 183 void frequency(int hz);
kenjiArai 7:d94871acb463 184
kenjiArai 6:f94ffb546799 185 #if 0
kenjiArai 6:f94ffb546799 186 /** Calculate relative altitude
kenjiArai 6:f94ffb546799 187 *
kenjiArai 6:f94ffb546799 188 */
kenjiArai 6:f94ffb546799 189 double calcAltitude_relative(double refernce_pressue);
kenjiArai 6:f94ffb546799 190 #endif
kenjiArai 6:f94ffb546799 191
MACRUM 0:ade9be832910 192 private:
MACRUM 0:ade9be832910 193
MACRUM 0:ade9be832910 194 I2C *i2c_p;
MACRUM 0:ade9be832910 195 I2C &i2c;
MACRUM 0:ade9be832910 196 char address;
MACRUM 0:ade9be832910 197 uint16_t dig_T1;
MACRUM 0:ade9be832910 198 int16_t dig_T2, dig_T3;
MACRUM 0:ade9be832910 199 uint16_t dig_P1;
MACRUM 0:ade9be832910 200 int16_t dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9;
MACRUM 0:ade9be832910 201 uint16_t dig_H1, dig_H3;
MACRUM 0:ade9be832910 202 int16_t dig_H2, dig_H4, dig_H5, dig_H6;
MACRUM 0:ade9be832910 203 int32_t t_fine;
MACRUM 0:ade9be832910 204
MACRUM 0:ade9be832910 205 };
MACRUM 0:ade9be832910 206
MACRUM 0:ade9be832910 207 #endif // MBED_BME280_H