This the code I use with my BME680
import os
import time, datetime
import bme680
import SI1145.SI1145 as SI1145
import RPi.GPIO as GPIO
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
sense = SenseHat()
sense.set_rotation(180)
sense.set_imu_config(False, False, False)
sense.low_light = False
uvs = SI1145.SI1145()
sensor = bme680.BME680()
sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.DISABLE_GAS_MEAS)
#sensor.set_gas_heater_temperature(320)
#sensor.set_gas_heater_duration(150)
#sensor.select_gas_heater_profile(0)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(5, GPIO.IN, pull_up_down = GPIO.PUD_OFF)
GPIO.setup(16,GPIO.OUT, initial=1) #Red
GPIO.setup(19,GPIO.OUT, initial=1) #Yellow
GPIO.setup(20,GPIO.OUT, initial=1) #Green
GPIO.setup(21,GPIO.OUT, initial=1) #Blue
s=(0.1) # scroll speed
w=(0) # color all white toggle
o=(165)
L=(1) #LED's on or off
x=(2) #shutdown variable
m=(0)
def Shutdown(channel):
global x
x = (0)
def readvis():
vis = uvs.readVisible()
vis = (round(vis))
global w
global o
global L
global m
if vis < 270 and m == (0):
sense.low_light = True
w = (0)
o = (165)
L = (1)
elif vis >= 270 and vis < 500 and m == (0):
sense.low_light = False
w = (0)
o = (165)
L = (0)
elif vis >= 500 and m == (0):
sense.low_light = False
w = (255)
o = (255)
L = (0)
# is really stick down
def pushed_up(event):
global L
global m
if event.action == ACTION_PRESSED:
sense.low_light = True
L = (1)
m = (1)
# is really stick up
def pushed_down(event):
global L
global m
if event.action == ACTION_PRESSED:
sense.low_light = False
L = (0)
m = (1)
#is really stick right
def pushed_left(event):
global w
global o
global m
if event.action == ACTION_PRESSED:
w = (255)
o = (255)
m = (1)
# is really stick left
def pushed_right(event):
global w
global o
global m
if event.action == ACTION_PRESSED:
w = (0)
o = (165)
m = (1)
def pushed_middle(event):
global m
if event.action == ACTION_PRESSED:
m = (0)
sense.stick.direction_up = pushed_up
sense.stick.direction_down = pushed_down
sense.stick.direction_left = pushed_left
sense.stick.direction_right = pushed_right
sense.stick.direction_middle = pushed_middle
GPIO.add_event_detect(5, GPIO.FALLING, callback = Shutdown, bouncetime = 2000)
while True:
readvis()
dateString = "%A %B %-d %-I:%M:%p"
msg = "It is %s" % (datetime.datetime.now().strftime(dateString))
sense.show_message(msg, scroll_speed=s, text_colour=(w, 255, 255))
if sensor.get_sensor_data():
t = (sensor.data.temperature)
t = (round(t))
if t <= 0:
tc = [w, w, 255] # Blue
GPIO.output(16, 1) # Red
GPIO.output(19, 1) # Yellow
GPIO.output(20, 1) # Green
GPIO.output(21, L) # Blue <
elif t > 0 and t < 13:
tc = [255, 255, w] # Yellow
GPIO.output(16, 1) # Red
GPIO.output(19, L) # Yellow <
GPIO.output(20, 1) # Green
GPIO.output(21, 1) # Blue
elif t >= 13 and t <= 25:
tc = [w, 255, w] # Green
GPIO.output(16, 1) # Red
GPIO.output(19, 1) # Yellow
GPIO.output(20, L) # Green <
GPIO.output(21, 1) # Blue
else:
tc = [255, w, w] # Red
GPIO.output(16, L) # Red <
GPIO.output(19, 1) # Yellow
GPIO.output(20, 1) # Green
GPIO.output(21, 1) # Blue
msg = "and %sc" % (t)
sense.show_message(msg, scroll_speed=s, text_colour=tc)
if sensor.get_sensor_data():
h = (sensor.data.humidity)
h = (round(h))
if h < 0:
h = 0
if h > 100:
h = 100
if h < 30:
hc = [255, w, w] # Red
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
elif h >= 30 and h <= 60:
hc = [w, 255, w] # Green
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
elif h > 60 and h < 80:
hc = [255, 255, w] # Yellow
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
elif h >= 80:
hc = [255, w, w] # Red
msg = "with %s%% Humidity" % (h)
sense.show_message(msg, scroll_speed=s, text_colour=hc)
readvis()
if sensor.get_sensor_data():
p = (sensor.data.pressure)
p = round(p)
if p > 0 and p < 985:
pc = [255, w, w] # Red
msg = "- Barometer is Very Low @ %smb - Storm Watch" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 985 and p < 1005:
pc = [255, 255, w] # Yellow
msg = "- Barometer is Low @ %smb - Possible Percipitation" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1005 and p < 1025:
pc = [w, 255, w] # Green
msg = "- Barometer is Mid Range @ %smb" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1025 and p < 1050:
pc = [w, w, 255] # Blue
msg = "- Barometer is High @ %smb" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
elif p >= 1050:
pc = [255, w, w] # Red
msg = "- Barometer is Very High @ %smb - Expect Dry Conditions" % (p)
sense.show_message(msg, scroll_speed=s, text_colour=pc)
uv = uvs.readUV()
u = uv/100
u = (round(u))
if u > 0 and u < 3 and L == 0:
msg = "- UV Index is Low @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(w, 255, w)) # Green
elif u >= 3 and u < 6 and L == 0:
msg = "- UV Index is Moderate @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, 255, w)) # Yellow
elif u >= 6 and u < 8 and L == 0:
msg = "- UV Index is High @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, o, w)) # Orange
elif u >= 8 and u < 11 and L == 0:
msg = "- UV Index is Very High @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, w ,w)) # Red
elif u >= 11 and L == 0:
msg = "- UV Index is Extreme @ %s" % (u)
sense.show_message(msg, scroll_speed=s, text_colour=(255, w, 255)) # Violet
#vis = uvs.readVisible()
#vis = (round(vis))
#msg = "and the VIS is %s" % (vis)
#sense.show_message(msg, scroll_speed=s, text_colour=(255, w, 255))
if x == 0:
sense.clear()
os.system("sudo shutdown now -P")
time.sleep(30)
elif x == 1:
sense.clear()
raise SystemExit
time.sleep(30)
# Last edited on May 10thth 2018
# run sudo crontab -e
# add
# @reboot python3 /home/pi/THPUVBME.py &