def config_sensors(): spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = [ digitalio.DigitalInOut(board.D4), digitalio.DigitalInOut(board.D5), digitalio.DigitalInOut(board.D6), digitalio.DigitalInOut(board.D7) ] return [ adafruit_max31855.MAX31855(spi, cs[0]), adafruit_max31855.MAX31855(spi, cs[1]), adafruit_max31855.MAX31855(spi, cs[2]), adafruit_max31855.MAX31855(spi, cs[3]) ]
def __init__(self, time_step): TempSensor.__init__(self, time_step) log.info("init MAX31855-spi") cs1 = digitalio.DigitalInOut(config.gpio_sensor_cs1) cs1.direction = digitalio.Direction.OUTPUT cs1.value = True cs2 = digitalio.DigitalInOut(config.gpio_sensor_cs2) cs2.direction = digitalio.Direction.OUTPUT cs2.value = True self.thermocouple1 = adafruit_max31855.MAX31855(board.SPI(), cs1) self.thermocouple2 = adafruit_max31855.MAX31855(board.SPI(), cs2) self.t1 = None self.t2 = None
def __init__(self): #setup stuff CLK = 25 CS = 24 DO = 18 self.sensor = adafruit_max31855.MAX31855(CLK, CS, DO) self.tempC = 0
def get_temp(): spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs_pin_list = [board.D5,board.D6] output = [1,1] for i in range(0,2): cs_var = digitalio.DigitalInOut(cs_pin_list[i]) max_var = adafruit_max31855.MAX31855(spi,cs_var) output[i] = max_var.temperature return output
def __init__(self,GUI_hvac_Ref): #init de sensores y dac self.GUI_hvac_Ref = GUI_hvac_Ref self.TaskControlTemp = threading.Thread(target = self.ControlTemp_Routine) self.spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) self.cs = digitalio.DigitalInOut(board.D10) self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs) self.Relay = digitalio.DigitalInOut(board.D13) self.Relay.direction = digitalio.Direction.OUTPUT self.i2c = busio.I2C(board.SCL, board.SDA) self.dac = adafruit_mcp4725.MCP4725(self.i2c, address = 0x60) self.TaskControlTemp.start() pass
def measure(self): '''熱電対の温度を測定 ''' self.args = self.parser.parse_args() pins = self.args.cs_pin verbose = self.args.verbose temps = [] for i in range(len(pins)): spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = eval("digitalio.DigitalInOut(board.D%s)" % pins[i]) max31855 = adafruit_max31855.MAX31855(spi, cs) temps.append(max31855.temperature) self.__output(pins, temps, verbose)
def get_temp(power_output,pwm_object,max_var,counter): spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs_pin_list = [board.D4,board.D5,board.D6,board.D12,board.D13,board.D16,board.D17,board.D18,board.D19,board.D20,board.D21,board.D22,board.D23] output = [0,0,0,0,0,0,0,0,0,0] #pwm_object.duty_cycle = 0 pwm_object.duty_cycle=power_output if counter == 0: max_var = [] for i in range(0,1): cs_var = digitalio.DigitalInOut(cs_pin_list[i]) max_var_single = adafruit_max31855.MAX31855(spi,cs_var) max_var = max_var + [max_var_single] output[i] = max_var_single.temperature else: #print(max_var) for i in range(0,1): output[i] = max_var[i].temperature print("gpio power output:",power_output) #pwm_object.duty_cycle=power_output #x=gpio_pwm(power_output) time.sleep(.1) return output,pwm_object,max_var
channel ): # see: https://raspberrypihq.com/use-a-push-button-with-raspberry-pi-gpio/ connect gpioButtonPin to 3.3V, preferably through a resistor STOP_EVENT.set() GPIO.setmode(GPIO.BCM) GPIO.setup(gpioOvenPin, GPIO.OUT) GPIO.setup( gpioButtonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN ) # Set pin to be an input pin and set initial value to be pulled low (off) GPIO.add_event_detect(gpioButtonPin, GPIO.RISING, callback=stopbutton) #stuff needed for reading the temperature spi = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI) cs = DigitalInOut(board.D5) sensor = adafruit_max31855.MAX31855(spi, cs) #Create a fake sensor: TODO #sensor = types.SimpleNamespace() #sensor.temperature=110 ProgramRunning = False CurrentProgramName = '' CurrentStep = 0 thermocouplebroken = False app = Flask(__name__) @app.route("/home") def gohome():
# the number of seconds between measurements measurement_interval_seconds = 1 # creates channel to "speak" SPI # tells which hardware pins on the USB bridge board help us speak SPI spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) # selects the USB bridge hardware pin to ask to talk with each board chip_select_1 = digitalio.DigitalInOut(board.D4) chip_select_2 = digitalio.DigitalInOut(board.D5) chip_select_3 = digitalio.DigitalInOut(board.D6) chip_select_4 = digitalio.DigitalInOut(board.D7) # creates an object that speaks SPI, listens to a specific chip select pin, and measures temperature temperature_sensor_1 = adafruit_max31855.MAX31855(spi, chip_select_1) temperature_sensor_2 = adafruit_max31855.MAX31855(spi, chip_select_2) temperature_sensor_3 = adafruit_max31855.MAX31855(spi, chip_select_3) temperature_sensor_4 = adafruit_max31855.MAX31855(spi, chip_select_4) # all the indented commands below run until the program is stopped by pressing ctrl-c while True: # store temperature readings in memory for use by the computer temperature_1 = temperature_sensor_1.temperature temperature_2 = temperature_sensor_2.temperature temperature_3 = temperature_sensor_3.temperature temperature_4 = temperature_sensor_4.temperature # print the temperature readings to the screen print(datetime.datetime.now(), temperature_1, temperature_2, temperature_3, temperature_4)
import board import busio import digitalio import adafruit_max31855 from time import sleep import time t0 = time.time() #start time print(t0) spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D5) max31855 = adafruit_max31855.MAX31855(spi, cs) spi_2 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs_2 = digitalio.DigitalInOut(board.D6) max31855_2 = adafruit_max31855.MAX31855(spi_2, cs_2) print('Temp/K,time/s') f = open('test.txt', mode='a') f.write('Temp/K,time/s\n') f.close() import gspread from oauth2client.service_account import ServiceAccountCredentials #鍵 key_name = 'temperature-measurement60876-76ca5673b803.json' sheet_name = '発表当日デモンストレーション' #APIにログイン
import board import digitalio import adafruit_max31855 from google.oauth2.service_account import Credentials from googleapiclient.discovery import build #--| User Config |----------------------------------------------- SERVICE_ACCOUNT_FILE = 'YOUR_CREDENTIALS_FILE.json' SPREADSHEET_ID = 'YOUR_SHEET_ID' DATA_LOCATION = 'A1' UPDATE_RATE = 60 #--| User Config |----------------------------------------------- # Sensor setup cs = digitalio.DigitalInOut(board.C0) max31855 = adafruit_max31855.MAX31855(board.SPI(), cs) # Google Sheets API setup SCOPES = [ 'https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive' ] CREDS = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES) SHEET = build('sheets', 'v4', credentials=CREDS).spreadsheets() # Logging loop print("Logging...") while True: values = [[datetime.now().isoformat(), max31855.temperature]] SHEET.values().append(spreadsheetId=SPREADSHEET_ID,
def pid_loop(dummy,state): import sys from time import sleep, time from math import isnan import board, busio, digitalio, adafruit_max31855 import PID as PID import config as conf from collections import deque sys.stdout = open("pid.log", "a") sys.stderr = open("pid.err.log", "a") def c_to_f(c): return c * 9.0 / 5.0 + 32.0 spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D8) sensor = adafruit_max31855.MAX31855(spi=spi, cs=cs) pid = PID.PID(conf.Pc,conf.Ic,conf.Dc) pid.SetPoint = state['settemp'] pid.setSampleTime(conf.sample_time*5) nanct=0 i=0 j=0 pidhist = deque([0.]*10) avgpid = 0. temphist = deque([0.]*5) avgtemp = 0. lastsettemp = state['settemp'] lasttime = time() sleeptime = 0 iscold = True iswarm = False lastcold = 0 lastwarm = 0 with open('pid.log','a') as fpid: try: while True : # Loops 10x/second temp = sensor.temperature if isnan(temp) : nanct += 1 if nanct > 100000 : sys.exit continue else: nanct = 0 temphist.popleft() temphist.append(temp) avgtemp = sum(temphist)/len(temphist) if avgtemp < 100 : lastcold = i if avgtemp > 200 : lastwarm = i if iscold and (i-lastcold)*conf.sample_time > 60*15 : pid = PID.PID(conf.Pw,conf.Iw,conf.Dw) pid.SetPoint = state['settemp'] pid.setSampleTime(conf.sample_time*5) iscold = False if iswarm and (i-lastwarm)*conf.sample_time > 60*15 : pid = PID.PID(conf.Pc,conf.Ic,conf.Dc) pid.SetPoint = state['settemp'] pid.setSampleTime(conf.sample_time*5) iscold = True if state['settemp'] != lastsettemp : pid.SetPoint = state['settemp'] lastsettemp = state['settemp'] if i%10 == 0 : pid.update(avgtemp) pidout = pid.output pidhist.popleft() pidhist.append(pidout) avgpid = sum(pidhist)/len(pidhist) state['i'] = i state['temp'] = round(temp,2) state['avgtemp'] = round(avgtemp,2) state['pidval'] = round(pidout,2) state['avgpid'] = round(avgpid,2) state['pterm'] = round(pid.PTerm,2) if iscold : state['iterm'] = round(pid.ITerm * conf.Ic,2) state['dterm'] = round(pid.DTerm * conf.Dc,2) else : state['iterm'] = round(pid.ITerm * conf.Iw,2) state['dterm'] = round(pid.DTerm * conf.Dw,2) state['iscold'] = iscold print(time(), state, file=fpid) sleeptime = lasttime+conf.sample_time-time() if sleeptime < 0 : sleeptime = 0 sleep(sleeptime) i += 1 lasttime = time() finally: pid.clear
def __init__(self, _wheelspeed=True, _rpm=True, _gps=True, _imu=True, _engTemp=True, _camera=True, influxUrl='http://192.168.254.40:8086', influxToken="rc0LjEy36DIyrb1CX6rnUDeMJ0-ldW5Mps1KOwkSRrRhbRWDsGzPlNn6BOiyg96vWEKRMZ3xwsfZVgIAxL2gCw==", race='test5', units='standard'): """_args enables sensor type, on by default""" #influx config self.org = "rammers" self.bucket = race self.client = InfluxDBClient(url=influxUrl, token=influxToken) self.write_api = self.client.write_api(write_options=SYNCHRONOUS) self.units = units # self.unitCalc_temp = lambda x : x*9/5+32 if self.units == 'standard' else x self.lap = 0 self.distance = 0 self.speed = 0 #mph self.rpm = 0 #int self.engineTemp= 0 self.airTemp = 0 self.rpm_elapse = time.monotonic() self.wheel_elapse = time.monotonic() #timing self.current_sector = 1 self.lapTime = 0 self.lastLap = 0 self.bestLap = 0 self.sessionTime = time.monotonic() self.rider = 'default' self.sectorTime = time.monotonic() self.mapData = 0 self.s1Time=0 self.s2Time=0 self.s3Time=0 if _wheelspeed == True or _rpm == True: self.GPIO = GPIO self.GPIO.setmode(GPIO.BCM) self.GPIO.setwarnings(False) if _wheelspeed == True: self.GPIO.setup(17,GPIO.IN,GPIO.PUD_UP) self.GPIO.add_event_detect(17,GPIO.FALLING,callback=self.speedCalc,bouncetime=20) if _rpm == True: self.GPIO.setup(27,GPIO.IN,GPIO.PUD_DOWN) self.GPIO.add_event_detect(27,GPIO.RISING,callback=self.rpmCalc,bouncetime=2) if _imu == True:#IMU self.imu = adafruit_bno055.BNO055_I2C(busio.I2C(board.SCL, board.SDA)) if _gps == True: uart = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=10) self.gps = adafruit_gps.GPS(uart, debug=False) self.gps.send_command(b"PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0") self.gps.send_command(b"PMTK220,10000") if _engTemp == True: #thermocouple self.spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) self.cs = digitalio.DigitalInOut(board.D5) self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs) self.sensorDict=dict() self.sensorThread = threading.Thread(target=self.call_sensorDict) self.sensorThread.start()
#!/usr/bin/env python3 import board import busio import digitalio import adafruit_max31855 temp1 = board.D5 # BBQ temp2 = board.D19 # Meat spi0 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) spi1 = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs0 = digitalio.DigitalInOut(temp1) cs1 = digitalio.DigitalInOut(temp2) max318551 = adafruit_max31855.MAX31855(spi0, cs0) max318552 = adafruit_max31855.MAX31855(spi1, cs1) def get_temp(): return (max318551.temperature, max318552.temperature)
import adafruit_max31855 import time from datetime import datetime, timedelta app = Flask(__name__) cors = CORS(app) #app.config['CORS_HEADERS'] = 'Content-Type' #api = Api(app) spi_a = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI) spi_b = SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI) cs_a = digitalio.DigitalInOut(board.D5) cs_b = digitalio.DigitalInOut(board.D6) sensorA = adafruit_max31855.MAX31855( spi_a, cs_a, ) sensorB = adafruit_max31855.MAX31855(spi_b, cs_b) @app.route('/', methods=['GET']) def index(): data = { "sensorA": str(round(sensorA.temperature, 1)), "sensorB": str(round(sensorB.temperature, 1)) } return jsonify(data) @app.route('/weather', methods=['GET'])
def __init__(self): self.spi = busio.SPI(self.SCK, MOSI=self.MOSI, MISO=self.MISO) self.cs = digitalio.DigitalInOut(board.D5) self.max31855 = adafruit_max31855.MAX31855(self.spi, self.cs)
import time import board import busio import digitalio import adafruit_max31855 spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D5) max31855 = adafruit_max31855.MAX31855(spi, cs) while True: tempC = max31855.temperature tempF = tempC * 9 / 5 + 32 print("Temperature: {} C {} F ".format(tempC, tempF)) time.sleep(2.0)
import adafruit_max31855 import RPi.GPIO as gpio zones = np.array([17,27,23]) #pin number of each zone (1,2,3) gpio.setmode(gpio.BCM) for z in zones: gpio.setup(int(z), gpio.OUT) spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs1 = digitalio.DigitalInOut(board.D4) cs2 = digitalio.DigitalInOut(board.D25) cs3 = digitalio.DigitalInOut(board.D12) thermo1 = adafruit_max31855.MAX31855(spi, cs1) thermo2 = adafruit_max31855.MAX31855(spi, cs2) thermo3 = adafruit_max31855.MAX31855(spi, cs3) ################################################################################################# #imputs setpoint = input("Enter setpoint(C)\n") try: setpoint = float(setpoint) except ValueError: print("Your input was not a number.") print("exiting") exit(1)
class ToasterController(object): loaded = False instructions = None timer = None cancel = False spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) cs = digitalio.DigitalInOut(board.D5) max31855 = adafruit_max31855.MAX31855(spi, cs) main_time = 12 cancel_time = 1 #motor1 = Motor(forward = 2, backward = 4) CLK = 11 CS = 8 DO = 9 sensor = MAX31855.MAX31855(CLK, CS, DO) btn = Button(27) button_1_channel = 22 button_2_channel = 27 button_3_channel = 17 def c_to_f(c): return c * 9.0 / 5.0 + 32.0 def __init__(self, instructions): self.instructions = instructions self.timer = CookTimer() def start(self, c, motor1): ''' Begin cooking ''' self.timer.set(self.instructions.cook_time) self.lower_platform(c, motor1) def lower_platform(self, c, motor1): try: self.loaded = True for x in range(0, self.main_time, 1): motor1.backward() if self.cancel == True: break note = 'Lowering food...' c.send(note.encode('utf-8')) print('Main: ', self.main_time) print('Cancel: ', self.cancel_time) self.cancel_time = self.cancel_time + 1 time.sleep(1) if self.cancel == False: note = 'Food Lowered' + ' ' c.sendall(note.encode('utf-8')) print("Platform is lowered") motor1.stop() self.timer.start() self.wait_time(c, self.instructions) except OSError: print("Error...") motor1.stop() def lower_platform_offline(self, motor1): try: self.loaded = True for x in range(0, self.main_time, 1): motor1.backward() if self.cancel == True: break print('Main: ', self.main_time) print('Cancel: ', self.cancel_time) self.cancel_time = self.cancel_time + 1 time.sleep(1) if self.cancel == False: print("Platform is lowered") motor1.stop() self.timer.start() self.wait_time_offline(self.instructions) except OSError: print("Error...") motor1.stop() def wait_time(self, c, instructions): '''Send data to app''' if int(self.timer.remaining_time) <= 0: self.timer.cook_time = instructions.cook_time try: for x in range(int(self.timer.remaining_time), -1, -1): if self.cancel == True: break print(self.timer.remaining_time) time_split = str(round(self.timer.remaining_time)) tempC = self.sensor.readTempC() tempF = str(tempC * 9 / 5 + 32) print('Temperature: {} C {} F '.format(tempC, tempF)) total_data = time_split + ' ' + tempF + ' ' + 'Code' c.send(total_data.encode('utf-8')) instructions.stopped.wait(timeout=1) except OSError: print("Error...") def wait_time_offline(self, instructions): '''Send data to app''' if int(self.timer.remaining_time) <= 0: self.timer.cook_time = instructions.cook_time try: for x in range(int(self.timer.remaining_time), -1, -1): if self.cancel == True: break print(self.timer.remaining_time) instructions.stopped.wait(timeout=1) except OSError: print("Error...") motor1.stop() def raise_platform(self, c, motor1): try: self.loaded = False raise_time = -1 self.cancel_time = self.cancel_time - 1 print('Main: ', self.main_time) print('Cancel: ', self.cancel_time) if self.main_time != self.cancel_time: raise_time = raise_time + self.cancel_time + 1 else: raise_time = self.main_time for x in range(0, raise_time, 1): motor1.forward() note = 'Raising food...' c.send(note.encode('utf-8')) time.sleep(1) note = 'Raised' c.send(note.encode('utf-8')) print("Platform is raised") motor1.stop() except OSError: print("Error...") motor1.stop() def raise_platform_offline(self, motor1): try: self.loaded = False raise_time = -1 print('Main: ', self.main_time) if self.main_time != self.cancel_time: raise_time = raise_time + self.cancel_time else: raise_time = self.main_time print('Raise: ', raise_time) for x in range(0, raise_time, 1): motor1.forward() time.sleep(1) print("Platform is raised") motor1.stop() except OSError: print("Error...") motor1.stop() def reset(self): '''reset timer mid cook''' self.cancel = False self.timer.clear() def end(self, c, motor1): ''' Cooking has finished ''' self.cancel = False self.timer.clear() self.instructions.clear() self.raise_platform(c, motor1) self.cancel_time = 0 def end_offline(self, motor1): ''' Cooking has finished ''' self.cancel = False self.timer.clear() self.instructions.clear() self.raise_platform_offline(motor1) self.cancel_time = 0
cs1.direction = digitalio.Direction.OUTPUT cs1.value = True cs2 = digitalio.DigitalInOut(config.gpio_sensor_cs2) cs2.direction = digitalio.Direction.OUTPUT cs2.value = True spi = board.SPI() #while not spi.try_lock(): # pass print("try") #spi.configure(baudrate=50000, phase=0, polarity=0) t1 = adafruit_max31855.MAX31855(spi, cs1) t2 = adafruit_max31855.MAX31855(spi, cs2) sd = SPIDevice(spi, cs1) #while 1: # cs1.value = False # result = bytearray(4) # with sd as diocane: # diocane.readinto(result) # cs1.value = True # print(result) # time.sleep(1) print("try2") result = bytearray(4)