라즈베리 파이의 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)
2. pull-down 저항 사용 Switch=On (closed): Vin= HIGH (3.3V) <5V 전원 사용> 5V 입력이 라즈베리 파이 보드에 직접 연결될 경우 보드가 파손 전압 분배법칙을 이용하여 저항을 이용하여 전력을 낮추고 1. pull-up 저항 방식 : 10k옴과 5 k옴 저항을 사용한 전압 분배 사용 (사용 불가) Switch=On (closed): VGPIO= LOW (1.6V) ==> 말이 안됨 2. pull-down 저항 방식 : 10k옴과 5 k옴 저항을 사용한 전압 분배 사용 (OK) Switch=On (closed): VGPIO= HIGH (3.3V) 내부 pull-donw 방식(라즈베리파이 안에 저항o) 외부 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-ThreadingThread 프로그램이 아니어서 홀로 실행할 수 없으며 프로그램 내에서만 실행 가능 장점 |