import sht21 import time import datetime # Example for using the SHT21 Breakoutboard with the Raspberry Pi. Martin Steppuhn, www.emsystech.de # # This script appends as measurement of SHT21 to as simple Logfile. # # Example: # 16.06.2015 13:44:00 24.2 44 # 16.06.2015 13:44:30 24.5 43 # 16.06.2015 13:45:00 24.5 43 # 16.06.2015 13:45:30 24.3 42 sht21 = sht21.SHT21() interval = 5 # Intervall for measurement file = "log_loop.txt" # File for Datastorage print("SHT21-Demo: Write measurement data every", interval, "seconds to", file) while 1: if ((int(time.time()) % interval) == 0): try: (temp, humidity) = sht21.measure(1) timestamp = '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now()) s = "%s\t%s\t%d" % (timestamp, temp, humidity) except: s = "SHT21 I/O Error" print(s)
#! /usr/bin/env python #coding: utf-8 import subprocess import sys sys.path.append('/usr/local/lib/python2.7/site-packages') import time import sht21 # SHT2xのライブラリをimportする。試験 # 現在時刻の取得 now = time.strftime('%Y-%m-%d %H:%M:%S') #---------------------- #SHT-25による温湿度計測 #---------------------- with sht21.SHT21(1) as sht21: temp = float(sht21.read_temperature()) humi = float(sht21.read_humidity()) #---------------------- # AEH11による照度計測 #---------------------- # プログラム実行時のパラメータを有無を確認する argvs = sys.argv argc = len(argvs) if (argc>1): reso = sys.argv[1] else: reso = "" senseillu= 0x0102 # Sensor illuminate of AEH11 I2CGET = "/usr/sbin/i2cget -y 1 " # 最後の1はBUS IDなので現物に合わせて
else: vore=str(int(ore)) if min=="00": vmin = "in punto" elif min=="30": vmin = "e mezza" if ore=="12": vmin = "e mezzo" else: vmin= "e " + str(int(min)) espeak.synth(hinit + " "+vore + " " + vmin + ".") with sht21.SHT21(0) as sht21: print "Temperature: %s"%sht21.read_temperature() print "Humidity: %s"%sht21.read_humidity() tmp=round(sht21.read_temperature(), 1) hum=int(round(sht21.read_humidity(),0)) # espeak.synth("Sono " + str(tmp) + " gradi centigradi e " + str(hum) + " percento di umidità relativa.") #espeak.synth("Dlin dlon Dlin Dlon, qualche rompicazzo sta suonando alla porta") #while espeak.is_playing: # time.sleep(0.1) time.sleep(5) print("ciao ancora")
import machine import sht21 import bmp280 import time import collectd import uos import weather import sh1106 # Start up I2C i2c = machine.I2C(sda=machine.Pin(21), scl=machine.Pin(22), freq=400000) sens = sht21.SHT21(i2c) bmp = bmp280.BMP280(i2c=i2c) adc = machine.ADC(machine.Pin(35)) disp = sh1106.SH1106_I2C(128, 64, i2c) led = machine.Pin(5, machine.Pin.OUT) led.value(1) disp.init_display() disp.invert(False) disp.rotate(True) disp.fill(1) disp.show() time.sleep_ms(200) disp.fill(0) disp.show() send_adc = False
def runIO(self, board_id, board_type_id, board_n): """ Si occupa di leggere e scrivere i valori degli IO """ # self.log('Self.Mboard', self.mBoard) if board_type_id == 0: # None pass elif board_type_id == 1: # I2C try: # self.log('mBoard', self.mBoard) if self.mBoard[BOARD_UPDATE][ board_n] == 1: # se board_update e' settato: self.mBoard[BOARD_BIN_VAL][board_n] = self.mBoard[ BOARD_BIN_VAL_NEW][ board_n] # Aggiorna board_bin_val con board_bin_val_new self.write_i2c(self.mBoard[BOARD_ADDRESS][board_n], (self.mBoard[BOARD_BIN_VAL][board_n] | self.mBoard[BOARD_DIRECTION][board_n] )) # Aggiorna I2C out self.mBoard[BOARD_UPDATE][board_n] = 0 board_id_i2c_val = self.read_i2c( self.mBoard[BOARD_ADDRESS] [board_n]) # Get byte valore I2C board if self.mBoard[BOARD_BIN_VAL][ board_n] != board_id_i2c_val: # check if board_bin_val e' cambiato self.mBoard[BOARD_BIN_VAL_NEW][board_n] = self.mBoard[ BOARD_BIN_VAL][ board_n] = board_id_i2c_val # aggiorna board_bin_val self.write_i2c(self.mBoard[BOARD_ADDRESS][board_n], (self.mBoard[BOARD_BIN_VAL][board_n] | self.mBoard[BOARD_DIRECTION][board_n] )) # Aggiorna I2C out except: pass elif board_type_id == 2: # RS485 pass elif board_type_id == 3: # Webs if self.mBoard[BOARD_UPDATE][board_n] == 1: self.mBoard[BOARD_BIN_VAL][board_n] = self.mBoard[ BOARD_BIN_VAL_NEW][board_n] self.mBoard[BOARD_UPDATE][board_n] = 0 elif board_type_id == 4 or board_type_id == 6: # Temperature + humidity try: a = sht21.SHT21(self.i2c) if board_type_id == 4: time.sleep(0.33) temperature = round(a.read_temperature(), 1) self.mBoard[BOARD_BIN_VAL][board_n] = temperature q = 'INSERT INTO sensor (type, value) VALUES("{}", "{}");'.format( '1', temperature) self.db.query(q) if board_type_id == 6: time.sleep(0.5) humidity = round(a.read_humidity(), 0) self.mBoard[BOARD_BIN_VAL][board_n] = humidity q = 'INSERT INTO sensor (type, value) VALUES("{}", "{}");'.format( '2', humidity) self.db.query(q) except: pass time.sleep(60) elif board_type_id == 5: # PD9535 pass elif board_type_id == 7: # GPIO """ Example GPIO OUT """ # print self.pi.get_current_tick() # Tick in uS from started # print self.pi.get_hardware_revision() # Hardware revision print bin(self.pi.read_bank_1()) # Get GPIO status in block b1 = self.pi.read_bank_1() # print bin(self.pi.read_bank_2()) # Get GPIO status in block b1 = self.setBit(b1, 16, 1) print bin(b1) # self.pi.set_bank_1(b1) pass # print self.mBoard[6] self.mBoard[BOARD_THREAD][board_n] = 0
class tstat(): temp_sensor = sht21.SHT21(1) TempRange = 2.0 MAX_PRIORITY = 10 MIN_PRIORITY = 0 HEAT1 = 1 HEAT2 = 2 COOL1 = -1 COOL2 = -2 IDLE = 0 COOLING1_RELAY = 2 COOLING2_RELAY = 3 HEATING1_RELAY = 4 HEATING2_RELAY = 5 FAN_RELAY = 1 HEAT_MODE = 2 COOL_MODE = 1 OFF_MODE = 0 last_switch_time = time.time() #initialize last switch time tempData = 0 requested_mode = 0 def __init__(self, z): self.zonenum = z self.setPoint = settings[1] self.deadband = settings[4] self.min_switch_time = settings[3] self.set_to_manual() def set_to_manual(self): relays.relaySetup() #Turn off rtu for fresh start self.set_mode(self.IDLE) def read_temp(self): temp = float(self.temp_sensor.read_temperature()) return temp def set_setpoint(self, setpoint): if setpoint > 80: setpoint = 80 if setpoint < 60: setpoint = 60 self.setPoint = setpoint def read_setpoint(self): return self.setPoint def heat_cool_request(self): #only activate if 0.1 degree(F) over setpoint if self.temp > self.read_setpoint() + self.deadband: return self.COOL_MODE elif self.temp < self.read_setpoint() - self.deadband: return self.HEAT_MODE else: return self.OFF_MODE def get_mode(self): return self.read_mode() ##Read Mode def read_mode(self): #Read the relays c1 = relays.relayRead(self.COOLING1_RELAY) c2 = relays.relayRead(self.COOLING2_RELAY) h1 = relays.relayRead(self.HEATING1_RELAY) h2 = relays.relayRead(self.HEATING2_RELAY) if (h1 == 0 and c1 == 0 and h2 == 0 and c2 == 0): mode = self.IDLE elif (h1 != 0 and c1 == 0 and c2 == 0): if (h2 != 0): mode = self.HEAT2 else: mode = self.HEAT1 elif (h1 == 0 and c1 != 0 and h2 == 0): if (c2 != 0): mode = self.COOL2 else: mode = self.COOL1 else: assert (False) return mode ##Find if tstat is active def is_active(self): current_mode = self.read_mode() if (current_mode != self.IDLE): is_on = 1 elif (current_mode == self.IDLE): is_on = 0 return is_on #Find if tstat can switch #last_switch_time assigned in activate method def switchable(self): if (time.time() - self.last_switch_time > self.min_switch_time ): #sets short cycle limits (has been at 10min) can_switch = 1 elif (time.time() - self.last_switch_time <= self.min_switch_time): can_switch = 0 return can_switch def set_mode(self, hvac_mode): print("SETTING MODE " + str(hvac_mode)) heat1_relay = self.HEATING1_RELAY heat2_relay = self.HEATING2_RELAY cool1_relay = self.COOLING1_RELAY cool2_relay = self.COOLING2_RELAY if (hvac_mode == self.COOL1): relays.relayClear(heat1_relay) # Heater 1 off relays.relayClear(heat2_relay) # Heater 2 off relays.relayClear(cool2_relay) # Cooler 2 off relays.relaySet(cool1_relay) # Cooler 1 on elif (hvac_mode == self.COOL2): relays.relayClear(heat1_relay) # Heater 1 off relays.relayClear(heat2_relay) # Heater 2 off relays.relaySet(cool2_relay) # Cooler 2 on relays.relaySet(cool1_relay) # Cooler 1 on elif (hvac_mode == self.HEAT1): relays.relayClear(heat2_relay) # Heater 2 off relays.relayClear(cool1_relay) # Cooler 1 off relays.relayClear(cool2_relay) # Cooler 2 off relays.relaySet(heat1_relay) # Heater 1 on elif (hvac_mode == self.HEAT2): relays.relayClear(cool1_relay) # Cooler 1 off relays.relayClear(cool2_relay) # Cooler 2 off relays.relaySet(heat1_relay) # Heater 1 on relays.relaySet(heat2_relay) # Heater 2 on else: relays.relayClear(cool1_relay) # Cooler 1 off relays.relayClear(cool2_relay) # Cooler 2 off relays.relayClear(heat1_relay) # Heater 1 off relays.relayClear(heat2_relay) # Heater 2 off # Actuate the fan if fan is in auto mode if (hvac_mode == self.IDLE): relays.relayClear(self.FAN_RELAY) # Fan off else: relays.relaySet(self.FAN_RELAY) # Fan on #Calculate priority def calculate_priority(self): min_prior = self.MIN_PRIORITY max_prior = self.MAX_PRIORITY tempData = self.read_temp() setP = self.read_setpoint() requested_mode = self.heat_cool_request() current_priority = 0 temp_per_priority = self.TempRange / (max_prior - min_prior) temp_diff = tempData - setP if (requested_mode == self.HEAT_MODE and temp_diff < 0.0): current_priority = min_prior + math.ceil( -temp_diff / temp_per_priority) elif (requested_mode == self.COOL_MODE and temp_diff > 0.0): current_priority = min_prior + math.ceil( temp_diff / temp_per_priority) else: current_priority = 0.0 if (current_priority > max_prior): current_priority = max_prior #was causing an issue distinguishing between floats and ints if (current_priority == max_prior): current_priority = int(current_priority) return current_priority ##Scan for operating data def poll_request(self): #method will return poll (list of scan data) #format for lists is ID, priority, is on (bool), mode, can switch (bool) poll = [] for i in range(0, 5): poll.append(None) poll[0] = self.zonenum priority = self.calculate_priority() poll[1] = priority active_status = self.is_active() poll[2] = active_status current_mode = self.read_mode() poll[3] = current_mode switch_abil = self.switchable() poll[4] = switch_abil #Check to see if hvac unit has been turned off #if(settings.heat_cool == 'OFF'): #self.set_mode(self.IDLE) ##Add FAN ONLY check option #elif(settings.heat_cool == 'FAN ONLY'): #self.set_mode(self.IDLE) #time.sleep(.25) # relays.relaySet(self.FAN_RELAY) return poll def activate(self): try: tempData = self.read_temp() except IOError: print("Failed to read temp sensor") time.sleep(0.35) self.activate() setPoint = self.read_setpoint() current_mode = self.read_mode() requested_mode = self.heat_cool_request() if (self.switchable() == 0): return temp_diff = tempData - setPoint if (temp_diff > 0.0 and requested_mode == self.COOL_MODE): if (temp_diff > self.TempRange): hvac_mode = self.COOL2 else: hvac_mode = self.COOL1 elif (temp_diff < 0.0 and requested_mode == self.HEAT_MODE): if (-temp_diff > self.TempRange): hvac_mode = self.HEAT2 else: hvac_mode = self.HEAT1 else: hvac_mode = self.IDLE if (current_mode != hvac_mode): current_mode = hvac_mode self.last_switch_time = time.time() self.set_mode(hvac_mode) def shutdown(self): if (self.switchable() == 0): return if (self.read_mode() != self.IDLE): current_mode = self.IDLE self.last_switch_time = time.time() self.set_mode(self.IDLE)