From 0350cc8211331d9cdfe14338cb26391a91c17f37 Mon Sep 17 00:00:00 2001 From: brentrubell Date: Wed, 15 Aug 2018 12:48:54 -0400 Subject: [PATCH] Add environmental monitor example (#68) --- examples/basics/environmental_monitor.py | 134 +++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 examples/basics/environmental_monitor.py diff --git a/examples/basics/environmental_monitor.py b/examples/basics/environmental_monitor.py new file mode 100644 index 0000000..0296ac8 --- /dev/null +++ b/examples/basics/environmental_monitor.py @@ -0,0 +1,134 @@ +""" +'environmental_monitor.py' +=============================================================================== +Example of sending I2C sensor data +from multiple sensors to Adafruit IO. + +Tutorial Link: https://learn.adafruit.com/adafruit-io-air-quality-monitor + +Adafruit invests time and resources providing this open source code. +Please support Adafruit and open source hardware by purchasing +products from Adafruit! + +Author(s): Brent Rubell for Adafruit Industries +Copyright (c) 2018 Adafruit Industries +Licensed under the MIT license. +All text above must be included in any redistribution. + +Dependencies: + - Adafruit_Blinka (CircuitPython, on Pi.) + (https://github.com/adafruit/Adafruit_Blinka) + - Adafruit_CircuitPython_SGP30. + (https://github.com/adafruit/Adafruit_CircuitPython_SGP30) + - Adafruit_CircuitPython_VEML6070. + (https://github.com/adafruit/Adafruit_CircuitPython_VEML6070) + - Adafruit_CircuitPython_BME280. + (https://github.com/adafruit/Adafruit_CircuitPython_BME280) +""" + +# Import standard python modules +import time + +# import Adafruit Blinka +import board +import busio + +# import sensor libraries +import adafruit_sgp30 +import adafruit_veml6070 +import adafruit_bme280 + +# import Adafruit IO REST client +from Adafruit_IO import Client, Feed, RequestError + +# loop timeout, in seconds. +LOOP_DELAY = 10 + +# Set to your Adafruit IO key. +# Remember, your key is a secret, +# so make sure not to publish it when you publish this code! +ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' + +# Set to your Adafruit IO username. +# (go to https://accounts.adafruit.com to find your username) +ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME' + +# Create an instance of the REST client +aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) + +try: # if we already have the feeds, assign them. + tvoc_feed = aio.feeds('tvoc') + eCO2_feed = aio.feeds('eco2') + uv_feed = aio.feeds('uv') + temperature_feed = aio.feeds('temperature') + humidity_feed = aio.feeds('humidity') + pressure_feed = aio.feeds('pressure') + altitude_feed = aio.feeds('altitude') +except RequestError: # if we don't, create and assign them. + tvoc_feed = aio.create_feed(Feed(name='tvoc')) + eCO2_feed = aio.create_feed(Feed(name='eco2')) + uv_feed = aio.create_feed(Feed(name='uv')) + temperature_feed = aio.create_feed(Feed(name='temperature')) + humidity_feed = aio.create_feed(Feed(name='humidity')) + pressure_feed = aio.create_feed(Feed(name='pressure')) + altitude_feed = aio.create_feed(Feed(name='altitude')) + +# Create busio I2C +i2c = busio.I2C(board.SCL, board.SDA, frequency=100000) +# Create VEML6070 object. +uv = adafruit_veml6070.VEML6070(i2c) +# Create BME280 object. +bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c) +bme280.sea_level_pressure = 1013.25 +# Create SGP30 object using I2C. +sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c) +sgp30.iaq_init() +sgp30.set_iaq_baseline(0x8973, 0x8aae) + +# Sample VEML6070 +def sample_VEML(): + for j in range(10): + uv_raw = uv.read + return uv_raw + + +while True: + print('Reading sensors...') + # Read SGP30. + eCO2_data = sgp30.co2eq + tvoc_data = sgp30.tvoc + + # Read VEML6070. + uv_data = sample_VEML() + + # Read BME280. + temp_data = bme280.temperature + # convert temperature (C->F) + temp_data = int(temp_data) * 1.8 + 32 + humid_data = bme280.humidity + pressure_data = bme280.pressure + alt_data = bme280.altitude + + print('sending data to adafruit io...') + # Send SGP30 Data to Adafruit IO. + print('eCO2:', eCO2_data) + aio.send(eCO2_feed.key, eCO2_data) + print('tvoc:', tvoc_data) + aio.send(tvoc_feed.key, tvoc_data) + time.sleep(2) + # Send VEML6070 Data to Adafruit IO. + print('UV Level: ', uv_data) + aio.send(uv_feed.key, uv_data) + time.sleep(2) + # Send BME280 Data to Adafruit IO. + print('Temperature: %0.1f C' % temp_data) + aio.send(temperature_feed.key, temp_data) + print("Humidity: %0.1f %%" % humid_data) + aio.send(humidity_feed.key, int(humid_data)) + time.sleep(2) + print("Pressure: %0.1f hPa" % pressure_data) + aio.send(pressure_feed.key, int(pressure_data)) + print("Altitude = %0.2f meters" % alt_data) + aio.send(altitude_feed.key, int(alt_data)) + # avoid timeout from adafruit io + time.sleep(LOOP_DELAY * 60)