committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 108 additions and 0 deletions
@ -0,0 +1,108 @@ |
|||
# Python Script To Control Garage Door |
|||
|
|||
# Load libraries |
|||
import RPi.GPIO as GPIO |
|||
import time |
|||
from bottle import route, run, post, request |
|||
|
|||
# Set up the GPIO pins |
|||
GPIO.setwarnings(False) |
|||
GPIO.setmode(GPIO.BOARD) |
|||
PIN_TRIG = 40 |
|||
PIN_ECHO = 38 |
|||
GPIO.setup(7, GPIO.OUT) |
|||
GPIO.setup(11, GPIO.OUT) |
|||
GPIO.output(7, True) |
|||
GPIO.output(11, True) |
|||
|
|||
#define variables |
|||
fresh_login = True |
|||
pswd = '0723' |
|||
|
|||
#Define check_login (function that checks if password is correct by comparing it to the correct one) |
|||
def check_login(password): |
|||
if password == pswd: |
|||
return True |
|||
else: |
|||
return False |
|||
|
|||
#Create the login form (html) |
|||
@route('/login') #http://servername/login |
|||
def login(): |
|||
#Making fresh_login true when new form is created |
|||
|
|||
global fresh_login #make fresh_login a global variable |
|||
fresh_login = True |
|||
#Create the html form |
|||
return ''' |
|||
<form action="/login" method="post"> |
|||
Password: <input name="password" type="password" /> |
|||
<input value="Open" type="submit" /> |
|||
</form> |
|||
''' |
|||
|
|||
#Receive and check login info |
|||
@route('/login', method='POST') |
|||
def do_login(): |
|||
global fresh_login #make fresh_login global from inside function do_login |
|||
password = request.forms.get('password') #request password from form created in login |
|||
#Making sure the login is fresh |
|||
if fresh_login == True: |
|||
fresh_login = False #make fresh login false so page reload doesn't cause garage to re-open (a variable that takes place of a cookie, but clears on webpage closing) |
|||
if check_login(password): #cycle the gpio to open garage if passwords match |
|||
GPIO.output(7, False) |
|||
time.sleep(.8) |
|||
GPIO.output(7, True) |
|||
return "<p>Opening Garage Door One.</p>" #confirm that garage is opening |
|||
else: |
|||
return "<p>Incorrect Password.</p>" #tell them to go away if password is incorrect |
|||
else: |
|||
return "<p>Please restart your browser</p>" #this triggers if fresh_login was false when the function ran, telling you to restart your browser/webpage to clear the fresh_login variable |
|||
|
|||
#Create the login form (html) for the sensor page |
|||
@route('/sensor') #http://servername/sensor |
|||
def sensor(): |
|||
#Create the html form |
|||
return ''' |
|||
<form action="/sensor" method="post"> |
|||
Password: <input name="password" type="password" /> |
|||
<input value="Authorize" type="submit" /> |
|||
</form> |
|||
''' |
|||
|
|||
#Create the sensor page (html) |
|||
@route('/sensor', method='POST') #http://servername/sensor |
|||
def do_sensor(): |
|||
password = request.forms.get('password') #request password from form created in login |
|||
if check_login(password): #Continue to the sensor reading if the password is correct |
|||
GPIO.setup(PIN_TRIG, GPIO.OUT) #Setup the gpio trigger pin as input |
|||
GPIO.setup(PIN_ECHO, GPIO.IN) #Setup the gpio echo pin as output |
|||
|
|||
time.sleep(2) #Wait for 2 seconds for sensor to settle |
|||
|
|||
GPIO.output(PIN_TRIG, GPIO.LOW) #Set trigger to low |
|||
|
|||
GPIO.output(PIN_TRIG, GPIO.HIGH) #Set trigger to high |
|||
|
|||
time.sleep(0.00001) #Wait for 0.1 milliseconds before setting to low again |
|||
|
|||
GPIO.output(PIN_TRIG, GPIO.LOW) #Set trigger to low again |
|||
|
|||
while GPIO.input(PIN_ECHO)==0: |
|||
pulse_start_time = time.time() #Set the start time of when the waves are emitted by the sensor |
|||
while GPIO.input(PIN_ECHO)==1: |
|||
pulse_end_time = time.time() #Record the time the waves traveled back to the sensor |
|||
pulse_duration = pulse_end_time - pulse_start_time #Calculate how long it took for the round trip of the waves |
|||
distance = round(pulse_duration * 17150, 2) #Convert the time it took to centimeters and round to 2 decimals |
|||
|
|||
if distance >= 80: #Check if the distance is less than 80cm (This will depend on the garage) |
|||
return '<p>The garage is closed.</p>' |
|||
else: |
|||
return '<p>The garage is open.</p>' |
|||
else: |
|||
return '<p>Sorry, the password entered was incorrect</p>' #Don't allow access if password isn't correct |
|||
|
|||
#Run the bottle.py server |
|||
run(host='0.0.0.0', port=1234) |
|||
|
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue