1
0
Fork 0
A Python based project which measures the light levels of an environment and forwards those measurements on to a server. This project is one of several which forms the software-side of the 'Return to Ritherdon' project.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 

89 lines
2.3 KiB

"""
CLI Meter
====================================================================
Takes a reading of the light using the meter attached via to the
intended Raspberry PI. The reading is the sent to a server where the
reading is stored. The intended use for this script is to be run via
the command-line without the need for a G.U.I. This should be the
version used when the "Return to Ritherdon" project is live.
"""
import json
import RPi.GPIO as GPIO
import time, math
import requests
from datetime import datetime
import pdb
# Using BCM (Broadcom) names when referencing the GPIO pins.
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(True)
a_pin = 18 # Charges the capacitor.
b_pin = 23 # Discharges the capacitor.
api_url = "http://35.176.14.135/api/readings/add/1"
def discharge():
GPIO.setup(a_pin, GPIO.IN)
GPIO.setup(b_pin, GPIO.OUT)
GPIO.output(b_pin, False)
time.sleep(0.01) # 0.01 -- initial value
def charge_time():
GPIO.setup(b_pin, GPIO.IN)
GPIO.setup(a_pin, GPIO.OUT)
GPIO.output(a_pin, True)
t1 = time.time()
while not GPIO.input(b_pin):
pass
t2 = time.time()
return (t2 - t1) * 1000000
def analog_read():
discharge()
return charge_time()
def read_resistance():
n = 20
total = 0;
for i in range(1, n):
total = total + analog_read()
reading = total / float(n)
resistance = reading * 6.05 - 939
return resistance
def light_from_r(R):
return math.log(1000000.0/R) * 10.0
def get_timestamp():
return datetime.now().strftime(("%Y-%m-%d %H:%M:%S"))
def push_reading(lvalue):
time = get_timestamp()
headers = {"content-type": "application/json"}
payload = { "reading": int(lvalue), "time": time}
print(payload)
res = requests.post(api_url, data=json.dumps(payload), headers=headers)
def update_reading():
light = light_from_r(read_resistance())
reading_str = "{:.0f}".format(light)
print(reading_str)
push_reading(light)
def main():
try:
while True:
#pdb.set_trace()
update_reading()
except KeyboardInterrupt:
print("Keyboard Interrupt: quitting program.")
except:
print("Error updating light reading...")
finally:
print("Cleaning up GPIO before closing...")
GPIO.cleanup()
if __name__ == "__main__":
main()