CircuitPython Wiring & Test

It's easy to use the BME680 sensor with CircuitPython and the Adafruit CircuitPython BME680 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 BME680 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 BME680 library on your CircuitPython board.  Remember this module is for Adafruit CircuitPython firmware and not MicroPython.org 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_bme680.mpy
  • adafruit_bus_device

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

Before continuing make sure your board's lib folder or root filesystem has the adafruit_bme680.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.

Usage

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_bme680
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bme680.Adafruit_BME680_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_bme680
i2c = bitbangio.I2C(board.SCL, board.SDA)
sensor = adafruit_bme680.Adafruit_BME680_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_bme680
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_bme680.Adafruit_BME680_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.
  • gas - The resistance (in Ohms) of the gas sensor.  This is proportional to the amount of VOC particles in the air.
  • humidity - The percent humidity as a value from 0 to 100%.
  • pressure - The pressure in hPa.
  • altitude - The altitude in meters.
print('Temperature: {} degrees C'.format(sensor.temperature))
print('Gas: {} ohms'.format(sensor.gas))
print('Humidity: {}%'.format(sensor.humidity))
print('Pressure: {}hPa'.format(sensor.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 seaLevelhPA property:

sensor.seaLevelhPa = 1014.5

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

print('Altitude: {} meters'.format(sensor.altitude))

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

Here's a complete example that prints all the sensor's values once a second.  Save this as a main.py on your board (note it assumes a hardware I2C connection to the sensor):

import board
import busio
import time

import adafruit_bme680


# Initialize I2C bus and create sensor instance.
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bme680.Adafruit_BME680_I2C(i2c)

# Main loop prints sensor values every second.
while True:
    print('Temperature: {} degrees C'.format(sensor.temperature))
    print('Gas: {} ohms'.format(sensor.gas))
    print('Humidity: {}%'.format(sensor.humidity))
    print('Pressure: {}hPa'.format(sensor.pressure))
    time.sleep(1.0)
Last updated on 2017-11-28 at 08.13.46 PM Published on 2017-11-08 at 04.38.32 PM