라즈베리 파이 출력 - lajeubeli pai chullyeog

라즈베리 파이의 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)

라즈베리 파이 출력 - lajeubeli pai chullyeog
라즈베리 파이 출력 - lajeubeli pai chullyeog

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;내부 pull-donw 방식(라즈베리파이 안에 저항o)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;외부 pull-downm 방식(격자로 빠져나감-저항o)

즉, 내부 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을 야기 가능