아두이노프로세싱 프로그래밍

와이파이에 의한 라즈베리 파이 3 LED ON OFF 파이선 3 코딩

coding art 2017. 7. 5. 11:18
728x90

라즈베리에서 플라스크 모듈 지원하에 와이파이 코딩은 디렉토리 설정을 비롯하여 약간 입체적인 준비가 필요하다.

필요한 예제 코딩과 절차에 관해서는 곧 출간 준비중인 종이 책 "라즈베리 와이파이 코딩"을 참고하기 바란다











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>