Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
Sensor · BMP280

Fix “Could not find a valid BMP280 sensor, check wiring or try a different address!”

Most purple BMP280 modules sit at 0x76, but the Adafruit library defaults to 0x77. Call bmp.begin(0x76). SensorID 0x60 means it’s really a BME280.

ESP32Arduino UnoArduino NanoESP8266Updated 3 Nov 2026

Community draft — report a mistake

What you see

OutputOutput
BMP280 test
Could not find a valid BMP280 sensor, check wiring or try a different address!
SensorID was: 0xFF
        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.

The Adafruit BMP280 example prints this message when bmp.begin() fails, followed by the chip ID it read. That ID tells you which of three problems you have: no answer at that address (0xFF), a BMP280 at a different address, or a different chip altogether.

#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;

void setup() {
  Serial.begin(115200);
  if (!bmp.begin(0x76)) {             // most purple modules
    Serial.println("Not at 0x76 - try 0x77");
  }
}

Quick fix — try in order

  1. 1

    Pass the address: bmp.begin(0x76)

    The Adafruit library’s default is 0x77. Cheap GY-BMP280 boards ship with SDO pulled low → 0x76. The I2C scanner below tells you which.

  2. 2

    Read the SensorID line

    0xFF = nothing answered at that address (wrong address or wiring). 0x58 = a BMP280 that answered. 0x60 = it is a BME280 — use the BME280 library.

  3. 3

    Wire SDA/SCL and power correctly

    ESP32: SDA 21, SCL 22, VCC 3V3. Uno: SDA A4, SCL A5. Most purple boards have a 3.3 V regulator and accept 3.3–5 V on VCC.

  4. 4

    Don’t leave CSB floating on 6-pin boards

    CSB low at power-up switches the chip to SPI mode. Tie CSB to VCC (most modules pull it up already) and SDO to GND for 0x76.

Diagnostic sketch

Verified — core esp32 3.3.12, 3 Nov 2026Compile-only
i2c-scanner.inoArduino C++Open in PlaygroundOpen in PlaygroundFlash
// I2C scanner — lists every device address that answers on the bus.
// ESP32 DevKit V1: SDA = GPIO21, SCL = GPIO22. Uno/Nano: SDA = A4, SCL = A5.
#include <Wire.h>

void setup() {
  Serial.begin(115200);
  while (!Serial) {}
#if defined(ARDUINO_ARCH_ESP32)
  Wire.begin(21, 22);  // SDA, SCL
#else
  Wire.begin();
#endif
  Serial.print("I2C scanner on SDA=");
  Serial.print(SDA);
  Serial.print(" SCL=");
  Serial.println(SCL);
}

void loop() {
  Serial.println("Scanning...");
  uint8_t found = 0;
  // 0x08..0x77 are the usable 7-bit addresses; the rest are reserved.
  for (uint8_t addr = 0x08; addr <= 0x77; addr++) {
    Wire.beginTransmission(addr);
    uint8_t err = Wire.endTransmission();
    if (err == 0) {
      Serial.print("Found device at 0x");
      if (addr < 0x10) Serial.print('0');
      Serial.println(addr, HEX);
      found++;
    } else if (err == 4) {
      Serial.print("Unknown error at 0x");
      Serial.println(addr, HEX);
    }
  }
  if (found == 0) {
    Serial.println("No I2C devices found");
    Serial.println("Check: SDA/SCL swapped? Module powered? Pull-ups present?");
  } else {
    Serial.print(found);
    Serial.println(" device(s) found");
  }
  Serial.println();
  delay(5000);
}

Why it happens

BMP280 or BME280?

They look identical. The BME280 also measures humidity. Sellers mix them up both ways, so the chip ID is the only reliable label.

Fake / relabelled chips

IDs 0x56 or 0x57 are BMP280 engineering samples; the library accepts 0x58 by default. Some clones report other IDs and need a library that skips the check.

It worked, then stopped after soldering

Flux or a bridge on the SDO pad changes the address. Re-scan.

Board-specific notes

ESP32: Wire.begin(21, 22) before bmp.begin(0x76) if your code changes I2C pins.

BME280: If the ID is 0x60, use the BME280 library — and if that fails, see Could not find a valid BME280 sensor.

Parts: BMP280 · BME280.

↑↓ to move · Enter to open