Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Analog input added!

  • Loading branch information...
commit 18d8e87cad854aed4e4db61fe19df4771a2e56a5 1 parent 9ea786e
videoman authored
Showing with 211 additions and 0 deletions.
  1. +100 −0 Analog_and_temp.py
  2. +111 −0 adafruit-cosm-temp.py
100 Analog_and_temp.py
View
@@ -0,0 +1,100 @@
+#!/usr/bin/env python
+import time
+import datetime
+import os
+import RPi.GPIO as GPIO
+
+GPIO.setmode(GPIO.BCM)
+DEBUG = 1
+LOGGER = 1
+
+# 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
+
+while True:
+ # read the analog pin (temperature sensor LM35)
+ read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
+
+ # convert analog reading to millivolts = ADC * ( 3300 / 1024 )
+ millivolts = read_adc0 * ( 3300.0 / 1024.0)
+
+ # 10 mv per degree
+ temp_C = ((millivolts - 100.0) / 10.0) - 40.0
+
+ # convert celsius to fahrenheit
+ temp_F = ( temp_C * 9.0 / 5.0 ) + 32
+
+ # remove decimal point from millivolts
+ millivolts = "%d" % millivolts
+
+ # show only one decimal place for temprature and voltage readings
+ temp_C = "%.1f" % temp_C
+ temp_F = "%.1f" % temp_F
+
+ if DEBUG:
+ # Print what we have gathered to the Screen!
+ print "read_adc0:\t", read_adc0
+ print "millivolts:\t", millivolts
+ print "temp_C:\t\t", temp_C
+ print "temp_F:\t\t", temp_F
+ print
+
+ if LOGGER:
+ # open a file for writing... append mode
+ logtime = datetime.datetime.now()
+ temphist = open('temp_hist', 'a')
+ temphist.write(logtime.strftime("%Y-%m-%d %H:%M") + '\t' + 'temp_C:\t' + temp_C + '\t' + 'temp_F:' + '\t' + temp_F + '\n')
+
+
+ # Sleep for 5 seconds...
+ time.sleep(5)
+
+ #If you want to log this data, check out adafruit-cosm-temp.py program
111 adafruit-cosm-temp.py
View
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+import time
+import os
+import RPi.GPIO as GPIO
+import eeml
+
+GPIO.setmode(GPIO.BCM)
+DEBUG = 1
+LOGGER = 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)
+
+# COSM variables. The API_KEY and FEED are specific to your COSM account and must be changed
+#API_KEY = '5RNOO3ShYJxYiq2V2sgSRtz3112SAKxFQjNDQmNXc0RScz0g'
+#FEED = 68872
+API_KEY = 'YOUR_API_KEY'
+FEED = YOUR_FEED_ID
+
+API_URL = '/v2/feeds/{feednum}.xml' .format(feednum = FEED)
+
+# temperature sensor connected channel 0 of mcp3008
+adcnum = 0
+
+while True:
+ # read the analog pin (temperature sensor LM35)
+ read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
+
+ # convert analog reading to millivolts = ADC * ( 3300 / 1024 )
+ millivolts = read_adc0 * ( 3300.0 / 1024.0)
+
+ # 10 mv per degree
+ temp_C = ((millivolts - 100.0) / 10.0) - 40.0
+
+ # convert celsius to fahrenheit
+ temp_F = ( temp_C * 9.0 / 5.0 ) + 32
+
+ # remove decimal point from millivolts
+ millivolts = "%d" % millivolts
+
+ # show only one decimal place for temprature and voltage readings
+ temp_C = "%.1f" % temp_C
+ temp_F = "%.1f" % temp_F
+
+ if DEBUG:
+ print "read_adc0:\t", read_adc0
+ print "millivolts:\t", millivolts
+ print "temp_C:\t\t", temp_C
+ print "temp_F:\t\t", temp_F
+ print
+
+ if LOGGER:
+ # open up your cosm feed
+ pac = eeml.Pachube(API_URL, API_KEY)
+
+ #send celsius data
+ pac.update([eeml.Data(0, temp_C, unit=eeml.Celsius())])
+
+ #send fahrenheit data
+ pac.update([eeml.Data(1, temp_F, unit=eeml.Fahrenheit())])
+
+ # send data to cosm
+ pac.put()
+
+ # hang out and do nothing for 10 seconds, avoid flooding cosm
+ time.sleep(30)
Please sign in to comment.
Something went wrong with that request. Please try again.