Note: Bosch Sensortec BMP280 vs BME280 Sensor Confusion

While looking around for some cheap environmental sensors, I came across the seemingly ideal and relatively popular Bosch Sensortec BME280. This is a digital I2C sensor that can operate at 1.8 or 3.3V, providing temperature, humidity and barometric pressure measurements with high accuracy, low energy consumption and at low cost. This makes it ideal for weather stations, temperature monitoring for comfort, etc.

As a result, I sought out a few of these BME280 sensors from sellers on eBay, but ended up receiving the lesser BMP280 on two separate occasions. The BMP280 differs from the BME280 in lacking humidity measurement and having a different ID, so it didn’t work as I expected and I thought I did something wrong. So I decided I might as well write a note to help others in case they have been supplied incorrect products and how to diagnose it.

The Products

I purchased two different listings with two different-looking PCBs, both claiming to be BME280 modules with humidity function. I soldered some pins to it immediately and tried to get to work.

Test 1: By Software

The units are 1.8/3.3V capable and are not directly compatible with 5V interfaces without an appropriately configured level shifter. As a result, I connected it to a 3.3V Arduino Pro Micro. I downloaded the Adafruit BME280 library and tried the demo sketch.

Trying both 0x76 and 0x77 I2C addresses by modifying the library .h file, I knew there was a problem. I suspected it was a BMP280, so I tried the Adafruit BMP280 library which worked right away.

To me, this was a smoking gun indication that the unit is not a BME280 as described, but the seller wasn’t pleased with the explanation.

Test 2: By Visual Inspection of the PCB

Looking at the rear of the PCB, it seems the purple PCB may be the “genuine” and the blue PCB a “clone” – notice the poor printing by comparison and the M which became I1. Regardless, it seems the PCB was designed for BME280 and BMP280 – the black dot on the left module on the P text indicates it’s a BMP280. This was, however, confusing to the seller who insisted this meant it was a BME280 as the E was showing. The purple module on the right didn’t have any mark.

Test 3: By Visual Inspection of the Package

The sellers, being absolutely annoying, demanded to see the markings that say BMP280 to substantiate my claims. Unfortunately, that’s not how small electronics work – on a package which measures under 3x3mm, they use coded markings. In this case, it says DTC KW.

In the case of the purple board, it was 133 KN.

This is the smoking gun. If you look at the BME280 datasheet, on Page 44, the markings for mass production devices is shown. The marking should be in the format ??? U? where the U indicates BME280. The final ? is only a P according to this revision of the datasheet as there is only one subcontractor, so the last two characters should be UP.

Comparing this with the BMP280 datasheet, on Page 41, the format should be ??? K?, where the last ? is either P, U, N, W. Thus KP, KU, KN, KW are all BMP280 devices.

It’s not easy getting good images of something this small – so I suspected the sellers were just being unreasonable for the sake of it and even then, only in one case I managed a partial refund. The other was left at leaving negative feedback.


If you try to buy a Bosch Sensortec BME280 module on eBay, there’s a good chance you will get the lesser BMP280 instead. The reason seems to be sellers that don’t know what they are selling, a supply chain that doesn’t understand the difference between a BME280 and the BMP280 and a PCB break-out design that is shared between the two types of sensors. As a result, buying these sensors can get quite frustrating, as the sellers often get away with it.

If you want to be sure you get what you ordered, you’ll probably have to spend quite a bit more for a proper module from the likes of Adafruit, where everything is clearly labelled and controlled.

About lui_gough

I'm a bit of a nut for electronics, computing, photography, radio, satellite and other technical hobbies. Click for more about me!
This entry was posted in Electronics and tagged , , , , . Bookmark the permalink.

