示例#1
0
    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
示例#2
0
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  
示例#4
0
    """
    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
示例#5
0
 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
示例#6
0
"""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
示例#8
0
# 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
示例#9
0
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