Has anybody tested this particular 6 pins BME 280 sensor?

Hi,

I just bought the following BME 280 sensor:

https://www.aliexpress.com/item/4000089030348.html?spm=a2g0s.9042311.0.0.41274c4dA01lC2

My wiring:

  • Pin VCC on the sensor -> 3.3 V on UNO
  • Pin GND -> GND
  • Pin SCL -> A5
  • Pin SDA -> A4
  • Pin CSB -> not connected
  • Pin SDO -> not connected

I connected it to the I2C bus of an Arduino UNO and found out with the i2c scan program its address. It is 0x76, as used in the included header file:

#include <Adafruit_Sensor.h>

Then I tried to run example sketches from some libraries that I found, like the Adafruit_280 or SparkFun BME 280. In the Serial Monitor I found messages like (run of the Adafruit library example):

19:00:31.249 -> BME280 test
19:00:31.249 -> Could not find a valid BME280 sensor, check wiring, address, sensor ID!
19:00:31.295 -> SensorID was: 0x58
19:00:31.331 -> ID of 0xFF probably means a bad address, a BMP 180 or BMP 085
19:00:31.370 -> ID of 0x56-0x58 represents a BMP 280,
19:00:31.417 -> ID of 0x60 represents a BME 280.
19:00:31.512 -> ID of 0x61 represents a BME 680.

That is all that appears in the Serial Monitor, i.e. no measured values.

Seeing this, I tried also with some BMP libraries but had the same negative results.

TIA for your suggestions.

Regards,

Victor

The UNO's I2C pins are pulled up to 5V with 30k internal pullup resistors, is your module's I2C pins 5V tolerant?
You may need logic level shifters (3.3V to 5V).

Thanks for asking.

In the sensor's short specification found on the sellers page it is written: "Supply Voltage: 1.8 - 5V DC".

https://www.aliexpress.com/item/4000089030348.html?spm=a2g0s.9042311.0.0.41274c4dA01lC2

I tested the sensor also at 5V and it apparently accepted it, even if the results of testing were the same. I tested it at 3.3 V and at 5V also with the i2c_scanner and each time the correct address appeared in the serial monitor.

For these reasons I suppose that the sensor is 5V tolerant.

I still wonder how it is it possible to produce and sell a complex "BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor Breakout Module BMP280-3.3V" for US$ 1.15 (+ 0.11 for shipping) only. Of course, these can be the wonders of mass production and of reduced R&D + support costs.

Absolute max supply voltage of a BME280 is 4.5volt (page 11 of the datasheet).
Testing with 5volt has probably fried it.
This (cheap) board has NO voltage regulator and NO I2C level shifters, so is 3.3volt only.
I2C pull up should be disabled in setup() on an a 5volt Arduino Uno.
Leo..

1 Like

Leo, thanks for commenting.

Absolute max supply voltage of a BME280 is 4.5volt (page 11 of the datasheet).

Please let me know if you found the datasheet for this particular sensor and if so, where.

Testing with 5volt has probably fried it.

If the sensor is fried then I wonder why in the Serial Monitor appears "Could not find a valid BME280 sensor, check wiring, address, sensor ID! SensorID was: 0x58 etc". And also why the sketch that scans the addresses on the I2C bus returns an address (that is correct).

This (cheap) board has NO voltage regulator and NO I2C level shifters, so is 3.3volt only.

The seller asserts something different, what I cited previously.

I2C pull up should be disabled in setup() on an a 5volt Arduino Uno.

Thanks. I added the code: digitalWrite(A4, LOW); digitalWrite(A5, LOW);

but nothing changed. I wonder if I should add to these pins two pull-up resistors connected to 3.3 V.

With using the Adafruit BME280 library did you start the BME280 device with the correct address

  if (!bme.begin(0x76))

victor-ch:
Please let me know if you found the datasheet for this particular sensor and if so, where.

If the sensor is fried then I wonder why in the Serial Monitor appears "Could not find a valid BME280 sensor, check wiring, address, sensor ID! SensorID was: 0x58 etc". And also why the sketch that scans the addresses on the I2C bus returns an address (that is correct).

The seller asserts something different, what I cited previously.

Thanks. I added the code: digitalWrite(A4, LOW); digitalWrite(A5, LOW);
but nothing changed. I wonder if I should add to these pins two pull-up resistors connected to 3.3 V.

Google "BME280 datasheet", and look for the .pdf
Most parts can be found on the net that way.
I think I got it from the Adafruit website (BME280 page).

Some parts of the chip may be damaged. There is ofcourse also the possibility of a fake chip.

Compare your board with the Adafruit version, and look for the 5-pin regulator and the two 3-pin level shift fets.

Too late for this chip, and there are already pull up resistors to 3.3volt on your board.
Leo..

The sensor you bought seems an BMP280 not a BME280

I have been testing the BME 280 on a board pretty much identical to yours.

This board is a 3.3 V board regardless of what the mfg says.

