

The Adafruit BMP581 (Part ID: 6407) is a high-precision sensor designed to measure temperature and barometric pressure. This sensor provides accurate environmental data, making it ideal for applications such as weather monitoring, altitude measurement, and environmental sensing. With its compact size and low power consumption, the BMP581 is well-suited for integration into portable devices, IoT projects, and embedded systems.








The Adafruit BMP581 is a highly capable sensor with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.65V to 3.6V |
| Operating Current | 0.5 µA (low-power mode) |
| Pressure Measurement Range | 300 hPa to 1250 hPa |
| Pressure Accuracy | ±0.06 hPa |
| Temperature Measurement Range | -40°C to +85°C |
| Temperature Accuracy | ±0.3°C |
| Communication Interface | I2C (default) and SPI |
| I2C Address | 0x77 (default) or 0x76 (configurable) |
| Dimensions | 2.0mm x 2.0mm x 0.75mm |
The BMP581 sensor is typically available on a breakout board from Adafruit. Below is the pin configuration for the breakout board:
| Pin Name | Description |
|---|---|
| VIN | Power supply input (1.65V to 3.6V) |
| GND | Ground |
| SCL | I2C clock line |
| SDA | I2C data line |
| CS | Chip select for SPI (leave unconnected for I2C) |
| SDO | I2C address selection or SPI data output |
| INT | Interrupt pin (optional, for advanced use) |
To use the BMP581 with an Arduino UNO, follow these steps:
Adafruit provides an easy-to-use library for the BMP581. To install it:
The following example demonstrates how to read temperature and pressure data from the BMP581:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP581.h>
// Create an instance of the BMP581 sensor
Adafruit_BMP581 bmp;
// Setup function to initialize the sensor
void setup() {
Serial.begin(9600);
while (!Serial); // Wait for Serial Monitor to open
// Initialize the BMP581 sensor
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP581 sensor, check wiring!");
while (1); // Halt execution if sensor initialization fails
}
Serial.println("BMP581 sensor initialized successfully!");
}
// Main loop to read and display sensor data
void loop() {
// Read temperature in Celsius
float temperature = bmp.readTemperature();
// Read pressure in hPa
float pressure = bmp.readPressure();
// Print the readings to the Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" hPa");
delay(1000); // Wait 1 second before the next reading
}
Sensor not detected:
Incorrect readings:
Library installation errors:
Q: Can the BMP581 be used with a 5V microcontroller?
A: Yes, but you must use a logic level shifter to safely interface the 3.3V I2C lines with the 5V microcontroller.
Q: How do I change the I2C address of the BMP581?
A: The I2C address can be changed by connecting the SDO pin to GND (0x76) or leaving it unconnected (0x77).
Q: Can the BMP581 measure altitude directly?
A: While the BMP581 does not measure altitude directly, you can calculate it using the pressure readings and a known reference pressure.
By following this documentation, you can effectively integrate the Adafruit BMP581 into your projects and achieve accurate environmental sensing.