#!/usr/bin/python # # thingspeak.py # # May.17/2015: v1.00 released # # Logging from Raspberry Pi data acquisition source to ThingSpeak.com IoT service # # http://www.mikronauts.com/raspberry-pi/raspberry-pi-iot-experiments-and-howto/ # # Copyright 2015 William Henning # http://Mikronauts.com # # Related Links: # # https://github.com/jerbly/Pi/blob/master/raspi-adc-pot.py # http://www.raspberrypi.org/forums/viewtopic.php?t=37550&p=320440 # from http://git.agocontrol.com/apagg/agocontrol-work/blob/93f7d9051aebf79c794e3d5fa4feea92c9221831/raspiMCP3xxxGPIO/MCP3208.py import RPi.GPIO as GPIO import spidev import urllib as web import time import os # module constants - SPI multiplexer address lines A2 = 25 A1 = 24 A0 = 23 # optimize python SPI requests req=[[6,0,0], [6,64,0],[6,128,0],[6,192,0],[7,0,0], [7,64,0],[7,128,0],[7,192,0]] # read SPI data from MCP3208 chip, 8 possible adc's (0 thru 7) def readadc(adcnum): r = spi.xfer2(req[adcnum]) return ((r[1]&15)<<8) + r[2] # select SPI device def spi_device(devno): GPIO.output(A2,(devno >> 2)&1) GPIO.output(A1,(devno >> 1)&1) GPIO.output(A0,devno & 1) # scan 8 channels on selected MCP3208 def scan_adc(n): print "--------------------------" print "SPI DEVICE", n, "SCAN ", count spi_device(n) if (n==6): mul=0.001 else: mul=0.002 url = "https://api.thingspeak.com/update?key=XXXXXXXXXXXXXXXXXX&headers=false" for chan in range(0,8): x = readadc(chan) url = url + "&field"+str(chan+1)+"="+str(x*mul) print chan, x*mul try: resp = web.urlopen(url).read() except: print "Web error" csv = csv + ", -1" csv = csv + "\n" # main program # initialize multiplexer, I/O's, and stream data to ThingSpeak IoT service. GPIO.setmode(GPIO.BCM) GPIO.setup(A2, GPIO.OUT) GPIO.setup(A1, GPIO.OUT) GPIO.setup(A0, GPIO.OUT) spi = spidev.SpiDev() spi.open(0,1) # open(port,CS) port=0, CS=0|1 spi.max_speed_hz=1953000 # default speed undervalued divided voltages count = 0 errs = 0 while 1: scan_adc(1) time.sleep(60) count = count + 1