[ESP32 + Thonny] 02. MicroPython을 활용한 LED 제어
1. LED ON / OFF
마이크로컨트롤러가 소스 코드에 따라서 정상적으로 처리하는지 판단하는 방법은 다양하지만, 가장 직관적으로 확인할 수 있는 방법은 LED가 코드에 따라 정상적으로 잘 작동하는지 확인하는 것이다. 마이크로컨트롤러장치(ESP32)와 LED센서가 고장이 나지 않은 정상적인 상태라고 가정한다.
from machine import Pin #machine 모듈로부터 Pin을 사용하기 위하여 불러온다.
from time import sleep #시간 텀을 두기 위하여 time모듈로부터 sleep을 불러온다.
led = Pin(4, Pin.OUT) #led 센서를 4번 핀에 꽂았음을 명시하고, LED는 출력센서이기에 OUT으로 정의한다.
while True:
led.value(1) #LED에 신호를 보낸다. 0은 꺼진상태, 1은 켜진상태를 의미힌다. led.on() 으로도 제어할 수 있다.
sleep(0.5) #0.5초 혹은 50ms 대기
led.value(0) #LED를 꺼진 상태로 만든다
sleep(0.5)
#while문 내 밑에 처리하는 반복 코드를 다음처럼 작성할 수도 있다.
#while Treu:
# led.on()
# sleep(0.5)
# led.off()
# sleep(0.5)
2. PWM을 이용한 LED 제어
LED를 PWM을 활용하여 제어할 경우, LED를 정의할 때 freq도 추가하여 기술하여준다. 일반적으로 500 ~ 1000사이의 값을 활용하고, 값이 높을수록 부드러운 변화를 나타낼 수 있다.
PWM을 사용하지 않은 경우 on, off 혹은 value의 값 0과 1을 통해서 제어를 했으나, 이 경우 min, max의 밝기로만 나타나기 때문에 세밀한 밝기 조절을 위하여 PWM의 duty()를 사용한다.
변수명.duty(매개변수)로 사용할 수 있고, 매개변수의 값을 0 ~ 1023 사이의 값으로 설정하면 값에 따라 밝기가 변화한다.
0은 최저 밝기(off와 동일)
1023은 최대 밝기(on과 동일)
가. duty() 매개변수 값에 따른 밝기 변화 실습(1)
from machine import Pin, PWM
from time import sleep
led = PWM(Pin(4), freq = 1000)
while True:
led.duty(80) # 2의 10제곱의 수 0 ~ 1023 사이의 값 중 하나
나. duty함수의 매개변수 값에 따른 밝기 변화 실습(2)
from machine import Pin, PWM
from time import sleep
led = PWM(Pin(4), freq = 1000)
while True:
led.duty(0)
led.duty(1)
led.duty(2)
led.duty(3)
led.duty(4)
led.duty(5)
led.duty(6)
led.duty(7)
led.duty(8)
led.duty(9)
led.duty(10)
led.duty(11)
위 코드의 문제는 최저 밝기부터 최대 밝기까지 순차적으로 오를때 하나하나 모두 입력해야한다. 이를 보완하기 위해 for 반복문을 사용할 수 있다.
다. for 반복문을 활용한 LED PWM 밝기 제어(1)
from machine import Pin, PWM
from time import sleep
led = PWM(Pin(4), freq = 1000)
i = 0
while True:
for i in range(0, 1024):
led.duty(i)
sleep(0.001)
0 ~ 1023까지의 값을 변수 i에 저장하여 led의 밝기를 제어한다. 0부터 1023까지 값이 증가하면서 LED의 밝기가 밝아지며, i의 값이 변화할때 0.001초의 딜레이를 통해 밝아지는 속도를 제어할 수 있다.(sleep 함수의 매개변수 값이 0에 수렴할수록 빨라짐)
라. for 반목문을 활용한 LED PWM 밝기 제어(2)
from machine import Pin, PWM
from time import sleep
led = PWM(Pin(4), freq = 1000)
i = 0
while True:
for i in range(0, 1024):
led.duty(i)
sleep(0.001)
for i in range(1023, -1, -1):
led.duty(i)
sleep(0.001)
감소하는 반복문을 넣어줌으로써, 최대 밝기에 도달하고, 최대 밝기로부터 밝기가 점점 감소하는 코드이다.
첫번째 반복문에서 밝기의 값이 증가하며, 두번째 반복문에서 밝기의 값이 감소되며, 이 과정이 보드에 전압이 흐르는 동안 무한히 반복된다. 끝.
'Python > MicroPython' 카테고리의 다른 글
[ESP32 + Thonny] 06. 피지컬컴퓨팅 센서 톺아보기 (1) | 2024.11.13 |
---|---|
[ESP32 + Thonny] 05. MicroPython을 활용한 초음파 센서 제어 (0) | 2024.11.11 |
[ESP32 + Thonny] 04. MicroPython을 활용한 서보모터 제어 (0) | 2024.11.10 |
[ESP32 + Thonny] 03. MicroPython을 활용한 BUTTON(버튼) 제어(With. LED) (0) | 2024.11.09 |
[ESP32 + Thonny] 01. 기본 세팅(MicroPython 사용 및 제어) (1) | 2024.11.07 |