라즈베리 파이의 GPIO 개요
하나의 연결 단자를 입력이나 출력으로 고정시키지 않고, 소프트웨어로 제어하여 입력, 혹은 출력으로
선택적으로 사용할 수 있게 융통성을 높인 범용 입출력 단자
- 디지털 입출력
- 2x13(26) 헤더 핀 상의 GPIO 신호는 SPI, I2C, serial UART, 3.3V와 5V 전원을 포함
- B+모델을 써야 26 => 40Pin
- 아날로그 입력이 없으므로 별도의 I2C or SPI 버스 인터페이스를 갖는 ADC(analog-to-digital converter)가 필요함
- GPIO핀이 외부 장치를 구동할 때, 출력 핀당 3mA보다 큰 전류를 제공하지 않도록 권장
라즈베리 파이 보드 (3.3V 입출력) (high 출력=3.3V, Low 출력 =0V)
===>
5V입출력을 갖는 장치 (High 출력=5V, Low 출력 = 0V) 문제없음
5V입출력을 갖는 장치 (High 출력=5V, Low 출력 = 0V)
===>
라즈베리 파이 보드 (3.3V 입출력) (high 출력=3.3V, Low 출력 =0V) High 출력시 문제 존재
R = V/I (옴의 법칙)
핀번호 매기기
GPIO.setmode(GPIO.BCM)
연속 수행 시 "채널 사용 중 경고" 띄우지 않음
GPIO.setwarnings(False)
입출력 모드
<입력>
GPIO.setup(channel, GPIO.IN)
pull-up 혹은 pull-down 저항을 연결한 입력 모드 지정
GPIO.setup(channel, GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel, GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
<출력>
GPIO.setup(channel, GPIO.OUT)
출력 채널의 경우 초기값을 지정 가능
GPIO.setup(channel, GPIO.OUT,initial=GPIO.HIGH)
핀에서 값을 읽는(input) 동작
GPIO 핀의 해당 채널 상태 값을 읽고자 하는 경우
GPIO.input(channel)
==>
참 : True, 1, GPIO.HIGH
거짓 : False, 0, GPIO.LOW
GPIO 핀의 해당 채널의 값을 설정하고자 하는 경우
GPIO.output(channel, state)
state ==>
참 : True, 1, GPIO.HIGH
거짓 : False, 0, GPIO.LOW
리소스 비우기
GPIO.cleanup()
디지털 스위치
<3.3V 전원 사용>
1. pull-up 저항 사용
Switch=On (closed): Vin= LOW (0V)
Switch=Off (open) : Vin= HIGH (3.3V)
2. pull-down 저항 사용
Switch=On (closed): Vin= HIGH (3.3V)
Switch=Off (open) : Vin= LOW (0 V)
<5V 전원 사용>
5V 입력이 라즈베리 파이 보드에 직접 연결될 경우 보드가 파손
전압 분배법칙을 이용하여 저항을 이용하여 전력을 낮추고
1. pull-up 저항 방식 : 10k옴과 5 k옴 저항을 사용한 전압 분배 사용 (사용 불가)
Switch=On (closed): VGPIO= LOW (1.6V)
Switch=Off (open) : VGPIO= HIGH (5 V)
==> 말이 안됨
2. pull-down 저항 방식 : 10k옴과 5 k옴 저항을 사용한 전압 분배 사용 (OK)
Switch=On (closed): VGPIO= HIGH (3.3V)
Switch=Off (open) : VGPIO= LOW (0 V)
즉, 내부 pull-down을 써줄려면 라즈베리파이 안에 저항이 있기 때문에
GPIO.setup(channel, GPIO.IN,pull_up_down=GPIO.PUD_DOWN) 해줘야함.
외부 pull-down은 저항이 달려있기 때문에
GPIO.setup(channel, GPIO.IN)만 해줘도됨.
PWM 사용 방법
PWM(Pulse Width Modulation, 펄스 폭 변조)
일정한 주기 내에서 Duty비를 변화 시켜서 평균 전압을 제어하는 방법
PWM instance를 생성하는 명령
p = GPIO.PWM(channel, frequency)
PWM을 시작하는 명령
p.start(dc) # dc : duty cycle (0.0 <= dc <= 100.0)
주파수를 변경하는 명령
p.ChangeFrequency(freq) # freq : 주파수 ( Hz )
Duty cycle을 변경시키는 명령
p.ChangeDutyCycle(dc) # 0.0 <= dc <= 100.0
PWM을 중지시키는 명령
p.stop()
Multi-Threading
Thread
프로그램이 아니어서 홀로 실행할 수 없으며 프로그램 내에서만 실행 가능
장점
- files과 networking과 같은 여러 개의 resources를 사용하는 program의 속도 개선 가능
단점
- resource sharing problem을 야기 가능
'수업정리 > 임베디드 시스템' 카테고리의 다른 글
라즈베리파이 OpenCV (0) | 2020.12.09 |
---|---|
LAMP (0) | 2020.12.09 |
단위 표시 (0) | 2020.12.09 |
Docker를 이용하여 NginX 웹 서버 작동 (0) | 2020.09.18 |
AWS Lightsail 인스턴스 생성 및 접속 (0) | 2020.09.15 |