From 7183a941aaa4f46cd901fc3e934d1c291ed1d6ff Mon Sep 17 00:00:00 2001 From: Josh Stewart Date: Fri, 24 May 2013 21:56:06 +1000 Subject: [PATCH] GPIO work --- SprinklerStudio/db/development.db | Bin 147456 -> 147456 bytes SprinklerStudio/templates/index.html | 8 ++- setup/templates/setup/index.html | 6 +-- sprinklers/SprinklerUtils.py | 76 +++++++++++++++++++++++++++ sprinklers/SprinklerUtils.pyc | Bin 0 -> 2496 bytes sprinklers/views.py | 21 ++------ sprinklers/views.pyc | Bin 2722 -> 2288 bytes 7 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 sprinklers/SprinklerUtils.py create mode 100644 sprinklers/SprinklerUtils.pyc diff --git a/SprinklerStudio/db/development.db b/SprinklerStudio/db/development.db index 8ad8cd28bb8336a8f1cabe07d44c72f243ee64e4..011f0e8827418dbe08b9e7552b4af591e0d1609e 100644 GIT binary patch delta 171 zcmZo@;B08%oFL7ZJ5k1&F}E?HHGy$!0@FfyPX4zH0({FD_?B(wQec|HCo0Uy&Y;Z6 z$;c2~P?VXMos(LmV92_Cw;q!bBMSoqgYfi^`b@%ntb8{a_>b~;@%!_O@ZH=jXmFg* z){>Q#fz#2^$iUE8*T7WQ$V9==z{ delta 91 zcmV-h0HptbfC+$r36L8BYmpp70c(L^g<{95DvQl5AC-KAOf5Yk+2oF xyDkDU0R#~N1^}1wF9H(`1P>Gd55*6P4^Iyivk@=^4+1#^mr*|g6PGDJ0@rr_7aafq diff --git a/SprinklerStudio/templates/index.html b/SprinklerStudio/templates/index.html index 55d74f4..fcbd9e1 100755 --- a/SprinklerStudio/templates/index.html +++ b/SprinklerStudio/templates/index.html @@ -13,7 +13,13 @@ {% if sprinkler.enabled %}

{{ sprinkler.name }}

-

Currently the sprinkler status is: {{sprinkler.status}}

+

+ Currently the sprinkler status is: {{sprinkler.status}}
+ {% if not sprinkler.status %}| Turn on | Turn on for 10 mins | + {% else %}| Turn Off | + {% endif %} +

+
{% endif %} {% endfor %} diff --git a/setup/templates/setup/index.html b/setup/templates/setup/index.html index 01a7091..76a68c5 100644 --- a/setup/templates/setup/index.html +++ b/setup/templates/setup/index.html @@ -4,10 +4,10 @@ diff --git a/sprinklers/SprinklerUtils.py b/sprinklers/SprinklerUtils.py new file mode 100644 index 0000000..01cedd7 --- /dev/null +++ b/sprinklers/SprinklerUtils.py @@ -0,0 +1,76 @@ +from django.core.cache import cache +import RPi.GPIO as GPIO +from sprinklers.model import Sprinkler +from sprinklers.model import LogEntry + +# NUMBER OF STATIONS +num_stations = 16 + +# GPIO PIN DEFINES + +pin_sr_clk = 4 +pin_sr_noe = 17 +pin_sr_dat = 21 # NOTE: if you have a RPi rev.2, need to change this to 27 +pin_sr_lat = 22 + +def get_sprinkler(sprinkler_id): + sprinkler_id = int(sprinkler_id) + try: + sprinkler = Sprinkler.objects.get(id=sprinkler_id) + except Sprinkler.DoesNotExist: + return None + return sprinkler + +def enableShiftRegisterOutput(): + GPIO.output(pin_sr_noe, False) + +def disableShiftRegisterOutput(): + GPIO.output(pin_sr_noe, True) + +def setShiftRegister(values): + GPIO.output(pin_sr_clk, False) + GPIO.output(pin_sr_lat, False) + for s in range(0,num_stations): + GPIO.output(pin_sr_clk, False) + GPIO.output(pin_sr_dat, values[num_stations-1-s]) + GPIO.output(pin_sr_clk, True) + GPIO.output(pin_sr_lat, True) + +def setup(): + values = [0]*num_stations + + GPIO.cleanup() + # setup GPIO pins to interface with shift register + GPIO.setmode(GPIO.BCM) + GPIO.setup(pin_sr_clk, GPIO.OUT) + GPIO.setup(pin_sr_noe, GPIO.OUT) + disableShiftRegisterOutput() + GPIO.setup(pin_sr_dat, GPIO.OUT) + GPIO.setup(pin_sr_lat, GPIO.OUT) + + setShiftRegister(values) + enableShiftRegisterOutput() + +def turn_on(sprinkler_id): + values = [0]*num_stations + sprinkler = get_sprinkler(sprinkler_id) + + #Check if sprinkler is already on + if sprinkler.status == True: return "Sprinkler already on" + sprinkler.status = True + + #loop through all sprinklers and set them appropriately + for tmpSprinkler in Sprinkler.objects.all(): + #Check for masters + if tmpSprinkler.IsMaster: + values[tmpSprinkler.id] = 1 + else: + values[tmpSprinkler.id] tmpSprinkler.status + #Perform update on the HW + setShiftRegister(values): + + #Insert the log entry + new_log = LogEntry(sprinkler_id=sprinkler.id) + new_log.save() + sprinkler.currentLog = new_log + sprinkler.save() \ No newline at end of file diff --git a/sprinklers/SprinklerUtils.pyc b/sprinklers/SprinklerUtils.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe77e9695bf12cdd8aca54041931c845cddf3944 GIT binary patch literal 2496 zcmc&$O>ZMb5Uut{{E>v1-LNDGAtWw7*+^Vh2sT+(NZ^F_MvEeWHS1}TamF)dx@Xx) zyW$W|T=)t6CVmS)0N$&KKS0_GhhS$aRn^_o{i0WaPYwS+!{dL3 zi1BA66`313H)3elB(2G;F6VU}u1ngGc~j1t)o?@YEjizU4R=f8E%`;{ye)A{m5#)1 zRk{*)RN0oetICeV+p6qxpK*T&XGs3Sr*EKzCd4$FUb<0bcVLefMUq{muBcpXxW39S z9%rGrPI{crl?27bM|k|_5JBXX$c>TLBG-o!jLZ}i(9$pFwUKApJJR4tL$10~JQQOX zfbqAl435TEjsj&8_qX`UI`u4AJ!%U^{(R=9!Rx?<3xQ~kbLU5Sc>FT)AvE9^<(bo$ z>9Aj-nIv%_yp^L5Lsa=ayk!V2qif%S&{#Yz%KroBd)Plt{2PEWkxQV<3Sz!A%fIsI z|H|^M-B@P*<(Tz~dP17Pg5&QV32N#Mt6Ho&OhnNipt=qY$(!}uw({u5kLB5Vm&(U_ z?2~uI{I3Z2Vc3c_c@&?PtKldec5|3EaPJLDad)t&}l!i z2h{M~SzomuV6zYLcpgX0ZmnDEnfv&*C~IA_x~>T0h%-Nd0PR^xh-K~eazd3LPmCTk z3`|gXE7v-pmbK95)n^%C%RX!QYVABedf}Ad)3PXVf#Bj)ZtE(Ib>@DWr0`@(h?JmljC?4XZW$HfF?n1uw%pME7zE$hAJ9T_J HoxQ&Sc!ein literal 0 HcmV?d00001 diff --git a/sprinklers/views.py b/sprinklers/views.py index d8ca4ce..9e7186f 100644 --- a/sprinklers/views.py +++ b/sprinklers/views.py @@ -5,19 +5,13 @@ from django.template import Context, loader from sprinklers.models import Sprinkler from sprinklers.models import LogEntry -def get_sprinkler(sprinkler_id): - sprinkler_id = int(sprinkler_id) - try: - sprinkler = Sprinkler.objects.get(id=sprinkler_id) - except Sprinkler.DoesNotExist: - return None - return sprinkler +#from sprinklers import SprinklerUtils def index(request): return HttpResponse("Hello, world. You're at the sprinkler index.") def detail(request, sprinkler_id): - tmp_sprinkler = get_sprinkler(sprinkler_id) + tmp_sprinkler = SprinklerUtils.get_sprinkler(sprinkler_id) log_entries = [] #Retrieve all the log entries for this sprinkler @@ -34,16 +28,7 @@ def detail(request, sprinkler_id): return HttpResponse(template.render(context)) def on(request, sprinkler_id): - sprinkler = get_sprinkler(sprinkler_id) - #Check if sprinkler is already on - if sprinkler.status == True: return HttpResponse("Sprinkler already on") - sprinkler.status = True - - #Insert the log entry - new_log = LogEntry(sprinkler_id=sprinkler.id) - new_log.save() - sprinkler.currentLog = new_log - sprinkler.save() + SprinklerUtils.turn_on(sprinkler_id) return HttpResponse("Turning sprinkler on") diff --git a/sprinklers/views.pyc b/sprinklers/views.pyc index cb18f4daaee57c7c49a38665cd2b2e3c284c6096..5c84ed17b7fcfba76d0824e9d0c61536aed31d94 100644 GIT binary patch delta 796 zcmY*X&2G~`5T3Q2#C9Fp6dDLY5UCd*_z`b_#LtNsu>rx&N@K^hYu3m+sX$5rsfP+~ zl_jo7+&CcdB)kAGfy4_ivnf@uHQ$bR{=WI-uRFhcL;FwH|2F>ebOvXSMdv*-eR4Yd zXivi6^oMQ^tzYkbzT_x~86R!37TJ9={fPhp3IR(2#{!Nl$N-LPczX@dg2INvfrO&u zx8N8Ag2?5=;sWtD~83oj5%{xy7#d8sLrmd#R( z&j(2!PE-M^y&|2VMwVrsmzdVH8bF>HW)G@VM-@JNlWS~Z=Wd(Rq}zOUz6WMLvjwr) zJZW7~T*qdVy-d!!vVz)@khJ_H<)LvE(0hpBO*N~NpuhS_R7B}lI!4lZ9-^Z9Nwc292dOnHNW`I`0`YdNHk)n5Ns zX9E+uMPcm{fC%WlXhq>>^TDfkSOCdV$^pZOVb}!zyZ$!0TVhM}Ekeh$y`IKfEFDG=ID zVqehHWS%T|Eb2Lwt&tESAZl(61jj|lhJuU&w}6l)^h9|UCPfzMi*DFfQkfe(>4ZvE zc-%-s*+|vBw~S)?6Uu99!i^HrH1***Mu_6Czh1VuVky>MG2}=-{L`9gQ zCaS^~`Mmfstipr)k!WMU9mfm~c>)GPGcc$_v~SYh@>vp$#G(U+VKR*R2!^d;JOqr< zrbN(|Dp0pbfuW;Wq)HSq^MOHuNvi|KYSAiS+r&8yEb2Nmu(6o`O&7Onct}DnK%63w zH-k|5QG8=py^KAit{}$#R-AU+b8PV@ArQs`555gibtj5dn0e4WheiI_yj7UOtdbv^ zCzV-N^?6J#U$+*ACKeYBIVxK#8(`+<>n&Wt z<{1`D%$Ooal+798~~9;M1&