아두이노
이탈리아어로 '절친한 친구' 라는 뜻.
오픈소스를 지향하는 마이크로 컨트롤러 기판을 말한다.
아두이노로 할 수 있는 것?
정답은 간단하다! 한단어로 표현하면
anything
뭐든지 가능하다.!
그러나!!
아두이노 단점의 경우 먼저 성능과 기능의 한계를 아두이노의 단점으로 꼽을수 있음. 아두이노는 MPU를 사용하고 있는데, 16MHz의 속도로 동작한다. 무엇보다 스토리지가 작아 조금만 복잡한 코드를 작성해도 업로드 조차 되지 않는 경우가 발생한다. PC나 서버에서 작업을 하던 개발자라면 아두이노 환경이 답답할 수 밖에 없다.
또 하나의 단점은 테스트의 어려움이다. IDE를 이용해 쉽게 작성이 됐다고 해도 컴파일이나 업로드, 테스트과정이 쉽지는 않다. 애플리케이션을 작성할 때 요구되는 테스트 코드 역시 존재하지 않는다. 하드웨어의 성능만 봐도 무거운 프로그램을 작성할 수 없다는 걸 예상 할 수 있지만 테스트 코드를 작성하고 실행하는 것이 어렵다는 점도 아두이노의 단점이다. 많은 장점을 가진 아두이노지만 이처럼 태생적 한계를 극복하는 것은 쉽지 않다. 그렇기 때문에 이러한 단점들을 Node.js를 통해 보완하려는 것이 이 글의 목적이라고 하겠다.
아두이노의 인터페이스와 API 아두이노에서 많이 쓰이는 물리적인 외부 인터페이스와 API들을 살펴보도록 하자. Node.js를 이용해 아두이노를 제어하려면 아두이노 에서 사용가능한 인터페이스와 API를 Node.js에서 사용할 수 있어야 한다. 그럼 아두이노에 사용되는 인터페이스는 무엇이 있는지 살펴보자.
디지털I/O 아두이노의 핀 레이아웃 중 가장 많은 핀이 배정돼 있으며 외부의 디지털 신호들, 소위 0, 1로 대변되는 신호를 감지하거나 반대로 신호를 외부로 보낼 때 사용된다. 대표적으로 버튼, LED, LCD 등과 같이 디지털 신호를 주고 받을 때 사용된다. 이 핀에 사용되는 아두이노 API들은 다음과 같은 것들이 있다
pinMode() : 디지털 핀의 입력 혹은 출력을 설정함. digitaIRead() : 외부의 신호를 읽음. 5V이면 HIGH(1), 0V이면 LOW(0)을 반환함. digitalWrite() : 외부에 신호를 보냄.
- 아날로그 I/O
아두이노에는 외부의 아날로그 값들을 읽기 위해 아날로그 핀들이 별도로 마련돼 있다. 이 핀은 외부의 아날로그 신호를 감지해 0~1023 사이의 값으로 변환한다. 아두이노는 아날로그 출력을 하지 못한다(최소한 우노에서는 그렇다). 디지털 보드는 0을 나타내기 위해 0V를, 1을 표현하기 위해 5V를 사용하고 있다. 이 때문에 아날로그를 표현하기 위해 2.5V를 만들 수는 없다. 하지만 디지털로 아날로그 신호를 비슷하게 만들 수는 있다. PWM(펄스 폭 변조 방식)을 사용하는 방법인데, 10ms라는 시간 동안 5ms는 5V로, 다음 5ms는 0V를 주는 것이다. 그러면 전체적으로 2.5V의 효과를 얻을 수 있다. 이 기능을 이용하기 위해서는 디지털 핀 가운데 3, 5, 6, 9, 10, 11 핀을 사용해야 한다. 내부 PWM을 위한 타이머가 이 핀들과 연결돼 있기 때문이다.
analogRead() : 외부의 아날로그 신호(전압)를 받아 디지털 값으로 읽음
analogWrite() : PWM을 이용해 아날로그 신호를 외부로 보냄. 입력 값으로 0~255 사이의 값을 파라미터로 받음
SPI(Serial Peripheral Interface) SPI는 주로 2개 이상의 마이크로컨트롤러를 연결해 데이터를 빠르게 교환하고자 할 때 사용하는 방식이다. 이를 위해서 4개의 선이 필요하며, ICSP(In Circuit Serial Programming)로 지원된 핀을 사용하거나 디지털 핀 가운데 10, 11, 12, 13 핀을 사용한다. SPI를 사용하기 위해 아두이노는 SPI library를 제공하고 있다.
I2C(Inter-Integrated Circuit) SPI와 마찬가지로 2개 이상의 아두이노 보드를 연결할 때 사용되며, 칩 간의 데이터를 전송하기 위해 사용되기도 한다. 2개의 선만으로 간단히 구성할 수 있어 많이 사용된다. SPI 방식에 비해 속도가 느려 빠른 데이터 교환이 필요치 않은 경우에 사용된다. I2C 역시 SPI와 마찬가지로 별로의 라이브러리가 제공된다.
- 시리얼 통신 USB와 같은 직렬 통신 방법 중 하나로 아두이노 보드와 PC 간의 데이터 통신에 사용된다. 개발보드에서 디버깅용으로 많이 사용되는 기본 인터페이스로, PC와 연결할 때 이 방법을 이용한 예제를 다룰 것이다. 이 방식은 표준 자체가 오래돼 보편적이면서 TX, RX와 같이 2개의 선만 있으면 되기 때문에 구성도 간단하다. 아두이노는 디지털 핀 0과 1을 시리얼 포트에 사용하고 있다. 따라서 시리얼 통신을 하게 된다면 디지털 핀 0과 1은 사용할 수 없다.