top of page

RASPBERRY PI PYTHON CODE

import RPi.GPIO as GPIO

import time

import eeml

import os

 

#Connects to my Xively feed 'Raspberry Pi'

FEED = "1787313445"

API_KEY = "SAo6m7MZnZEPzCrIarFh3fyz3V2UhQ2h4AdDDDNrX5k2ZgF0"

API_URL = '/v2/feeds/{feednum}.xml' .format(feednum = FEED)

DEBUG = 1

LOGGER = 1

 

#use P1 header pin numbering convention

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

 

#Setting up of the GPIO channels

GPIO.setup(11, GPIO.IN)

GPIO.setup(13, GPIO.IN)

GPIO.setup(15, GPIO.IN)

GPIO.setup(16, GPIO.IN)

GPIO.setup(18, GPIO.IN)

GPIO.setup(19, GPIO.IN)

GPIO.setup(21, GPIO.IN)

GPIO.setup(23, GPIO.IN)

#GPIO.setup(3, GPIO.OUT) - #SC - Ground

GPIO.setup(5, GPIO.OUT) #RD

GPIO.setup(7, GPIO.OUT) #WR

GPIO.setup(8, GPIO.IN) #INTR

 

#infinite loop

i = 1

 while i == 1:

    while ( GPIO.input(8) == 1 ) :

       # while intr is true

       #Clocking of the ADC

       time.sleep(0.0002)

       GPIO.output(7, GPIO.LOW)

       time.sleep(0.0002)

       GPIO.output(7, GPIO.HIGH)  

       time.sleep(0.0002)

       GPIO.output(5, GPIO.LOW)

       time.sleep(0.0002)

 

       #Inputs the 8-bit digital input

       D0 = str(GPIO.input(11))

       D0 = int(D0 == "True")

       D0 = str(D0)

       D1 = str(GPIO.input(13))

       D1 = int(D1 == "True")

       D1 = str(D1)

       D2 = str(GPIO.input(15))

       D2 = int(D2 == "True")  

       D2 = str(D2)

       D3 = str(GPIO.input(16))

       D3 = int(D3 == "True")

       D3 = str(D3)

       D4 = str(GPIO.input(18))

       D4 = int(D4 == "True")

       D4 = str(D4)

       D5 = str(GPIO.input(19))

       D5 = int(D5 == "True")

       D5 = str(D5)

       D6 = str(GPIO.input(21))

       D6 = int(D6 == "True")

       D6 = str(D6)

       D7 = str(GPIO.input(23))

       D7 = int(D7 == "True")

       D7 = str(D7)

 

       Binary_Input = D7+D6+D5+D4+D3+D2+D1+D0 

       print "Binary = ", Binary_Input

       #Binary to decimal conversion

       Decimal_input = int( Binary_Input, 2)

       print "Decimal = ", Decimal_input

       #Convert input into voltage equivalent

       Volts = (5.0000 * Decimal_input) / 256.0000

       print "Volts = ", Volts

       #zero volts relative to the current is 2.5V

       zero = (5.0000 * 132.0000) / 256.0000

       ZeroVolts = Volts - zero

       #Converting from voltage relative to the current to current

       Current = ZeroVolts * 9.6000

       print "Current = ", Current

       #Calculating Apparent Power

       power = Current * 230

       print "Apparent power = ", power 

   

       #Sending data to Xively

       if LOGGER:

           pac = eeml.Pachube(API_URL, API_KEY)

 

           pac.update([eeml.Data('Current', Current, unit = eeml.Unit('Ampere','basicSI','A'))])  

           pac.update([eeml.Data('Apparent_Power', power, unit = eeml.Unit('VoltAmpere','derivedSI','VA'))])

           pac.put()

 

           if DEBUG:

               print "\n"

               print "Sent to Xively"

               print"\n-----------------------------------------------------"

 

               #Sleep for 15s as to not flood xively feed and then infinite loop repeats

               time.sleep(15)

bottom of page