from flask import Flask
app = Flask(__name__)
@app.route("/")
def helloworld():
return "Hello World"
if __name__ == "__main__": // import 된게 아니라 main 으로 실행될때
app.run(host="0.0.0.0")
cf) __name__ 속성은 각 파일이 들고 있는데 각 파일이 import 되지 않고 main(진입점) 으로 시작 된다면 __name__ 은 __main__ 값을 갖는다.
즉 if 문은 파일이 main 으로 실행 되었을때 실행 되는 코드이다.
web 주소에 ip 주소를 치면 라즈베리 파이로 만든 웹 서버로 접속 가능하다.
포트 번호는 기본적으로 5000 번이다.
web 서버를 통한 LED 제어
회로 구축
GPIO 14 번 핀을 이용 해서 LED 제어
#!/usr/bin/python
#-*- coding:utf-8 -*-
from flask import Flask # flask 디렉토리에서 Flask 파일 불러옴
import RPi.GPIO as GPIO
LED_PIN = 14
LED_STATE = GPIO.LOW
OBJECT_FLASK = Flask(__name__) #Flask 객체 생성 (Flask 는 클래스임)
def Init_LED():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)
@OBJECT_FLASK.route("/") #데코레이터
def Start_Main():
global LED_STATE
LED_STATE = not LED_STATE // LED 토글
GPIO.output(LED_PIN, LED_STATE)
return "강사컴 LED ON/OFF"
if __name__ == "__main__":
Init_LED()
OBJECT_FLASK.run(host="0.0.0.0")
web 에 접솔할때 마다 LED 가 켜졌다가 꺼졋다가 한다.
정적 라우팅
#!/usr/bin/python
#-*- coding:utf-8 -*-
from flask import Flask
import RPi.GPIO as GPIO
LED_PIN = 14
OBJECT_FLASK = Flask(__name__)
def Init_LED():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)
@OBJECT_FLASK.route("/")
def Start_Main():
return "<h1>스마트 팩토리</h1>"
###################################
@OBJECT_FLASK.route("/led/on")
def LED_on():
GPIO.output(LED_PIN,GPIO.HIGH)
return " 스마트 팩토리 LED ON"
###################################
@OBJECT_FLASK.route("/led/off")
def LED_off():
GPIO.output(LED_PIN,GPIO.LOW)
return "스마트 팩토리 LED OFF"
###################################
if __name__ == "__main__":
Init_LED()
OBJECT_FLASK.run(host="0.0.0.0")
GPIO.cleanup()
print("Flask 종료")
접근 주소를 led/on 하면 전구가 켜지고 led/off 하면 전구가 꺼진다.
<> 활용 라우팅
아래의 코드에서 처럼 <> 를 사용해서 routing 할 변수를 선언 할 수 있다.
#!/usr/bin/python
#-*- coding:utf-8 -*-
from flask import Flask
import RPi.GPIO as GPIO
LED_PIN = 14
OBJECT_FLASK = Flask(__name__)
def Init_LED():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)
@OBJECT_FLASK.route("/")
def Start_Main():
return "<h1>스마트 팩토리</h1>"
###################################
@OBJECT_FLASK.route("/led/<State>")
def LED_on_off(State):
if State == "on":
GPIO.output(LED_PIN,GPIO.HIGH)
if State == "off":
GPIO.output(LED_PIN,GPIO.LOW)
return "<h1> LED " + State +"</h1>"
###################################
if __name__ == "__main__":
Init_LED()
OBJECT_FLASK.run(host="0.0.0.0")
GPIO.cleanup()
print("Flask 종료")
쿼리 스트링 방식 라우팅
request 를 사용한다.
#!/usr/bin/python
#-*- coding:utf-8 -*-
from flask import Flask
from flask import request
import RPi.GPIO as GPIO
LED_PIN = 14
OBJECT_FLASK = Flask(__name__)
def Init_LED():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)
@OBJECT_FLASK.route("/")
def Start_Main():
return "<h1>스마트 팩토리</h1>"
###################################
@OBJECT_FLASK.route("/led")
def LED_on_off():
State = request.args.get("state")
if State == "on":
GPIO.output(LED_PIN,GPIO.HIGH)
elif State == "off":
GPIO.output(LED_PIN,GPIO.LOW)
elif State == "error":
State = State + "에러 1"
else:
State = "에러 2"
return "<h1> LED " + State +"</h1>"
###################################
if __name__ == "__main__":
Init_LED()
OBJECT_FLASK.run(host="0.0.0.0")
GPIO.cleanup()
print("Flask 종료")
'공부,일 > 라즈베리 파이' 카테고리의 다른 글
TCP/IP 4 Layer 설명 (0) | 2021.08.13 |
---|---|
Flask, HTML,CSS,Javascript 활용하기 (0) | 2021.08.12 |
PWM 제어 (0) | 2021.08.12 |
라즈베리 파이 polling , 이벤트 방식 전압 감지 (0) | 2021.08.11 |
라즈베리 파이 하드웨어 기본 (0) | 2021.08.11 |
댓글