BMP388 Pressure & Temperature Sensor - Continuous measurement using FIFO
In this example we will be showing how to use the built-in FIFO buffer on the BMP388 sensor to store measurements and print them out when needed.
Setting Up
Initialization is done in a similar way as in the previous examples, with the main difference being that we initialize the FIFO with a set number of measurements which will be saved into the FIFO:
from machine import Pin, I2C
from bmp388 import BMP388
from bmp388_constants import TIME_STANDBY_1280MS, FIFO_DATA_READY, FIFO_CONFIG_ERROR
import time
NO_OF_MEASUREMENTS = 10
# If you aren't using the Qwiic connector, manually enter your I2C pins
# i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# bmp388 = BMP388(i2c)
# Initialize sensor over Qwiic
bmp388 = BMP388()
# Set sea level pressure for accurate altitude readings
bmp388.setSeaLevelPressure(1025.0)
# Set standby time to roughly 1.3 seconds
bmp388.setTimeStandby(TIME_STANDBY_1280MS)
# Enable FIFO and set watermark
bmp388.enableFIFO()
bmp388.setFIFONoOfMeasurements(NO_OF_MEASUREMENTS)
bmp388.enableFIFO()
Enables the FIFO functionalities of the sensor
Returns value: None
bmp388.setFIFONoOfMeasurements(noOfMeasurements)
Sets how many measurements will be saved into the FIFO buffer
Returns value: None
Function parameters:
| Type | Name | Description |
|---|---|---|
int | noOfMeasurements | Number if measurement samples which will be saved into the FIFO buffer |
Taking measurements
Next, in an infinite loop, we wait until the FIFO buffer is full, then we print out the measured values:
# Start continuous measurement in normal mode
bmp388.startNormalConversion()
print("Please wait for 13 seconds...")
while True:
status, temperatures, pressures, altitudes, sensorTime = bmp388.getFIFOData()
if status == FIFO_DATA_READY:
for i in range(len(temperatures)):
altitude = altitudes[i] if i < len(altitudes) else 0.0
print(
"{}: {:.2f}*C {:.2f}hPa {:.2f}m".format(
i + 1, temperatures[i], pressures[i], altitude
)
)
print("Sensor Time: {} ms".format(sensorTime))
print()
print("Please wait for 13 seconds...")
elif status == FIFO_CONFIG_ERROR:
print("FIFO configuration error.")
time.sleep(0.05)

REPL output
Full Example
You can find the full example below:
from machine import Pin, I2C
from bmp388 import BMP388
from bmp388_constants import TIME_STANDBY_1280MS, FIFO_DATA_READY, FIFO_CONFIG_ERROR
import time
NO_OF_MEASUREMENTS = 10
# If you aren't using the Qwiic connector, manually enter your I2C pins
# i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# bmp388 = BMP388(i2c)
# Initialize sensor over Qwiic
bmp388 = BMP388()
# Set sea level pressure for accurate altitude readings
bmp388.setSeaLevelPressure(1025.0)
# Set standby time to roughly 1.3 seconds
bmp388.setTimeStandby(TIME_STANDBY_1280MS)
# Enable FIFO and set watermark
bmp388.enableFIFO()
bmp388.setFIFONoOfMeasurements(NO_OF_MEASUREMENTS)
# Start continuous measurement in normal mode
bmp388.startNormalConversion()
print("Please wait for 13 seconds...")
while True:
status, temperatures, pressures, altitudes, sensorTime = bmp388.getFIFOData()
if status == FIFO_DATA_READY:
for i in range(len(temperatures)):
altitude = altitudes[i] if i < len(altitudes) else 0.0
print(
"{}: {:.2f}*C {:.2f}hPa {:.2f}m".format(
i + 1, temperatures[i], pressures[i], altitude
)
)
print("Sensor Time: {} ms".format(sensorTime))
print()
print("Please wait for 13 seconds...")
elif status == FIFO_CONFIG_ERROR:
print("FIFO configuration error.")
time.sleep(0.05)