[Raspberry Pi] 라즈베리파이 7. LED 제어, PWM 제어, Flask
LED가 생겼다!!!
라즈베리파이는 보통 3.3V, 5V를 줄 수 있다. 보통 발광다이오드의 일반 전류와 최대 전류는 아래의 표와 같다.
(출처 : https://opentutorials.org/module/779/7087)
옴의 법칙인 V = I R 식으로인해서 전압은 3.3V, 5V 전류는 20mA, 50mA로 계산해서 적당한 저항의 값을 계산해보면 아래의 표와 같다.
전압 3.3V를 쓸때는 66~165옴의 저항을 써야하고, 전압 5V일때는 100~250옴의 저항을 사용해줘야 LED를 불편함없이 쓸 수 있다.
GPIO(General Pupose Input Output)는 S/W의 기능을 사용자에 맞게 바꿀 수 있는 것을 뜻한다.
GPIO의 Pin을 코드로 작성해서 제어해보자.
$ cp gpio.py gpio_led.py
$ vi gpio_led.py
회로구성
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
for i in range(10):
GPIO.output(21,1) # GPIO 21번 Pin을 High(3.3V)로 만들어라
print('High!!!')
time.sleep(1)
GPIO.output(21,0) # GPIO 21번 Pin을 Low(0V)로 만들어라
print('Low~~~')
time.sleep(1)
GPIO.cleanup()
$ python3 gpio_led.py 로 실행하면 high, low신호가 10번씩 뜬다
이때, time.sleep을 1초에서 0.05로 아주 빠르게 껐다켰다 바꿔주면 계속 켜지는 것처럼 볼 수 있는데, 잔상효과때문에 그런 것이다. LED가 꺼지는데도 시간이 걸리는데 꺼지는 시간이 오기전에 이미 켜버렸기때문에 계속 켜져있는 것처럼 우리가 보는 것이다.
PWM 제어
PWM(Pulse Width Modulation) 제어는 주기적으로 반복되는 ON OFF 신호를 통해서 모터, 팬의 속도, LED 밝기 등을 제어 할 수 있다. 반복되는 Pulse 신호의 주기에서 ON 신호가 지속되는 시간의 비율을 Duty Cycle 이라고하며, 이 듀티비가 클수록 팬속도가 LED의 밝기가 커진다.
회로는 위의 예제 그대로 쓰고, 코드를 바꿔준다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
p = GPIO.PWM(21, 50)
p.start(0)
try:
while 1:
for dc in range(0, 101, 5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100, -1, -5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()
Flask
Flask는 Python으로 구성된 웹 어플리케이션 프레임워크이다. Django 프레임워크보다 가볍고, 스케일이 작기 때문에 작은 서버부터 스케일이 큰 서버를 만들 수가 있다.
Flask 설치 확인
보통 최신 라즈베리파이를 설치했으면 Flask도 자동으로 설치되어있다.
$cd usr/bin 으로 이동해서 $ python 을 실행해서 파이썬 모드로 들어간다.
>>> from flask import Flask 를 입력해서 Flask의 설치 유무를 확인할 수 있다.
현재 python의 버전을 확인해보자.
이 파이썬 명령어가 어느 디렉터리에 있는지 확인하기위해 which 명령어를 실행해보자.
/usr/bin 디렉터리에서 python 명령어가 어떤게 있는지 확인할수도 있다.
맨앞에 l로 되있는게 링크를 뜻한다.
연두색으로 색깔이 다른 부분은 그 링크로 이동된다는 뜻이다.
python은 python2로 이동하기때문에 본진은 python2이다.
python3은 python3.7로 이동하기때문에 본진은 python3.7이다.
python3을 python으로 변경
$ sudo ln -s python3 python
디렉터리를 만들고 파일을 vi편집기로 생성하고 코드를 저장해보자.
$ mkdir -p webapps/ch06/helloworld
디렉터리 생성 후, app_start.py 를 vi편집기로 편집하고 밑의 코드를 저장하고 빠져나온다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def helloworld():
return "Hello World"
if __name__ == "__main__":
app.run(host="0.0.0.0")
$ python app_start.py
를 실행해두고 인터넷 사이트에서 '본인 라즈베리파이 IP : 5000' 을 링크에 입력해주면 저장한 return 값이 뜬다.
명령어를 끝내려면 컨트롤 C로 종료하면 된다.(인터넷창은 그냥 닫으면 된다)
이번엔 사이트에 접속하고, 다른 사이트에 접속했을때(예를들면 그 사이트에서 이동했을때, 게시물이나 다른 무언가를 클릭했을때 연결되는 사이트) 출력을 설정해보자.
먼저, cp 명령어로 app_strat2.py 파일을 복사하면서 만들어준다.
vi 편집기에서 /Test일때 return값을 입력해준다.
python 명령어로 실행해보자
vi편집기에서 print와 메서드를 추가해서 입력해줄수도있다.
위의 LED 제어와 Flask를 섞어서 예제를 만들어보자.
데코레이션 on에 접속하면 켜지고, off에 접속하면 꺼지도록 프로그램 만들어보기
사이트에 접속했을때 화면
사이트에서 /on 으로 접속했을때 LED가 켜진다
'개발자과정준비 > 라즈베리파이(Raspberry Pi)' 카테고리의 다른 글
[Raspberry Pi] 9. Process, Cron, Daemon (0) | 2020.07.30 |
---|---|
[Raspberry Pi] 8. Flask 제어와 웹으로 라즈베리파이 제어 (1) | 2020.07.29 |
[Raspberry Pi] 라즈베리파이 와이파이 연결 끊길때 해결 방법 (0) | 2020.07.27 |
[Raspberry Pi] 7. 풀업저항 신호를 PuTTY로 출력해보자 (0) | 2020.07.27 |
[Raspberry Pi] 6. git clone, apt-get, 파일 압축, gzip, .tar (0) | 2020.07.26 |