def init(): global i2c global sensor i2c = board.I2C() # uses board.SCL and board.SDA sensor = adafruit_scd30.SCD30(i2c) start_time = time.time() return sensor
def initialize_input(self): from adafruit_extended_bus import ExtendedI2C import adafruit_scd30 self.scd = adafruit_scd30.SCD30(ExtendedI2C(self.input_dev.i2c_bus), address=int( str(self.input_dev.i2c_location), 16))
def read(self, SIO): if not self.scd: self.scd = adafruit_scd30.SCD30(board.I2C()) try: if not self.scd.data_available: return self.CO2 = self.scd.CO2 self.T = self.scd.temperature self.H = self.scd.relative_humidity except: traceback.print_exc() self.scd = None return self.t = time.time() print("SCD30", self.t, self.T, "C,\t", self.H, "%%rh", self.CO2, "PPM CO_2") SIO.log_readout(self.T_id, self.T, self.t) SIO.log_readout(self.H_id, self.H, self.t) SIO.log_readout(self.CO2_id, self.CO2, self.t)
def initialize(self): from adafruit_extended_bus import ExtendedI2C import adafruit_scd30 self.sensor = adafruit_scd30.SCD30( ExtendedI2C(self.input_dev.i2c_bus, frequency=self.i2c_frequency), address=int(str(self.input_dev.i2c_location), 16)) if self.sensor.self_calibration_enabled != self.enable_self_calibration: self.sensor.self_calibration_enabled = self.enable_self_calibration self.logger.info( f"{self.sensor.temperature_offset}, {self.temperature_offset}") if self.sensor.temperature_offset != self.temperature_offset: self.sensor.temperature_offset = self.temperature_offset self.logger.info(f"New: {self.sensor.temperature_offset}") if self.sensor.ambient_pressure != self.ambient_pressure: self.sensor.ambient_pressure = self.ambient_pressure if self.sensor.altitude != self.altitude: self.sensor.altitude = self.altitude
import time import board import displayio import adafruit_imageload from adafruit_matrixportal.matrix import Matrix import adafruit_scd30 # --| User Config |---- CO2_CUTOFFS = (1000, 2000, 5000) UPDATE_RATE = 1 # --------------------- # the sensor scd30 = adafruit_scd30.SCD30(board.I2C()) # optional if known (pick one) # scd30.ambient_pressure = 1013.25 # scd30.altitude = 0 # the display matrix = Matrix(width=64, height=32, bit_depth=6) display = matrix.display display.rotation = 90 # matrixportal up # display.rotation = 270 # matrixportal down # current condition smiley face smileys_bmp, smileys_pal = adafruit_imageload.load("/bmps/smileys.bmp") smiley = displayio.TileGrid( smileys_bmp, pixel_shader=smileys_pal, x=0,
} req = requests.post(uri, headers=headers, json=payload) req.raise_for_status() # Throw if there was an error. res = req.json() return res ################## ### SENSOR ################## # Create the I2C interface. i2c = busio.I2C(board.SCL, board.SDA) # Create the interface to the SCD30 sensor (CO2, Temperature, Humidity) scd = adafruit_scd30.SCD30(i2c) def sample_sensors(): ret = {} ret["temperature_c"] = scd.temperature if ret["temperature_c"]: ret["temperature_f"] = ret["temperature_c"] * 1.8 + 32 ret["co2"] = scd.CO2 ret["humidity"] = scd.relative_humidity return ret ################## ### THINGSPEAK ##################
def __init__(self, config): self.sea_level_pressure = getBaromPress(config) self.i2c = busio.I2C(board.SCL, board.SDA, frequency=100000) # To initialise using the default address: if config.TPsensor == 'MCP9808': import adafruit_mcp9808 self.sensor = adafruit_mcp9808.MCP9808(self.i2c) try: self.temperature = self.sensor.temperature self.pressure = 0 self.humidity = 1 self.dewpoint = 0 self.altitude = 0 self.success = True except: self.failSafe() elif config.TPsensor == 'BME280': import adafruit_bme280 self.sensor = adafruit_bme280.Adafruit_BME280_I2C(self.i2c) try: self.sensor.mode = adafruit_bme280.MODE_NORMAL self.sensor.standby_period = adafruit_bme280.STANDBY_TC_500 self.sensor.iir_filter = adafruit_bme280.IIR_FILTER_X16 self.sensor.overscan_pressure = adafruit_bme280.OVERSCAN_X16 self.sensor.overscan_humidity = adafruit_bme280.OVERSCAN_X1 self.sensor.overscan_temperature = adafruit_bme280.OVERSCAN_X2 # The sensor will need a moment to gather initial readings time.sleep(1) self.pressure = self.sensor.pressure self.temperature = self.sensor.temperature self.pressure = self.sensor.pressure self.humidity = self.sensor.relative_humidity self.altitude = self.sensor.altitude self.success = True except: self.failSafe() elif config.TPsensor == 'SCD30': import adafruit_scd30 try: self.sensor = adafruit_scd30.SCD30(self.i2c) self.pressure = self.sea_level_pressure #print(" Temperature offset:", self.sensor.temperature_offset) #print(" Measurement interval:", self.sensor.measurement_interval) #print(" Self-calibration enabled:", self.sensor.self_calibration_enabled) #print(" Ambient Pressure:", self.sensor.ambient_pressure) #print(" Altitude:", self.sensor.altitude, "meters above sea level") #print(" Forced recalibration reference:", self.sensor.forced_recalibration_reference) while True: if self.sensor.data_available: self.temperature = self.sensor.temperature self.pressure = self.sensor.ambient_pressure self.humidity = self.sensor.relative_humidity self.altitude = self.sensor.altitude self.CO2 = self.sensor.CO2 break time.sleep(0.5) self.success = True except: self.failSafe() elif config.TPsensor == 'BME180': import Adafruit_BMP.BMP085 as BMP085 import RPi.GPIO as GPIO try: sensor = BMP085.BMP085() self.temperature = sensor.read_temperature() self.pressure = sensor.read_pressure() / 100 self.altitude = sensor.read_altitude() self.humidity = 1 self.success = True except: self.failSafe() self.sealevel = self.sea_level_pressure self.dewpoint = dewPointRH(self.temperature, self.humidity, Pws(self.temperature)) self.absHum = absHumidity(self.temperature, self.humidity, Pws(self.temperature))
# CO2 warning levels (ppm) poor = 2000 fair = 1000 good = 700 # pin for SPI chip select line to wake up SD card. You'll need to change this pin if name or niumber you aren't using D10 on your controller. sd_cs = board.D10 # set up the SPI and I2C communicaations protocols spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(sd_cs) i2c = busio.I2C(board.SCL, board.SDA) # set up the sensors and data logger scd = adafruit_scd30.SCD30(i2c) #0x61 address bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c) # 0x77 bmp280.sea_level_pressure = 1013.25 # calibrate the pressure rtc = adafruit_pcf8523.PCF8523(i2c) # 0x68 sdcard = adafruit_sdcard.SDCard(spi, cs) vfs = storage.VfsFat(sdcard) # mount the SD card to save files in the /sd folder storage.mount(vfs, "/sd") # setup the neopixel. This code will need to be changed if you # use a microcontroller other than an Adafruit feather pixels = neopixel.NeoPixel(board.NEOPIXEL, n=1, brightness=0.05, auto_write=False) # Create a CSV data loger file. The file name includes the date, hour and min in the name.