The default address is 0x76, it could be change to 0x77 by pulling the pin furthest from the VCC pin (don't remember the designation) to Vcc

For ANY I2C project, I would run the I2CScan.ino example in the example folder. This will "scan" the entire I2C address range and report if anything responds and at what address.

The results can tell you if your device is connected and running without the need for any library. Or if it is not connected to the I2C bus.

It does not tell you if the device is functioning properly, only that it is connected to the I2C bus and responding to a "are you there" query.

As for if the device is damaged, I think you have a good chance it is still functional, but you must lower its voltage to 3.3V

If you want a 5V version of this sensor look here 5V BME280

Many thanks to all who commented! Here is what I think and/or done.

Google "BME280 datasheet", and look for the .pdf

It is what I did from the beginning. The problem is that I didn't find the datasheet for my particular board and all comparisons with other boards can be random.

Compare your board with the Adafruit version, and look for the 5-pin regulator and the two 3-pin level shift fets.

Please see above.

  if (!bme.begin(0x76))

I inserted the following code in my sketch:

      if (!bme.begin(0x76)){
        Serial.println("I2C Address not 0x76");
      }

In the Serial Monitor I read: "I2C Address not 0x76".

Therefore I changed in the Adafruit_BME280.h as follows:

#define BME280_ADDRESS (0x76)           // Primary I2C Address
                                      
#define BME280_ADDRESS_ALTERNATE (0x77) // Alternate Address

Initially it was the other way around. Anyway, it didn't help and also anyway, I don't understand why the i2c scan sketch finds the board's address and the code shown a few lines above doesn't apparently doesn't find the board at the same address.

For ANY I2C project, I would run the I2CScan.ino example in the example folder. This will "scan" the entire I2C address range and report if anything responds and at what address.

What is meant here by example folder? Why is it important where does the i2c scan run?

As for if the device is damaged, I think you have a good chance it is still functional, but you must lower its voltage to 3.3V

I suppose the same because the board return a correct address on the i2c bus when running the scan program. I use the board at 3.3 volts.

I have another, so far unused board and I will test it too but I don't think that it I will get a different result. My guess is that the measurement protocol of my board is different from the one implemented for the Adafruit board.

The aliexpress page you linked says that the sensor is a BMP280 not a BME280. But your findings with the I2C scanner are very strange.
Maybe you can see the label on the sensor and compare them to the ones that are on the datasheet?
But the engineering sample label of BMP280 seems identical to the BME280. the vent hole seems in different position, anyway.

The page where I bought the sensor says (in English, quoted from the order): "BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor Breakout Module BMP280-3.3V". This BME - BMP thing is somehow ambiguous.

On the backside of the sensor itself it is written:

GY-BM
E P
280

This is ambiguous too.

Yes indeed, my findings with the test program, when compared with the I2C Scanner program, are strange.

Meanwhile I run the test program after a changed, Software SPI wiring. I un-commented and commented as follows in the test program:

//Adafruit_BME280 bme; // I2C
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

My source of inspiration for the wiring was:

The run in the serial monitor of the test program was the same as when using the I2C bus:

BME280 test
Could not find a valid BME280 sensor, check wiring, address, sensor ID!
SensorID was: 0x58
ID of 0xFF probably means a bad address, a BMP 180 or BMP 085
ID of 0x56-0x58 represents a BMP 280,
ID of 0x60 represents a BME 280.
ID of 0x61 represents a BME 680.

Looking more attentively at the name of the sensor in the order ("BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor Breakout Module BMP280-3.3V"), I noticed more pregnant the given voltage (3.3 V). In this thread I was indeed told that this is the working voltage, and not 1.8-5 V DC as it is written in the seller's specification.

For this reason I ordered a level shifter and I will try (also with an untouched sensor) if the change brings something more positive. The shipping etc. will take, unfortunately, some time.

Meanwhile I learned some weird things about my module, this from:

The metallic enclosure is marked 092KU, which means that I have BMP280 devices. >:(

Judging after the shape of the metallic enclosure (rectangular), as shown on this image:

Imgur

this is another proof that I have BMP 280 sensors. :sob: :sob:

And this means that they don't measure pressure, only temperature and humidity, when they measure anything at all...

OK, I lost some time and about $4 but I learned something about buying cheap (BME/BMP 280) Chinese sensors without paying enough attention.

Fortunately, the other BMP/BME 280 sensor that I bought, rather by chance:

seems to be a BME 280. It is about 3 times more expensive but still cheap enough if it works.

I'll test it too but I have to wait for the level shifters.

If you read carefully all aliexpres page you will notice that BME280 is writte only in title. The other text says BMP280.
This sensor measure pressure and temperature, not temperature and humidity.

Thank you for the link about these sensor!

I believe the BME280 is square and the BMP280 is smaller and a rectangle.

Still waiting for the arrival of the level shifters to test on an UNO the:

[BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor Breakout Module BMP280-3.3V](http://BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor Breakout Module BMP280-3.3V)

Meanwhile I tested it on a micro:bit, at its standard 3.3V, and it worked. This means that the sensor wasn't "fried" at the 5 V of the UNO, something that could happen, as many warned, but fortunately it didn't.

Because it doesn't measure humidity (and it is therefore a BMP), even if "Humidity" is mentioned in its long name by the vendor, it became of a lesser interest to me, this being the reason why I tested on the same micro:bit the 4 pins:

BME280 Digital Sensor Temperature Humidity Barometric Pressure Sensor Module GY-BME280 I2C SPI 1.8-5V, shown on the left on this image:

Imgur

This one measures, as expected, temperature, pressure and humidity, and once the level shifters arrived, I will measure with it on the UNO.

Just to mention that, at room temperature,

  • the simultaneous temperature measurements of DHT10, DHT22, BMP280 and BME280 were withing 1 degree C.

  • The BME 280 measured humidities were at about 5 - 6 %RH under those measured by DHTs

  • The atmospheric pressures measured by BMP280 and BME280 were within 1 hPa (i.e. about 1/1000 of the measured value), and very close (less than 1 hPa) to the data provided on the web for the region where I live.

As you can read here

it seems that humidity measured by BME280 is very good, better than DHT22.