CircuitPython Test

It's easy to use the BME280 sensor with CircuitPython and the Adafruit CircuitPython BME280 module.  This module allows you to easily write Python code that reads the humidity, temperature, pressure, and more from the sensor.

First wire up a BME280 to your board exactly as shown on the previous pages for Arduino.  You can use either I2C or SPI wiring, although it's recommended to use I2C for simplicity.  Here's an example of wiring a Feather M0 to the sensor with I2C:

  • Board 3V to sensor VIN
  • Board GND to sensor GND
  • Board SCL to sensor SCK
  • Board SDA to sensor SDI

And an example of a Feather M0 wired with hardware SPI:

  • Board 3V to sensor VIN
  • Board GND to sensor GND
  • Board SCK to sensor SCK
  • Board MOSI to sensor SDI
  • Board MISO to sensor SDO
  • Board D5 to sensor CS (or use any other free digital I/O pin)

Next you'll need to install the Adafruit CircuitPython BME280 library on your CircuitPython board.  Remember this module is for Adafruit CircuitPython firmware and not firmware!

First make sure you are running the latest version of Adafruit CircuitPython for your board.

Next you'll need to install the necessary libraries to use the hardware--carefully follow the steps to find and install these libraries from Adafruit's CircuitPython library bundle.  For example the Circuit Playground Express guide has a great page on how to install the library bundle for both express and non-express boards.

Remember for non-express boards like the Trinket M0, Gemma M0, and Feather/Metro M0 basic you'll need to manually install the necessary libraries from the bundle:

  • adafruit_bme280.mpy
  • adafruit_bus_device

You can also download the adafruit_bme280.mpy from its releases page on Github.

Before continuing make sure your board's lib folder or root filesystem has the adafruit_bme280.mpy, and adafruit_bus_device files and folders copied over.

Next connect to the board's serial REPL so you are at the CircuitPython >>> prompt.


To demonstrate the usage of the sensor we'll initialize it and read the temperature, humidity, and more from the board's Python REPL.

If you're using an I2C connection run the following code to import the necessary modules and initialize the I2C connection with the sensor:

import board
import busio
import adafruit_bme280
i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

Remember if you're using a board that doesn't support hardware I2C (like the ESP8266) you need to use the bitbangio module instead:

import board
import bitbangio
import adafruit_bme280
i2c = bitbangio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

Or if you're using a SPI connection run this code instead to setup the SPI connection and sensor:

import board
import busio
import digitalio
import adafruit_bme280
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, cs)

Now you're ready to read values from the sensor using any of these properties:

  • temperature - The sensor temperature in degrees Celsius.
  • humidity - The percent humidity as a value from 0 to 100%.
  • pressure - The pressure in hPa.
  • altitude - The altitude in meters.

For example to print temperature, humidity, and pressure:

print("\nTemperature: %0.1f C" % bme280.temperature)
print("Humidity: %0.1f %%" % bme280.humidity)
print("Pressure: %0.1f hPa" % bme280.pressure)

For altitude you'll want to set the pressure at sea level for your location to get the most accurate measure (remember these sensors can only infer altitude based on pressure and need a set calibration point).  Look at your local weather report for a pressure at sea level reading and set the sea_level_pressure property:

bme280.sea_level_pressure = 1013.4

Then read the altitude property for a more accurate altitude reading (but remember this altitude will fluctuate based on atmospheric pressure changes!):

print("Altitude = %0.2f meters" % bme280.altitude)

That's all there is to using the BME280 sensor with CircuitPython!

Last updated on 2017-12-07 at 05.02.00 PM Published on 2015-07-24 at 06.07.39 PM