Quick Start
Connect the breakout to a microcontroller over I2C, install the library, and print pressure and temperature readings.
You program the controller connected to this breakout. The breakout itself is not flashed.
The board is 3.3 V only. It has no regulator or level shifter, and the BMP585
is rated to 3.6 V. Do not connect 5 V to 3V3 or to the signal pins.
- Arduino
- MicroPython
1. Connect the breakout board
Wire the header's four pins to your controller's 3.3 V supply, ground and
I2C pins. A Qwiic cable does the same in one plug: each Qwiic connector carries
3V3, SDA, SCL and GND.
The table below uses a NULA DeepSleep. With Soldered NULA DeepSleep ESP32S3
selected as the board, the ESP32 board package sets GPIO 8 as SDA and GPIO 9
as SCL, and Wire.begin() with no arguments uses those pins.
| NULA DeepSleep | Soldered Pressure & Temperature Sensor BMP585 breakout |
|---|---|
| GND | GND |
| 3V3 | 3V3 |
| IO8 | SDA |
| IO9 | SCL |
Either GND pin on the board works: both are the same ground.
2. Install the library
Install Soldered BMP585 Barometric Pressure Sensor from its GitHub repository.
🔗Soldered BMP585 Arduino library
Verified Arduino library at commit c24648c
Tip: downloading from GitHub. On the library's GitHub page, click the green Code button and choose Download ZIP, then add it in Arduino IDE with Sketch → Include Library → Add .ZIP Library....
3. Run the first example
Open basicReadings from the library's examples, select your board and port, and upload it. The sketch starts the sensor at its default address, 0x47, and prints a reading ten times a second.
#include <BMP585-SOLDERED.h>
// Create an instance of the BMP585 sensor
Soldered_BMP585 pressureSensor;
void setup()
{
// Initialize serial for output
Serial.begin(115200);
Serial.println("BMP585 Example - Basic Readings");
// Initialize I2C bus
Wire.begin();
// Check if sensor is connected and initialize it.
// Address is optional, defaults to 0x47
while (pressureSensor.begin() != BMP5_OK)
{
Serial.println("Error: BMP585 not connected, check wiring and I2C address!");
delay(1000);
}
Serial.println("BMP585 connected!");
}
void loop()
{
// Get new measurements from the sensor. This must be called before
// accessing the pressure and temperature data, otherwise it will never update
if (pressureSensor.getSensorData() == BMP5_OK)
{
Serial.print("Pressure: ");
Serial.print(pressureSensor.pressure, 2);
Serial.print(" Pa\t");
Serial.print("Temperature: ");
Serial.print(pressureSensor.temperature, 2);
Serial.println(" degC");
}
// Print 10x per second
delay(100);
}
4. Check the result
Open the Serial Monitor at 115200 baud. When the sensor answers, you see:
BMP585 Example - Basic Readings
BMP585 connected!
Pressure: 101316.52 Pa Temperature: 23.42 degC
Pressure: 101316.86 Pa Temperature: 23.43 degC
Pressure: 101318.69 Pa Temperature: 23.43 degC
Pressure: 101317.38 Pa Temperature: 23.42 degC
A new line arrives every 100 ms: the pressure in pascals and the temperature in °C, each with two decimals.
If you see Error: BMP585 not connected, check wiring and I2C address! once a
second instead, the sensor is not answering at 0x47.
5. If it does not work
Continue with Troubleshooting and retry this smallest example after each change.
1. Connect the breakout board
The module's examples open I2C bus 0 with SDA on pin 8 and SCL on pin 9.
Wire those pins, or change the pin numbers in the example to match your board.
A Qwiic cable carries 3V3, SDA, SCL and GND in one plug.
The table below uses a NULA DeepSleep. On the ESP32 port, Pin() numbers are
the chip's GPIO numbers, so the example's Pin(8) and Pin(9) are the
NULA DeepSleep's IO8 and IO9, wired here to SDA and SCL.
| NULA DeepSleep | Soldered Pressure & Temperature Sensor BMP585 breakout |
|---|---|
| GND | GND |
| 3V3 | 3V3 |
| IO8 | SDA |
| IO9 | SCL |
Either GND pin on the board works: both are the same ground.
2. Install the module
Use mim.
or
After installing the mpremote package, install the library on your board using the following command:
mpremote mip install github:SolderedElectronics/Soldered-BMP585-MicroPython-Library
Or, if you're running a Windows OS:
python -m mpremote mip install github:SolderedElectronics/Soldered-BMP585-MicroPython-Library
🔗Soldered BMP585 MicroPython library
Verified MicroPython module at commit 098c1e2
Tip: downloading from GitHub. Without mpremote, open the module's .py
file on GitHub and click Download raw file, then open it in Thonny and use
File → Save as... → MicroPython device to copy it onto the board.
3. Run the first example
This is the module's bmp585-basicReadings.py example. It creates the sensor on
I2C bus 0, stops with an error if the sensor does not answer, and prints a
reading ten times a second. Change scl and sda if you wired other pins.
# FILE: bmp585-basicReadings.py
# AUTHOR: Soldered Electronics
# BRIEF: Reads pressure and temperature from the BMP585 sensor over I2C
# WORKS WITH: BMP585 Barometric Pressure Sensor breakout: www.solde.red/333189
# LAST UPDATED: 2026-09-18
from bmp585 import BMP585, BMP5_OK
from machine import I2C, Pin
import time
# Change these to match how your board wires I2C
i2c = I2C(0, scl=Pin(9), sda=Pin(8))
sensor = BMP585(i2c)
if sensor.status != BMP5_OK:
raise Exception("Failed to initialize BMP585: " + sensor.status_string())
print("BMP585 connected!")
while True:
if sensor.get_sensor_data() == BMP5_OK:
print(
"Pressure: {:.2f} Pa\tTemperature: {:.2f} degC".format(
sensor.data.pressure, sensor.data.temperature
)
)
else:
print("Failed to read sensor data:", sensor.status_string())
time.sleep_ms(100)
🔗Open the complete example
Examples/bmp585-basicReadings.py at commit 098c1e2
4. Check the result
When the sensor answers, the shell shows:
BMP585 connected!
Pressure: 101319.65 Pa Temperature: 23.42 degC
Pressure: 101317.75 Pa Temperature: 23.43 degC
Pressure: 101318.14 Pa Temperature: 23.43 degC
Pressure: 101315.54 Pa Temperature: 23.43 degC
A new line arrives every 100 ms: the pressure in pascals and the temperature in °C, each with two decimals.
If the sensor does not answer, BMP585(i2c) raises an exception that names
the address it tried, for example BMP585 not responding on address 0x47.
The example leaves the bus speed at MicroPython's default, freq=400000
(400 kHz). The output above was taken that way, with the unmodified example on
a Qwiic cable of about 10 cm. On longer cables or a busier bus, set
freq=100000 in I2C().
5. If it does not work
Continue with Troubleshooting and retry this smallest example after each change.