마이크로 파이썬 배우기 14 – 마이크로파이썬으로 핀 모드 다양하게 선언하기

마이크로 파이썬 배우기 14 – 마이크로파이썬으로  핀 모드 다양하게 선언하기

마이크로 파이썬을 이용하면 라즈베리파이 보드에 다양한 자동화 기능들을 프로그램하여 사용할 수가 있다. 일반적인 라즈베리파이 SBC(Single Board Computer) 외에도, 특히 라즈베리파이 재단에서 자동화 프로그래밍 용도로 개발한 피코 보드를 손쉽게 활용하는데 Micropython이 매우 유용하다.

라즈베리파이 피코보드는 다음과 같은 모양을 하며, 40개의 접속핀 단자를 가지고 있다. 이들 각각의 핀은 미리 설정된 형태에 따라 디지털 입출력 및 아날로그 입력, I2C 통신, SPI 통신, UART 통신 용도로 사용할 수가 있다.

마이크로파이썬에서, 이들 피코보드의 핀들을 사용하기 위해 선언하는 방법들을 요약하여 소개한다.

1. 디지털 출력

피코보드에서 GP 핀들을 디지털 신호 출력용으로 사용하려면 다음과 같이 선언해 준다.

변수명 = machine.Pin(핀 번호, machine.Pin.OUT)

예를 들어, LED라는 변수에 GP15번 핀을 할당하려면 다음과 같이 선언해 주면 된다.

LED = machine.Pin(15, machine.Pin.OUT)

그리고, 실제 디지털 출력을 조절하는 것은 이 변수의 속성값을 변경함으로써 이루어진다.

즉, LED라는 변수에 할당한 경우, led.value(0) 명령을 주면, led 변수의 값이 0으로 변경되며, 이 변수에 할당된 GP15번으로의 출력값이 off가 된다. 반대로, led.value(1) 명령을 주면, led 변수의 값이 1로 변경되며, 이 변수에 할당된 GP15번으로의 출력값이 on이 된다. 이처럼 변수의 속성값을. value( )를 사용하는 대신 led.toggle( ) 해주면 디지털 출력용으로 할당된 변수의 값이 0과 1사이를 서로 변경해 주게 된다.

2. 디지털 입력

피코보드에서 GP 핀들을 디지털 신호 출력용으로 사용하려면 다음과 같이 선언해 준다.

변수명 = machine.Pin(핀 번호, machine.Pin.IN, machine.Pin,PULL_DOWN)

여기서 PULL_DOWN 눌리지 않은 경우 해당 핀으로 입력되는 값을 0으로, PULL_UP 눌리지 않은 경우 해당 핀으로 입력되는 값을 1 설정해 준다. (PULL_DOWN GND 신호에 연결, PULL_UP 3.3V 신호 연결)

예를 들어, 외부 스위치 조작을 button라는 변수에 GP15번 핀을 할당하려면 다음과 같이 선언해 주면 된다.

button = machine.Pin(15, machine.Pin.IN, machine.Pin,PULL_DOWN)

즉, 위와 같이 설정한 경우, 15번 핀에 연결된 외부 스위치가 눌려지면 button이라는 변수의 값이 0에서 1로 변경되게 된다.

3. 아날로그 입력

피코보드의 GP 26, GP27, GP28 핀들은 아날로그의 신호 입력용으로 사용이 가능하다.

(참고로, 라즈베리파이 피코보드는 외부로부터 3개의 아날로그 입력 채널이 가능하다)

이들 핀들을 아날로그 입력용으로 사용한다고 선언하려면, 다음과 같이 선언해 준다.

변수명 = machine.ADC(26) <– GP Pin Number를 넣는다.

이렇게 선언해 주면, 아날로그 온도계나, 마이크 소리값 등의 아날로그로 입력되는 신호 입력값을 할당하는 변수에 저장할 수 있게 된다.

4. 아날로그 출력

피코보드에서는 아날로그 출력대신, PWM (Pulse Width Modulation) 이란 방식을 이용하여 아날로그와 매우 유사한 신호를 출력할 수 있다.

변수명 = machine.PWM(machine.Pin(핀번호))

이렇게 선언해 주면, 해당 변수의 속성 중 duty 값을 변화시키는 방법으로, 아날로그 출력에 해당되는 PWM 출력을 조절할 수 있다.

5. I2C 통신용

피코보드는 그 자체로 사용하는 것 외에, 여러 가지 센서나 디스플레이 등과 같이 주변기기를 연결하여 사용할 수도 있다. 이러한 주변기기들과 연결하는 경우 SPI 또는 I2C 통신 방식이 많이 사용되는데, 2가지 중에서도 I2C가 좀 더 적은 수의 케이블로 통신이 가능(I2C – 전원 선 포함 총 4개, SPI – 전원 포함 6개 이상) 하여 널리 사용된다.

피코보드는 I2C 채널로 0과 1의 2개 채널을 제공한다. 전원 연결에 필요한 VCC와 GND를 제외하고 나머지 2개선이 필요한데 이들이 각각 sda와 scl로, 정상적인 i2c 통신을 위해서는 이들을 적절히 선언해 주어야 한다. sda와 scl은 제공되는 2개의 채널 중 동일한 채널에 해당되는 핀들을 사용해야 한다.

sda=machine.Pin(핀번호)

scl=machine.Pin(핀번호)

i2c=machine.I2C(I2C 채널번호 0 또는 1, sda=sda, scl=scl, freq=주파수 예 :400000)

6. 여러 개의 핀들을 동시에 배열로 선언하는 방법

피코보드의 핀들도 배열로 선언이 가능하다.

만일 여러 개의 핀들을 각각 선언해야만 한다면 코드가 길어지고 매우 복잡해질 텐데,

다음과 같은 배열 선언으로 간단히 여러 개의 핀들을 하나의 그룹으로 선언할 수 있다. 원한다면, 초깃값도 이 선언에 포함시켜줄 수도 있다. LED 등과 같은 경우에 연결된 핀들을 그룹화 시켜 제어하는데 유용하다.

pinV=[machine.Pin(9,machine.Pin.OUT),machine.Pin(14, machine.Pin.OUT),machine.Pin(8, machine.Pin.OUT)]