와이파이에 의한 라즈베리 파이 3 LED ON OFF 파이선 3 코딩
라즈베리에서 플라스크 모듈 지원하에 와이파이 코딩은 디렉토리 설정을 비롯하여 약간 입체적인 준비가 필요하다.
필요한 예제 코딩과 절차에 관해서는 곧 출간 준비중인 종이 책 "라즈베리 와이파이 코딩"을 참고하기 바란다
weblamp.py
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
# Create a dictionary called pins to store
# the pin number, name, and pin state:
pins = {
17 : {'name' : 'coffee maker', 'state' : GPIO.LOW},
7 : {'name' : 'lamp', 'state' : GPIO.LOW}
}
# Set each pin as an output and make it low:
for pin in pins:
GPIO.setwarnings(False)
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 response(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."
if action == "toggle":
# Read the pin and set it to whatever it isn't (that is, toggle it):
GPIO.output(changePin, not GPIO.input(changePin))
message = "Toggled " + deviceName + "."
# 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 = {
'message' : message,
'pins' : pins
}
return render_template('main.html', **templateData)
if __name__ == "__main__":
app.run(host = '0.0.0.0', port = 5000, debug = True)
weblamp.html
<!DOCTYPE html> | |
<head> | |
<title>Current Status</title> | |
</head> | |
<body> | |
<h1>Device Listing and Status</h1> | |
{% for pin in pins %} | |
<p>The {{ pins[pin].name }} | |
{% if pins[pin].state == true %} | |
is currently on (<a href="/{{pin}}/off">turn off</a>) | |
{% else %} | |
is currently off (<a href="/{{pin}}/on">turn on</a>) | |
{% endif %} | |
</p> | |
{% endfor %} | |
{% if message %} | |
<h2>{{ message }}</h2> | |
{% endif %} | |
</body> | |
</html> | |