2. Processing GPIO에 의한 LED ON OFF

codingart(66)
Published in
#kr
Words
555
Reading
3 min
Listen
Play
8y

Processing은 아두이노와 함께 취미 코딩을 위한 그래픽 및 인터페이스 지원 기능이 뛰어난 소프트웨어이다. 아울러 HTTP 와이파이도 지원하기 때문에 사물인터넷 코딩에도 큰 도움이 된다. 올해 들어 라즈베리 파이3 B/B+ 용 버전을 선보였는데 정말 Hobbiest들 마음에 쏙들게 라즈베리 보드의 GPIO 라이브러리를 지원하네요. 아울러 PiCamera와 별도로 Processing 카메라 기능도 지원이 된다고 하니 앞으로 시간을 쪼개서라도 투자해 볼까 합니다.

Processing Install

라즈베리 파이 보드3 B/B+에서도 뛰어난 그래픽 성능과 봐줄만한 사물인터넷 성능의 Processing 설치가 가능하다. 최근에 라즈베라 파이 보드를 구매해서 Steretch 버전을 설치하면 Processing이 이미 설치되어 있을 수도 있다.

Processing 홈 페이지 www.processing.org에 Processing 다운로드 설치 과정이 안내 되어 있으나 체크본 바 바로 앞서 언급한 Processing이 이미 설치된 최신 라즈베리 파이 버전 이미지 설치 작업임에 유의하기 바란다.

noname01.png

이 화면을 자세히 보면 상단 탭 마지막에 Processing for Pi 가 등장해 있음을 알 수 있다. 이 코너가 생긴지 그리 오래 되지는 않은 듯하다. 일단 라즈베리 파이3 B/B+ 보드에 Processing을 설치하기 위해서는 Download 또는 〉〉Download Processing을 클릭하도록 하자. 어느 것을 눌러도 같은 주소로 가게 되어 있다.

noname02.png

라즈베리 파이가 물론 Linux 이지만 정상적인 데스크 탑이나 노트북은 아니므로ARM 버전이나 32버전을 기웃거리지 말고 별도로 (running on Pi?) 로 박스친 곳을 클릭하도록 하자.

다음 화면에 보면 결국 Processing for Pi 탭을 누르면 한방에 올 수도 있겠으나 어느 버튼을 눌러도 이곳으로 낚이게끔 웹이 네트워킹이 되어 있다.

noname03.png

이 페이지에서 Download를 클릭 하면 진짜 Processing 설치 화면으로 넘어가는데 그 내용이 Processing 소스를 다운받아 설치하는 것이 아니라 Processing이 이미 포함되어 설치된 라즈베리 Stretch 버전 이미지를 다운받아 설치하는 과정임을 참조하기 바란다.

noname04.png

GPIO

윈도우즈 PC용 Processing 에서는 GPIO 프로그래밍에 관한 부분이 없으며 이는 라즈베리 파이 보드에 커스터마이즈 된 기능이다. 즉 싱글 보드 컴퓨터인 라즈베리 파이 보드를 가지고 놀기 위해서는 보드 측면에 제공되는 40개의 핀 중 28개가 디지털 제어가 가능한 GPIO 인터페이스 핀들인데, 아두이노에서 0∼13번까지 제공되는 디지털 핀들과 그 사용법이 매우 흡사하다. 한편 라즈베리 파이 자체적으로 이미 RPi.GPIO 라이브러리 모듈을 설치하여 파이선에서 이 디지털 핀들을 제어 할 수 있었다. 하지만 Processing은 라즈베리 파이선과는 아무런 관련이 없다.

GPIO LED 배선

연속적으로 LED ON OFF를 위한 배선은 다음 사진과 같이 처리한다. LED 는 배선 이전에 다리 길이가 긴 쪽이 양극이다. 음극 쪽 다리는 220Ω 전류제한저항과 직렬 연결하여 이 배선에 흐르는 전류가 최대 20mA를 넘지 않도록 해야하는데 LED 자체도 순간 저항 값이 있으므로 대체로 10mA 이하의 안전한 범위의 전류가 흐르게 된다. 다리 핀 번호 16번은 라즈베리 파이선 기준으로 BCM 넘버링에 해당하면 Processing 의 GPIO 번호로 통용된다. BCM 번호는 0∼27번까지 총 28개의 핀을 지정한다.

noname05.png

Processing GPIO 코딩

Processing에서 GPIO를 사용할 수 있도록 processing.io.* 라이브러리를 불러들이고 ledON 불리언 변수를 선언한다.

noname04.png

나머지 코딩 구조는 아두이노와 유사하게 setup() 과 draw() 로 구성된다. BCM 넘버로 16번 핀을 출력(OUTPUT) 모드로 설정하자. frameRate(0.5) 는 그래픽 스크린의 이미지를 1초에 두 번 refresh 한다는 의미이다.

noname06.png

Processing에서 draw()는 아두이노의 loop()와 유사한 기능을 한다.
draw()에서 초기 값이 거짓(false)인 불리언 ledOn 값을 반대인 참(true) 로 취한다.
ledOn이 참이면 GPIO.digitalWrite(16, GPIO.LOW)를 실행한다.
fill(204) 는 도형을 회색으로 착색시키며 반면에 fill(0,0,255)는 청색이다.

noname07.png

draw()를 한 사이클 돌면 ledOn의 불리언 값이 거짓이 되므로 else 이하의
GPIO.digitalWrite(16, GPIO.HIGH)를 실행하여 LED를 ON 시키고 청색으로 착색한다.

stroke(255,0,0)은 도형의 경계를 빨간색으로 착색한다.
ellipse(width/2, height/2, width0.75, height0.75) 는 타원 명령으로서 중심을 그래픽 화면 폭의 50% 높이의 50%를 잡고 타원의 장축길이를 폭의 75% 단축 길이를 높이의 50% 로 취한다. 두 값이 같으면 원이 그려진다.

첨부된 Processing 코드를 다운 받아 실행해 보자.

#GPIO_LED_BLINK_01
import processing.io.*;
boolean ledOn = false;

void setup() {
GPIO.pinMode(16, GPIO.OUTPUT);
frameRate(0.5);
}

void draw() {
ledOn = !ledOn;
if (ledOn) {
GPIO.digitalWrite(16, GPIO.LOW);
fill(204);
} else {
GPIO.digitalWrite(16, GPIO.HIGH);
fill(0,0,255);
}
stroke(255,0,0);
ellipse(width/2, height/2, width0.75, height0.75);
}//End