Bosch BME280

I'm trying to write an object or code for a BME280. I've searched the OBEX and Google for something already written but haven't found anything.

Although I learn more when I do it myself and sometimes have more fun, I'd rather not reinvent the wheel if there's one out there.

Anyone know of anything in SPIN?


  • 5 Comments sorted by Date Added Votes
  • I loved the Bosch BNO055, so I wondered what the BME280 was. A copy of the description follows for others wondering the same thing. It looks like a worthwhile interface project;


    The BME280 is an integrated environmental sensor developed specifically for mobile applications where size and low power consumption are key design constraints. The unit combines individual high linearity, high accuracy sensors for pressure, humidity and temperature in an 8-pin metal-lid 2.5 x 2.5 x 0.93 mm³ LGA package, designed for low current consumption (3.6 μA @1Hz), long term stability and high EMC robustness.

    The humidity sensor features an extremely fast response time which supports performance requirements for emerging applications such as context awareness, and high accuracy over a wide temperature range. The pressure sensor is an absolute barometric pressure sensor with features exceptionally high accuracy and resolution at very low noise. The integrated temperature sensor has been optimized for very low noise and high resolution. It is primarily used for temperature compensation of the pressure and humidity sensors, and can also be used for estimating ambient temperature.

    The BME280 supports a full suite of operating modes which provides the flexibility to optimize the device for power consumption, resolution and filter performance."


    - Context awareness, e.g. skin detection, room change detection

    - Fitness monitoring / well-being

    - Warning regarding dryness or high temperatures

    - Measurement of volume and air flow

    - Home automation control

    - Control heating, ventilation, air conditioning (HVAC)

    - Internet of things

    - GPS enhancement (e.g. time-to-first-fix improvement, dead reckoning, slope detection)

    - Indoor navigation (change of floor detection, elevator detection)

    - Outdoor navigation, leisure and sports applications

    - Weather forecast

    - Vertical velocity indication (rise/sink speed)
  • Here's my 1st attempt.
      _clkmode = xtal1 + pll16x      '80 MHz system clock
      _xinfreq = 5_000_000
      BME = $77            '$77 for BME280 w/ SDO tied to Vcc (Bosch hum, bar, temp)
      SCL = 20
      SDA = 21
      bitrate = 100000
      'BME registers
      hum_lsb = $FE
      hum_msb = $FD
      temp_xlsb = $FC
      temp_lsb = $FB
      temp_msb = $FA
      pres_xlsb = $F9
      pres_lsb = $F8
      pres_msb = $F7
      tv   :   "tv_text" 
      I2C  :   "I2C PASM driver v1.8od"
      byte BMEbuf[8]
      long sum
    PUB init
    PUB main
      I2C.writeByte(BME,$F2,%00000000)  ' set ctrl_hum    no oversampling 
      I2C.writeByte(BME,$F5,%00000000)   '  default
      I2C.writeByte(BME,$F4,%00000011)  'set ctrl_meas register no temp & pres oversampling,select normal mode
        I2C.readBytes(BME,$F7,@BMEbuf[0],8)  'read BME registers $F7-$FE, store in BMEbuf
        TV.bin(BMEbuf[2],8)         'see if anything shows up
        waitcnt(clkfreq*5+cnt)     '5 seconds between measurments
        outa[16]~~              'flash a LED to know it's running
        sum:= BMEbuf[temp_xlsb] | BMEbuf[temp_lsb] << 8 | BMEbuf[temp_msb] << 16  'sum of temp bufs           
        TV.move (8,8)
        waitcnt(clkfreq*5+cnt)     '5 seconds between measurments
  • I am using the BME280 in my weather station that I built.

    Unfortunately all my code and library is in C.

  • If it's commented it still may help me.
  • Ok, I put the library on the OBEX.

    After looking at this library I remember what a hell of a time I had to get the math to work.
    Not the easiest device to read the data from.

Sign In or Register to comment.