def __init__(self, chipSelectPin): """ Constructor for class BME280_SPI """ logger.debug("chipSelectPin.id: %s", chipSelectPin.id) logger.debug("importing adafruit digitalio, busio, adafruit_bme280") import digitalio import busio import adafruit_bme280 super().__init__() self._EnvironmentSensor__sensorType = "BME280" self._EnvironmentSensor__chipSelectPin = chipSelectPin # Get the SPI bus self._EnvironmentSensor__spi = busio.SPI(board.SCK, board.MOSI, board.MISO) self._EnvironmentSensor__bme_cs = digitalio.DigitalInOut( self._EnvironmentSensor__chipSelectPin) self._EnvironmentSensor__sensor = adafruit_bme280.Adafruit_BME280_SPI( self._EnvironmentSensor__spi, self._EnvironmentSensor__bme_cs) self._EnvironmentSensor__hasTemperature = True self._EnvironmentSensor__hasHumidity = True self._EnvironmentSensor__hasPressure = True self._EnvironmentSensor__hasAltitude = True
def init(): """Initialization function for BME280 Attempts to connect to the Temperature Pressure Humidity Sensor over SPI protocol. Returns: int: 0 means OK -1 means there was an error """ global bme280 try: bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs) return 0 except: print("PTH Initialization Error") return -1
def submit_data(self): checkArray = [] if self.check: #check whether to Start or Stop test based on check value #stop checkArray.append('1') #sends 1 to Check.txt df_check = pd.DataFrame([checkArray]) np.savetxt(r'/home/pi/Desktop/Check.txt',df_check.values,fmt='%s', delimiter='\t') self.check = not self.check # once stopped, ready to Start next test return else: #start checkArray.append('0') #sends 0 to Check.txt df_check = pd.DataFrame([checkArray]) np.savetxt(r'/home/pi/Desktop/Check.txt',df_check.values,fmt='%s', delimiter='\t') #connecting sensors and reading temperature/pressure spi = busio.SPI(board.SCK, MOSI = board.MOSI, MISO = board.MISO) cs = digitalio.DigitalInOut(board.D26) bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi,cs) self.current_temp.set(bme280.temperature) self.current_pressure.set(bme280.pressure / 1.333223874) #converts values between units self.changeTemp() self.changePressure() #calculate and set correction factor correction_factor = 760 /self.current_pressure.get() * (self.current_temp.get() + 273.16) / 295.16 self.correctionVar.set(str(correction_factor)) data_list = [] # Create a list to get all the inputted values # Programed for Readibility for item in self.textVariables2[0:-3]: data_list.append(item.get()) for value in data_list: if(value == ''): dataReady = FALSE print("You're missing entries") break else: dataReady = TRUE if(dataReady): #sends information to Entries.txt df_test = pd.DataFrame([data_list]) # values # 1st column as index np.savetxt(r'/home/pi/Desktop/Entries.txt',df_test.values,fmt='%s', delimiter='\t') #start electrometer code, electrometerStart will store any output in the terminal electrometerStart = subprocess.run(r'/home/pi/Desktop/electrometer', shell=True, stdout=subprocess.PIPE).stdout.decode('utf-8') self.electrometerMessage.set(electrometerStart) self.check.set(self.STOP) #now that electrometer is running, Start/Stop acts as Stop button
""" Reads the current CPU temperature of the RPi """ with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f: raw = f.read() temp = float(raw) / 1000.0 return temp def construct_entry(name, value, tags): return {"measurement": name, "tags": tags, "fields": {"value": value}} spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D5) bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, cs) holdoff = 1.0 while True: time.sleep(holdoff) try: print("Connecting to DB ...") client = InfluxDBClient('nuc8i7beh.local', 8086, 'root', 'root', 'environment') client.switch_database('environment') print("Logging data ...") while True: # Collect the data temperature = bme280.temperature humidity = bme280.humidity pressure = bme280.pressure
def __init__(self, sea_level_pressure=1023): spi = busio.SPI(board.SCLK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D5) self.bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, cs) self.bme280.sea_level_pressure = sea_level_pressure
"""Rough draft of VPD controller, pass in arguments for veg or flower""" import board import busio import digitalio import adafruit_bme280 import math import RPi.GPIO as GPIO import time import sys mode = sys.argv[1] bme280 = adafruit_bme280.Adafruit_BME280_SPI( busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO), digitalio.DigitalInOut(board.D5)) #GPIO.setmode(GPIO.BCM) #GPIO.setup("""ENTER CHANNEL HERE for humidifier relay""", GPIO.OUT, initial=GPIO.HIGH) #GPIO.setup("""ENTER CHANNEL HERE for dehumidifier relay""", GPIO.OUT, initial=GPIO.HIGH) avg_vpd = [] def dewpoint(): """Calculates the dewpoint""" b = 17.368 c = 238.88 gamma = (b * bme280.temperature / (c + bme280.temperature)) + math.log(bme280.humidity / 100.0) return (c * gamma) / (b - gamma) def vpd(): """You down with VPD? Yeah, you know me.....
try: ads_r = ADS.ADS1115(i2c) ads1115_r.setAddr_ADS1115(0x49) except RuntimeError as e: log.error('ADS1115(0x49) Not Found' + str(e)) exit(0) # Create library object using SPI port for BME280 # Add logic for right and left IO boards. Exit program if the boards don't exist spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) # Each BME280 has a unique GPIO input pin try: cs_l = digitalio.DigitalInOut(board.D12) # Pin BCM12 bme280_l = adafruit_bme280.Adafruit_BME280_SPI(spi, cs_l) except RuntimeError as e: log.error('BME280 Left Not Found' + str(e)) exit(0) try: cs_r = digitalio.DigitalInOut(board.D7) # Pin BCM7 bme280_r = adafruit_bme280.Adafruit_BME280_SPI(spi, cs_r) except RuntimeError as e: log.error('BME280 Right Not Found' + str(e)) exit(0) sleep_timer = 600 # sensors are read every 30 minutes """ Verify that there is at least one ds18b20, temperature sensor configured 1 wire sensors should be defined in this folder: /sys/bus/w1/devices
# define and import hardware constants pitch_diameter = s.module * s.number_of_teeth #I got a youtube video about this! mm_per_step = math.pi * s.pitch_diameter / (s.steps_per_turn * s.gear_reduction) refresh_rate = 30 #how many times per second to update UI update_time = math.floor(1000 / refresh_rate) #1/refreshrate, *1000 for milliseconds #objects and modes setup: pi = pigpio.pi() root = tk.Tk() root.tk.call('tk', 'scaling', 2.0) spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) pressure_sensor_ambient = adafruit_bme280.Adafruit_BME280_SPI(spi, sensor1pin) pressure_sensor_ambient.mode = adafruit_bme280.MODE_NORMAL pressure_sensor_ambient.standby_period = adafruit_bme280.STANDBY_TC_10 pressure_sensor_patient = adafruit_bme280.Adafruit_BME280_SPI(spi, sensor2pin) pressure_sensor_patient.mode = adafruit_bme280.MODE_NORMAL pressure_sensor_patient.standby_period = adafruit_bme280.STANDBY_TC_10 #setting up some of the pins: pi.set_mode(s.motor_step_pin, pigpio.OUTPUT) pi.set_mode(s.motor_dir_pin, pigpio.OUTPUT) pi.set_mode(s.motor_sleep_pin, pigpio.OUTPUT) pi.set_mode(s.motor_reset_pin, pigpio.OUTPUT) #setting up some multiprocessing shared variables last_step_count = mp.Value('i', 0) #incremental position in stepper motor steps
def main(screen): # Setup of bme280 with SPI spi = busio.SPI(board.SCK, board.MOSI, board.MISO) bme_cs = digitalio.DigitalInOut( board.D5) # Change this according to gpio pin used (cs port on sensor) bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs) # Set pressure at sea level bme280.sea_level_pressure = 1013.25 # Start listening for key press in other thread so ui won't get blocked thread = Thread(target=detect_key_press) thread.start() # Use color for nicer ui curses.start_color() # Screen setup num_rows, num_cols = screen.getmaxyx() # Colors curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK) curses.init_pair(2, curses.COLOR_BLUE, curses.COLOR_BLACK) curses.curs_set(0) # Turn off cursor curses.cbreak() # Turn on cbreak mode (no enter) curses.noecho() # Turn echo off while not key_pressed: # Get current time current_time = time.localtime() current_clock = time.strftime("%H:%M:%S", current_time) # Clean screen screen.erase() # Add data to screen screen.addstr("******* Temp monitor (q to quit) *******\n", curses.color_pair(1)) screen.addstr("Time: ") screen.addstr(current_clock + "\n", curses.color_pair(2)) screen.addstr("Temperature: ") screen.addstr(" %0.1f C\n" % bme280.temperature, curses.color_pair(2)) screen.addstr("Humidity: ") screen.addstr("%0.1f %%\n" % bme280.relative_humidity, curses.color_pair(2)) screen.addstr("Pressure: ") screen.addstr("%0.1f hPa\n" % bme280.pressure, curses.color_pair(2)) screen.addstr("Altitude = ") screen.addstr(" %0.2f meters" % bme280.altitude, curses.color_pair(2)) # Refresh screen to show data screen.refresh() # Check for key press for faster exit if not key_pressed: # Wait for 1 second curses.napms(1000) curses.nocbreak() # Turn off cbreak mode curses.echo() # Turn echo back on curses.curs_set(1) # Turn cursor back on