BME280をI2CとSPIで使用するためのライブラリ。

Dependents:   BNO055_BME280_ Yabusame2_gyro GRhanawaizman

Committer:
Yajirushi
Date:
Tue Nov 29 02:58:53 2016 +0000
Revision:
0:2baa0f77d4d2
FISRT COMMIT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yajirushi 0:2baa0f77d4d2 1 #ifndef BME280_H
Yajirushi 0:2baa0f77d4d2 2 #define BME280_H
Yajirushi 0:2baa0f77d4d2 3
Yajirushi 0:2baa0f77d4d2 4 #include "mbed.h"
Yajirushi 0:2baa0f77d4d2 5
Yajirushi 0:2baa0f77d4d2 6 //I2Cデフォルトスレーブアドレス
Yajirushi 0:2baa0f77d4d2 7 #define BME280_I2C_DEFADDR 0x76
Yajirushi 0:2baa0f77d4d2 8 //SPIデフォルト通信スピード[Hz]
Yajirushi 0:2baa0f77d4d2 9 #define BME280_SPI_DEFSPD 3000000
Yajirushi 0:2baa0f77d4d2 10
Yajirushi 0:2baa0f77d4d2 11 #define BME280R_ID 0xD0
Yajirushi 0:2baa0f77d4d2 12
Yajirushi 0:2baa0f77d4d2 13 #define BME280R_RESET 0xE0
Yajirushi 0:2baa0f77d4d2 14 #define BME280R_CTRL_HUM 0xF2
Yajirushi 0:2baa0f77d4d2 15 #define BME280R_STATUS 0xF3
Yajirushi 0:2baa0f77d4d2 16 #define BME280R_CTRL_MEAS 0xF4
Yajirushi 0:2baa0f77d4d2 17 #define BME280R_CONFIG 0xF5
Yajirushi 0:2baa0f77d4d2 18
Yajirushi 0:2baa0f77d4d2 19 #define BME280R_PRESS_MSB 0xF7
Yajirushi 0:2baa0f77d4d2 20 #define BME280R_PRESS_LSB 0xF8
Yajirushi 0:2baa0f77d4d2 21 #define BME280R_PRESS_XLSB 0xF9
Yajirushi 0:2baa0f77d4d2 22
Yajirushi 0:2baa0f77d4d2 23 #define BME280R_TEMP_MSB 0xFA
Yajirushi 0:2baa0f77d4d2 24 #define BME280R_TEMP_LSB 0xFB
Yajirushi 0:2baa0f77d4d2 25 #define BME280R_TEMP_XLSB 0xFC
Yajirushi 0:2baa0f77d4d2 26
Yajirushi 0:2baa0f77d4d2 27 #define BME280R_HUM_MSB 0xFD
Yajirushi 0:2baa0f77d4d2 28 #define BME280R_HUM_LSB 0xFE
Yajirushi 0:2baa0f77d4d2 29
Yajirushi 0:2baa0f77d4d2 30 #define BME280R_CALIB00 0x88
Yajirushi 0:2baa0f77d4d2 31 #define BME280R_CALIB01 0x89
Yajirushi 0:2baa0f77d4d2 32 #define BME280R_CALIB02 0x8A
Yajirushi 0:2baa0f77d4d2 33 #define BME280R_CALIB03 0x8B
Yajirushi 0:2baa0f77d4d2 34 #define BME280R_CALIB04 0x8C
Yajirushi 0:2baa0f77d4d2 35 #define BME280R_CALIB05 0x8D
Yajirushi 0:2baa0f77d4d2 36 #define BME280R_CALIB06 0x8E
Yajirushi 0:2baa0f77d4d2 37 #define BME280R_CALIB07 0x8F
Yajirushi 0:2baa0f77d4d2 38 #define BME280R_CALIB08 0x90
Yajirushi 0:2baa0f77d4d2 39 #define BME280R_CALIB09 0x91
Yajirushi 0:2baa0f77d4d2 40 #define BME280R_CALIB10 0x92
Yajirushi 0:2baa0f77d4d2 41 #define BME280R_CALIB11 0x93
Yajirushi 0:2baa0f77d4d2 42 #define BME280R_CALIB12 0x94
Yajirushi 0:2baa0f77d4d2 43 #define BME280R_CALIB13 0x95
Yajirushi 0:2baa0f77d4d2 44 #define BME280R_CALIB14 0x96
Yajirushi 0:2baa0f77d4d2 45 #define BME280R_CALIB15 0x97
Yajirushi 0:2baa0f77d4d2 46 #define BME280R_CALIB16 0x98
Yajirushi 0:2baa0f77d4d2 47 #define BME280R_CALIB17 0x99
Yajirushi 0:2baa0f77d4d2 48 #define BME280R_CALIB18 0x9A
Yajirushi 0:2baa0f77d4d2 49 #define BME280R_CALIB19 0x9B
Yajirushi 0:2baa0f77d4d2 50 #define BME280R_CALIB20 0x9C
Yajirushi 0:2baa0f77d4d2 51 #define BME280R_CALIB21 0x9D
Yajirushi 0:2baa0f77d4d2 52 #define BME280R_CALIB22 0x9E
Yajirushi 0:2baa0f77d4d2 53 #define BME280R_CALIB23 0x9F
Yajirushi 0:2baa0f77d4d2 54 #define BME280R_CALIB24 0xA0
Yajirushi 0:2baa0f77d4d2 55 #define BME280R_CALIB25 0xA1
Yajirushi 0:2baa0f77d4d2 56
Yajirushi 0:2baa0f77d4d2 57 #define BME280R_CALIB26 0xE1
Yajirushi 0:2baa0f77d4d2 58 #define BME280R_CALIB27 0xE2
Yajirushi 0:2baa0f77d4d2 59 #define BME280R_CALIB28 0xE3
Yajirushi 0:2baa0f77d4d2 60 #define BME280R_CALIB29 0xE4
Yajirushi 0:2baa0f77d4d2 61 #define BME280R_CALIB30 0xE5
Yajirushi 0:2baa0f77d4d2 62 #define BME280R_CALIB31 0xE6
Yajirushi 0:2baa0f77d4d2 63 #define BME280R_CALIB32 0xE7
Yajirushi 0:2baa0f77d4d2 64 #define BME280R_CALIB33 0xE8
Yajirushi 0:2baa0f77d4d2 65 #define BME280R_CALIB34 0xE9
Yajirushi 0:2baa0f77d4d2 66 #define BME280R_CALIB35 0xEA
Yajirushi 0:2baa0f77d4d2 67 #define BME280R_CALIB36 0xEB
Yajirushi 0:2baa0f77d4d2 68 #define BME280R_CALIB37 0xEC
Yajirushi 0:2baa0f77d4d2 69 #define BME280R_CALIB38 0xED
Yajirushi 0:2baa0f77d4d2 70 #define BME280R_CALIB39 0xEE
Yajirushi 0:2baa0f77d4d2 71 #define BME280R_CALIB40 0xEF
Yajirushi 0:2baa0f77d4d2 72 #define BME280R_CALIB41 0xF0
Yajirushi 0:2baa0f77d4d2 73
Yajirushi 0:2baa0f77d4d2 74 class BME280_CTRL{
Yajirushi 0:2baa0f77d4d2 75 public:
Yajirushi 0:2baa0f77d4d2 76 BME280_CTRL();
Yajirushi 0:2baa0f77d4d2 77 virtual ~BME280_CTRL();
Yajirushi 0:2baa0f77d4d2 78 protected:
Yajirushi 0:2baa0f77d4d2 79 char interface_mode;
Yajirushi 0:2baa0f77d4d2 80 public:
Yajirushi 0:2baa0f77d4d2 81 char getInterfaceMode();
Yajirushi 0:2baa0f77d4d2 82 virtual void init();
Yajirushi 0:2baa0f77d4d2 83 virtual char rr(char regAddr);
Yajirushi 0:2baa0f77d4d2 84 virtual char rrc(char startRegAddr, char *receiveBytes, char length);
Yajirushi 0:2baa0f77d4d2 85 virtual char wr(char regAddr, char wBytes);
Yajirushi 0:2baa0f77d4d2 86 };
Yajirushi 0:2baa0f77d4d2 87
Yajirushi 0:2baa0f77d4d2 88 class BME280_SPI_CTRL : public BME280_CTRL{
Yajirushi 0:2baa0f77d4d2 89 public:
Yajirushi 0:2baa0f77d4d2 90 BME280_SPI_CTRL(SPI *si, DigitalOut *spi_cs, unsigned int speedHz);
Yajirushi 0:2baa0f77d4d2 91 virtual ~BME280_SPI_CTRL();
Yajirushi 0:2baa0f77d4d2 92 private:
Yajirushi 0:2baa0f77d4d2 93 SPI *iface;
Yajirushi 0:2baa0f77d4d2 94 DigitalOut *cs;
Yajirushi 0:2baa0f77d4d2 95 unsigned int speed;
Yajirushi 0:2baa0f77d4d2 96 public:
Yajirushi 0:2baa0f77d4d2 97 virtual void init();
Yajirushi 0:2baa0f77d4d2 98 virtual char rr(char regAddr);
Yajirushi 0:2baa0f77d4d2 99 virtual char rrc(char startRegAddr, char *receiveBytes, char length);
Yajirushi 0:2baa0f77d4d2 100 virtual char wr(char regAddr, char wBytes);
Yajirushi 0:2baa0f77d4d2 101 };
Yajirushi 0:2baa0f77d4d2 102
Yajirushi 0:2baa0f77d4d2 103 class BME280_I2C_CTRL : public BME280_CTRL{
Yajirushi 0:2baa0f77d4d2 104 public:
Yajirushi 0:2baa0f77d4d2 105 BME280_I2C_CTRL(I2C *iic, char addr, unsigned int freq);
Yajirushi 0:2baa0f77d4d2 106 virtual ~BME280_I2C_CTRL();
Yajirushi 0:2baa0f77d4d2 107 private:
Yajirushi 0:2baa0f77d4d2 108 I2C *iface;
Yajirushi 0:2baa0f77d4d2 109 char i2c_readAddr;
Yajirushi 0:2baa0f77d4d2 110 char i2c_writeAddr;
Yajirushi 0:2baa0f77d4d2 111 unsigned int i2c_freq;
Yajirushi 0:2baa0f77d4d2 112 public:
Yajirushi 0:2baa0f77d4d2 113 virtual void init();
Yajirushi 0:2baa0f77d4d2 114 virtual char rr(char regAddr);
Yajirushi 0:2baa0f77d4d2 115 virtual char rrc(char startRegAddr, char *receiveBytes, char length);
Yajirushi 0:2baa0f77d4d2 116 virtual char wr(char regAddr, char wBytes);
Yajirushi 0:2baa0f77d4d2 117 };
Yajirushi 0:2baa0f77d4d2 118
Yajirushi 0:2baa0f77d4d2 119 class BOARDC_BME280{
Yajirushi 0:2baa0f77d4d2 120 public:
Yajirushi 0:2baa0f77d4d2 121 BOARDC_BME280(PinName mosi, PinName miso, PinName sck, PinName scs, unsigned int spdHz=BME280_SPI_DEFSPD);
Yajirushi 0:2baa0f77d4d2 122 BOARDC_BME280(SPI *spi, PinName scs, unsigned int spdHz=BME280_SPI_DEFSPD);
Yajirushi 0:2baa0f77d4d2 123 BOARDC_BME280(SPI *spi, DigitalOut *spi_cs, unsigned int spdHz=BME280_SPI_DEFSPD);
Yajirushi 0:2baa0f77d4d2 124
Yajirushi 0:2baa0f77d4d2 125 BOARDC_BME280(PinName sda, PinName scl, char addr=BME280_I2C_DEFADDR, unsigned int freq=100000);
Yajirushi 0:2baa0f77d4d2 126 BOARDC_BME280(I2C *iic, char addr=BME280_I2C_DEFADDR, unsigned int freq=100000);
Yajirushi 0:2baa0f77d4d2 127 private:
Yajirushi 0:2baa0f77d4d2 128 BME280_CTRL *ctrl;
Yajirushi 0:2baa0f77d4d2 129
Yajirushi 0:2baa0f77d4d2 130 signed int t_fine;
Yajirushi 0:2baa0f77d4d2 131
Yajirushi 0:2baa0f77d4d2 132 unsigned short T1;
Yajirushi 0:2baa0f77d4d2 133 signed short T2;
Yajirushi 0:2baa0f77d4d2 134 signed short T3;
Yajirushi 0:2baa0f77d4d2 135
Yajirushi 0:2baa0f77d4d2 136 unsigned short P1;
Yajirushi 0:2baa0f77d4d2 137 signed short P2;
Yajirushi 0:2baa0f77d4d2 138 signed short P3;
Yajirushi 0:2baa0f77d4d2 139 signed short P4;
Yajirushi 0:2baa0f77d4d2 140 signed short P5;
Yajirushi 0:2baa0f77d4d2 141 signed short P6;
Yajirushi 0:2baa0f77d4d2 142 signed short P7;
Yajirushi 0:2baa0f77d4d2 143 signed short P8;
Yajirushi 0:2baa0f77d4d2 144 signed short P9;
Yajirushi 0:2baa0f77d4d2 145
Yajirushi 0:2baa0f77d4d2 146 unsigned char H1;
Yajirushi 0:2baa0f77d4d2 147 signed short H2;
Yajirushi 0:2baa0f77d4d2 148 unsigned char H3;
Yajirushi 0:2baa0f77d4d2 149 signed short H4;
Yajirushi 0:2baa0f77d4d2 150 signed short H5;
Yajirushi 0:2baa0f77d4d2 151 signed char H6;
Yajirushi 0:2baa0f77d4d2 152 public:
Yajirushi 0:2baa0f77d4d2 153 void initialize(bool initIface=true);
Yajirushi 0:2baa0f77d4d2 154
Yajirushi 0:2baa0f77d4d2 155 char getInterfaceMode();
Yajirushi 0:2baa0f77d4d2 156
Yajirushi 0:2baa0f77d4d2 157 char getChipID();
Yajirushi 0:2baa0f77d4d2 158
Yajirushi 0:2baa0f77d4d2 159 void reset();
Yajirushi 0:2baa0f77d4d2 160
Yajirushi 0:2baa0f77d4d2 161 char getCTRL_humidity();
Yajirushi 0:2baa0f77d4d2 162 void setCTRL_humidity(char regVal);
Yajirushi 0:2baa0f77d4d2 163
Yajirushi 0:2baa0f77d4d2 164 char getCTRL_measuring();
Yajirushi 0:2baa0f77d4d2 165 void setCTRL_measuring(char regVal);
Yajirushi 0:2baa0f77d4d2 166
Yajirushi 0:2baa0f77d4d2 167 unsigned int getOverSample_P();
Yajirushi 0:2baa0f77d4d2 168 unsigned int getOverSample_T();
Yajirushi 0:2baa0f77d4d2 169 unsigned int getOverSample_H();
Yajirushi 0:2baa0f77d4d2 170 void setOverSample_P(unsigned int oversampling);
Yajirushi 0:2baa0f77d4d2 171 void setOverSample_T(unsigned int oversampling);
Yajirushi 0:2baa0f77d4d2 172 void setOverSample_H(unsigned int oversampling);
Yajirushi 0:2baa0f77d4d2 173
Yajirushi 0:2baa0f77d4d2 174 char getConfig();
Yajirushi 0:2baa0f77d4d2 175 void setConfig(char regVal);
Yajirushi 0:2baa0f77d4d2 176
Yajirushi 0:2baa0f77d4d2 177 char getStatus();
Yajirushi 0:2baa0f77d4d2 178 bool isReady();
Yajirushi 0:2baa0f77d4d2 179
Yajirushi 0:2baa0f77d4d2 180 char getMode();
Yajirushi 0:2baa0f77d4d2 181
Yajirushi 0:2baa0f77d4d2 182 void updateCalib();
Yajirushi 0:2baa0f77d4d2 183 void updateCalibT();
Yajirushi 0:2baa0f77d4d2 184 void updateCalibP();
Yajirushi 0:2baa0f77d4d2 185 void updateCalibH();
Yajirushi 0:2baa0f77d4d2 186
Yajirushi 0:2baa0f77d4d2 187 float getTemp(unsigned int mode=0);
Yajirushi 0:2baa0f77d4d2 188 float getTemp_Celsius();
Yajirushi 0:2baa0f77d4d2 189 float getTemp_Fahrenheit();
Yajirushi 0:2baa0f77d4d2 190 float getTemp_Kelvin();
Yajirushi 0:2baa0f77d4d2 191
Yajirushi 0:2baa0f77d4d2 192 float getPress(unsigned int mode=0);
Yajirushi 0:2baa0f77d4d2 193 float getPress_Pascal();
Yajirushi 0:2baa0f77d4d2 194 float getPress_hPa();
Yajirushi 0:2baa0f77d4d2 195 float getPress_psi();
Yajirushi 0:2baa0f77d4d2 196
Yajirushi 0:2baa0f77d4d2 197 float getHum();
Yajirushi 0:2baa0f77d4d2 198
Yajirushi 0:2baa0f77d4d2 199 double getPress64(unsigned int mode=0);
Yajirushi 0:2baa0f77d4d2 200 double getPress64_Pascal();
Yajirushi 0:2baa0f77d4d2 201 double getPress64_hPa();
Yajirushi 0:2baa0f77d4d2 202 double getPress64_psi();
Yajirushi 0:2baa0f77d4d2 203 };
Yajirushi 0:2baa0f77d4d2 204
Yajirushi 0:2baa0f77d4d2 205 #endif