Last active
November 2, 2018 10:24
-
-
Save li2hub/eaae587c27e50220819689e3ac8e2f49 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import RPi.GPIO as GPIO | |
from flask import Flask, render_template, request | |
app = Flask(__name__) | |
GPIO.setmode(GPIO.BOARD) | |
# Create a dictionary called pins to store the pin number, name, and pin state: | |
pins = { | |
7 : {'name' : 'GPIO 4', 'state' : GPIO.LOW}, | |
12 : {'name' : 'GPIO 18', 'state' : GPIO.LOW} | |
} | |
# Set each pin as an output and make it low: | |
for pin in pins: | |
GPIO.setup(pin, GPIO.OUT) | |
GPIO.output(pin, GPIO.LOW) | |
@app.route("/") | |
def main(): | |
# For each pin, read the pin state and store it in the pins dictionary: | |
for pin in pins: | |
pins[pin]['state'] = GPIO.input(pin) | |
# Put the pin dictionary into the template data dictionary: | |
templateData = { | |
'pins' : pins | |
} | |
# Pass the template data into the template main.html and return it to the user | |
return render_template('main.html', **templateData) | |
# The function below is executed when someone requests a URL with the pin number and action in it: | |
@app.route("/<changePin>/<action>") | |
def action(changePin, action): | |
# Convert the pin from the URL into an integer: | |
changePin = int(changePin) | |
# Get the device name for the pin being changed: | |
deviceName = pins[changePin]['name'] | |
# If the action part of the URL is "on," execute the code indented below: | |
if action == "on": | |
# Set the pin high: | |
GPIO.output(changePin, GPIO.HIGH) | |
# Save the status message to be passed into the template: | |
message = "Turned " + deviceName + " on." | |
if action == "off": | |
GPIO.output(changePin, GPIO.LOW) | |
message = "Turned " + deviceName + " off." | |
# For each pin, read the pin state and store it in the pins dictionary: | |
for pin in pins: | |
pins[pin]['state'] = GPIO.input(pin) | |
# Along with the pin dictionary, put the message into the template data dictionary: | |
templateData = { | |
'pins' : pins | |
} | |
return render_template('main.html', **templateData) | |
if __name__ == "__main__": | |
app.run(host='0.0.0.0', port=5000, debug=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment