아두이노프로세싱 프로그래밍

BCM 넘버링과 무한 반복 명령 while True:를 사용하는 라즈베리 파이3 파이선 LED ON OFF 코딩

coding art 2017. 5. 24. 19:15
728x90


지난번 블로그에서는 라즈베리파이 3에서 GPIO를 BOARD 넘버링에 의해 LED를 on OFF 하였다.

동일한 라즈베리 파이 3 배선을 가지고 BCM 넘버링을 적용해서 파이선 코드를 수정해 보도록 하자. BCM 넘버링은 브로드컴 칩 BCM2835 칩 사용에서 유래된 듯한데 NodeMCU 에서도 마찬가지였지만 그 순서가 들쭉날쭉하여 배선 수가 증가할 경우 골치 아픈 측면이 있을 수 있다.

즉 배선 측면에서 보면 BOARD 넘버링이 쓰기 편한 방식으로 보인다.

지난 번 BOARD 넘버링 방식에서 LED 의 양극을  220옴 저항을 통해 GPIO 17번 즉 Pin# 11번에 연결하고 다음과 같이 코딩하였다.



GPIO.setmode(BOARD)
GPIO.setmode(11,GPIO.OUT)


여기서 BOPARD를 BCM 으로 바꾸도록 한다.


GPIO.setmode(BCM)
GPIO.setmode(17,GPIO.OUT)


BCM 넘버링에 의하면 BOARD 넘버 11 은 17번으로 바뀐다.
마찬가지로 코드 전체에서 11번을 17번으로 바꾸도록 하자.

아울러 지난번 코딩에서는 for loop 방식에 의해서 21회 LED를 on OFF 하였으나 이번에는 라즈베리파이 파이선에서 무한 반복 loop() 에 해당하는 while True: 문으로 대체하기로 한다.

다음과 같이 Python 3(IDLE)에서 LED를 on OFF 코딩을 해보자.

코딩 첫 부분은 Processing 과 유사하게 라이브러리를 불러 들리는 구조이다. RPI.GPIO는 라즈베리 GPIO를 지원하는 라이브러리이고 time은 일종의 타이머를 지원하는 라이브러리이다.

time은 아두이노의 delay() 명령과 거의 유사한 sleep() 명령을 지원한다.


GPIO.setmode(GPIO,BCM)은 GPIO 번호를 BCM 방식으로 지정하며 핀 배치도를 참조하기 바란다. 예제에서는 GPIO 11번에 해당하는 BCM 17번을 지정 사용하였다.
GPIO.setwarnings(False)는 없어도 실행은 되지만 일종의 파이선으로 부터의 경고 사인이다.
 
GPIO.setup()은 아두이노의 setup() 문 내에서 흔히 사용되는 pinMode() 명령에 해당되며, GPIO.OUT은 지정된 디지털 핀을 출력 모드로 설정한다.

라즈베리파이 파이선에서 무한 반복 loop() 에 해당하는 while True: 문으로 대체한다. 주의할 점은 while 은 소문자 처리하고 True 의 T는 대문자 아울러 아두이노의 세미콜론 ; 대신 콜론 : 을 사용한다.

Run 탭을 눌러 메뉴에서 Run Module을 클릭하면 코드가 실행된다. 작업 수행이 끝나면 GPIO 설정했던 부분을 원상회복 하도록 클린업 시킨다.

이번 코드도 대단히 짧으므로 지난번 코드를 직접 수정 입력해 보기 바란다.

라즈베리 파이3 파이선 코딩에서 아두이노에 의한 LED on OFF 와 그다지 큰 차이점은 없어 보인다. 아울러 파이선 2에서 코드를 실행해도 동일한 결과를 얻을 수 있다.

무한 반복 loop()를 빠져 나오기 위해서는 CONTROL C 를 입력한다.