15 Responses to Note: Bosch Sensortec BMP280 vs BME280 Sensor Confusion

  1. David Griffiths says:

    I have a BMP280 on my home weather station but I have found it to be unreliable. It locks up every few weeks and needs to be reset. The barometric readings I see from it are also about 20 millibars off from the local BoM station ?? This may be due to a software error as a fairly serious amount of number crunching is needed to get the output of the chip into usable numbers.
    I am now looking at using an ST Micro device LPS22HB that looks much easier to get along with – but it is too small to solder by hand 🙁 and I haven’t found anyone offering them on a breakout board. It doesn’t have humidity but I use a separate Honeywell chip for that.
    Cheers DG

    • lui_gough says:

      Barometric readings that have a fixed offset from a known reference are not unexpected, as barometric pressure will change as a function of the altitude of the sensor versus sea level. As far as I know, most weather observations are made with sea-level corrected barometric pressure – about 12mbar per 100m altitude or something like that. In fact that’s how the barometric sensor is useful in smartphones for floor change estimation and providing rough altitude for GPS locking.

      Sensor locking up is probably just a problem with your library code – in my case, I account for the fact that the I2C bus will not be so reliable when extended out to any significant distance – e.g. impulse noise from lightning etc. So I force my code to reinitialize the sensor before taking a reading and it hasn’t faulted in months (BMP280, as I don’t have a BME280 – damn those eBay sellers). Other than that, it could be power related. I’ve also played with an Si7021 that doesn’t do barometric pressure, but mine succumbed to water damage and mild electrolysis, which is unfortunate.

      – Gough

      Edit: Added a few ideas.

      • David Griffiths says:

        Yes I adjust for height above sea level (200m in my case) and it still reads about low. Currently 1003 while RCH Air Base is reading 1017 ??
        The I2C re-init is a good idea, but shouldn’t have to do it!
        Haven’t had a chance to try the LPS22HB chips yet.

  2. Mark says:

    Hmmm… I checked some boards that I bought a few months back (but have not tried to use). One brand are “UP”, the other is “LP”. Any idea what those LP devices are?

    • lui_gough says:

      I’m not sure – but assuming that they work as BME280 sensors, there’s a slim chance they might be engineering sample units? The markings will be ??N ?? where the N is either a */e/E.

      – Gough

      • Mark says:

        The full markings are:

        Also, there may be some error in BME280 libraries/sample code out there. I have two different USB environmental sensors that use the BME280. These output approximately the same humidity values (say around 38%), but two very expensive calibrated metrology grade humidity sensors that I have read about 50% (which was close to the value that the National Weather Service was reporting).

        • lui_gough says:

          For humidity, you can try calibrating using the salt-water test (e.g. for a check, but an error in the library processing code is actually not unlikely as I had discovered a similar error in some code that dealt with temperature from the Xtrinsic-Sense board in the past for temperature that resulted in the fractional part of the temperature being incorrectly computed.

          So far, I’ve not had any luck obtaining BME280s at a decent (enough) price, so I’m still running an Si7021 indoors for indoor RH with no outdoor RH. Interestingly, my old 433Mhz weather station must have had corrosion/oxide build-up on its RH sensor as it always reports 20% regardless of rain or sun!

          – Gough

  3. Mark says:

    My good humidity sensors (Vaisala and Robertson) are kept calibrated to NIST traceable standards, so I trust those… they agree to within 0.1% RH.

    Since the two BME280 USB sensors (different makers and designs/processors) report values that are close to each other but disagree with the “known good” sensors I think the error is in some reference code that the USB sensor makers used (or the BME280 is just a crappy humidity sensor). They consistently produce readings around 10% RH lower than the calibrated devices.

  4. Zoltan says:


    I has just run into the same misleading. At the start of August I ordered 5pcs of BME280-3.3V breakout from ebay. Those had arrived about 2 weeks ago, but I had only time yesterday evening to check them. It came out, all of them are BMP280s. I have 2 pieces of GY-BME280 from a local seller used as “reference”, they work well, but the new ones didn’t want.
    I took a try with an i2c scanner and an ID register read-out sketch, all of 5 new boards show device ID as 0x58 (BMP280 according to the datasheet) on i2c address 0x76. Sketches that use BMP280 library work well with new modules, but I would also need the humidity data…
    Now I am in a correspondence with the seller, don’t know how it would end.

    BTW, studying the datasheets I can see, that the device marking and the vent hole location is different on the two products! If you look at the component as you can straight read the letters, the vent hole is on the left-hand side of the package in case of BME280, and the it is on the right-hand side of the package in case of BMP280. Moreover BME280 has an almost regular quadrat shaped metal body instead of BMP280’s thinner rectangular body. These differences are well seen on ebay photos too, assuming, that the photos were made of the actual thing they want to sell. These facts can help to select proper article even if you cannot read device markings on the ebay photos.


    • lui_gough says:

      Dear Zoltan,

      Thanks for the reply – interesting to hear your observations in regards to the package configuration. I’ve not managed to get a genuine BME280 to compare, so I wasn’t aware, but given your description it should be easier to identify. The problem is that the eBay pictures rarely represent the actual product that is shipped, so I don’t think that’s a safe way to judge. But it will be a good way to avoid the ones that are likely to be BMP280s.

      – Gough

  5. Tyler Durden says:

    for anyone that wants a visual guide to how to tell the sensors apart

  6. mutman says:

    i found a seller that offers the bme and bmp at different prices so might be legit ?
    $1.69 vs $6.79
    i ordered the bmE and i’ll let you know what turns up

    • Zoltan Szilvasy says:

      Yes, I see similar differences on ebay, the BMEs are offered on 3-4 times in price than BMPs. However, many sellers have wrong pictures about the articles. For example, selecting BMP280 from drop-down list on the link you gave, the associated picture seems showing a PCB with a BME sensor. We can only hope that seller really knows what he sells and will send the correct sensor.
      The other possibilites – in my case – buying sensors from a “known” seller, who I had purchased more things from, earlier, without problems; and/or paying attention to the seller’s ranking and user ratings – you can also read textual evaluations of last businesses.

  7. mutman says:

    Reporting back 🙂 Yet to connect and test, but I have just recieved the package and it is square with the hole in the middle as per the link Tyler provided. Thanks Tyler 🙂

  8. mutman says:

    almost forgot to get back here. eBay seller i bought from (linked above) is selling ‘good’ bme280’s. I using the sparkfun library and the device is actually set for the ‘second’ address 0x76.
    using a nano v3 with the old bootloader i get great readings from this code
    about 4hPa off my local weather station readings at all times


    //SDA -> A4
    //SCL -> A5

    // Declare Stuff

    #include “SparkFunBME280.h”
    BME280 thpaSensor;
    unsigned long previousMillis = 0;
    const long readInterval = 1000; // ?? 50mS lowest ??

    void setup()
    Serial.println(“Insert Weather Related Comment Here”);

    if (thpaSensor.beginI2C() == false)
    Serial.println(“Sensor Dead ? Check the Connections Mate – BME280 sparkfun library seti2caddress to 0x76”);
    while(1); //Freeze

    void loop()
    unsigned long currentMillis = millis();
    if (currentMillis – previousMillis >= readInterval)
    previousMillis = currentMillis;

    void btTHPA()
    Serial.print(“Temp: “);
    Serial.print(thpaSensor.readTempC(), 2);
    Serial.print(” || Humidity: “);
    Serial.print(thpaSensor.readFloatHumidity(), 0);
    Serial.print(” || Pressure: “);
    Serial.print(thpaSensor.readFloatPressure(), 0);
    Serial.print(” || Alt: “);
    Serial.print(thpaSensor.readFloatAltitudeMeters(), 1);
    Serial.print(” || Dewpoint: “);
    Serial.print(thpaSensor.dewPointC(), 2);

Error: Comment is Missing!