Craig Oates
4 years ago
3 changed files with 87 additions and 21 deletions
@ -1,21 +0,0 @@
|
||||
""" |
||||
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 |
||||
|
||||
# Using BCM (Broadcom) names when referencing the GPIO pins. |
||||
GPIO.setmode(GPIO.BCM) |
||||
|
||||
a_pin = 18 # Charges the capacitor. |
||||
b_pin = 23 # Discharges the capacitor. |
||||
|
@ -0,0 +1,87 @@
|
||||
""" |
||||
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: |
||||
print("Error updating light reading.") |
||||
finally: |
||||
print("clean up") |
||||
GPIO.cleanup() # cleanup all GPIO |
||||
|
||||
if __name__ == "__main__": |
||||
main() |
Reference in new issue