import time import os import RPi.GPIO as GPIO # sets up GPIO pins GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) DEBUG = 0 # read SPI data from MCP3008 chip, 8 possible adc's (0 thru 7) def readadc(adcnum, clockpin, mosipin, misopin, cspin): if ((adcnum > 7) or (adcnum < 0)): return -1 GPIO.output(cspin, True) GPIO.output(clockpin, False) # start clock low GPIO.output(cspin, False) # bring CS low commandout = adcnum commandout |= 0x18 # start bit + single-ended bit commandout <<= 3 # we only need to send 5 bits here for i in range(5): if (commandout & 0x80): GPIO.output(mosipin, True) else: GPIO.output(mosipin, False) commandout <<= 1 GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout = 0 # read in one empty bit, one null bit and 10 ADC bits for i in range(12): GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout <<= 1 if (GPIO.input(misopin)): adcout |= 0x1 GPIO.output(cspin, True) adcout /= 2 # first bit is 'null' so drop it return adcout # change these as desired - they're the pins connected from the # SPI port on the ADC to the Cobbler SPICLK = 18 SPIMISO = 23 SPIMOSI = 24 SPICS = 25 # set up the SPI interface pins GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPICS, GPIO.OUT) # temperature sensor connected channel 0 of mcp3008 adcnum = 0 adclight = 1 #while True: # read the analog pin (temperature sensor LM35) read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS) #convert TMP36 #1 digital reading to Celsius temperature c_temp0 = (((read_adc0 * ( 3300.0 / 1024.0)) - 100.0) / 10.0) - 40.0 c_temp0 = "%.1f" % c_temp0 read_adc1 = readadc(adclight, SPICLK, SPIMOSI, SPIMISO, SPICS) print 'Temp:', c_temp0, 'C' print 'Light level:', read_adc1 print print 'ADC values:' # prints raw values print 'Pin 1:', read_adc0 print 'Pin 2:', read_adc1 if read_adc1 in range(0, 100): print "Time to turn on the lights!" # dark if read_adc1 in range(101, 250): print "Running our of light, might have to turn on the lights soon..." # indoor room light levels, not very bright if read_adc1 in range(251, 500): print "Plenty of light :)" # fairly bright, good growing levels if read_adc1 in range(501, 1023): print "Woah, where is the sunblock?" # Tons of light, yay!