[Raspi] GPIO 통신 연습문제
# Q1. GPIO.output(5, True)
핀 5번으로 true의 값을 송신
# Q2. GPIO.cleanup()의 필요성
GPIO 핀의 상태를 리셋시킨다.
만약 이 명령어를 사용하지 않으면, GPIO 핀은 마지막 작업한 상태로 남아있는다.
# Q3. 라즈베리파이의 GPIO는 몇 개인가?
라즈베리파이의 GPIO는 총 26개(GPIO 2~27)이다.
전체 핀의 개수는 40개이다.
* 자주 사용하게 될 것 같은 포트 BOARD number
1: 3V / 9: Ground / 10, 11, 12, 13 : 일반 GPIO
# Q4. GPIO.setmode(GPIO.BCM)과 GPIO.setmode(GPIO.BOARD)의 차이점은?
BCM : BMC 핀 번호를 사용
BOARD : 물리적 핀 번호를 사용 > 주로 사용하는 것!
# Q5. 라즈베리파이의 GPIO 포트의 최대 허용전압과 전류는?
GPIO 모든 핀에 3.3V의 전원을 사용해서 입출력 신호로 사용할 수 있다.
라즈베리파이의 GPIO 포트 전원은 micro-USB 단자를 통해 5V 전원을 제공하지만 내부 동작은 3.3V를 기반으로 하고 있다.
따라서 GPIO 포트에 5V의 전압이 흐를 경우 과전압으로 인해 포트 또는 보드가 손상될 수 있다. 각 GPIO 핀당 3.3V/50mA의 최대 허용 전원 이내에서 사용할 것을 권장한다.
# Q6. 그 외 함수
1. wait_for_edge() 함수
high에서 low 또는 low에서 high로 상태가 변하는 것을 감지
– rising-edge: low > high
– falling-edge: high > low
* 특정 시간 동안 감지하려면 timeout 옵션을 사용
channel = GPIO.wait_for_edge(26, GPIO.RISING, timeout=5000)
2. add_event_detect() / event_detected() 함수
add_event_detect() : 채널을 이벤트에 등록하는 함수
ex. GPIO.RISING으로 등록하면 low에서 high로 변경될 때를 감지
event_detected() : 채널의 상태가 변하는지 감지하는 이벤트 함수
GPIO.add_event_detect(26, GPIO.RISING) # 26번 채널의 rising을 이벤트에 등록
GPIO.event_detected(26) # 26번 채널의 이벤트 감지
3. 콜백 함수
이벤트 등록 시 callback 함수를 지정하면 이벤트가 감지될 때 콜백함수가 실행된다.
GPIO.add_event_detect(26, GPIO.RISING, callback=myfunction)
def myfunction():
print("status: Rising_edge")
4. remove_event_detect 함수
이벤트 감지가 더 이상 필요하지 않은 경우, 이벤트 감지 기능 제거
GPIO.remove_event_detect(26)
해당 내용은 <내가 하는 사물인터넷 프로그래밍 1: 라즈베리 파이 파이썬 편>을 참고하여 작성하였습니다.