전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

인텔 최초의 아두이노 호환 보드 : 인텔 갈릴레오 활용하기

전문가칼럼
DBMS별 분류
Etc
작성자
dataonair
작성일
2001-12-31 21:30
조회
10469





인텔 최초의 아두이노 호환 보드

인텔 갈릴레오 활용하기



지난 시간에는 인텔 갈릴레오(이하 갈릴레오)가 가진 경쟁 제품과의 차이점과 특징을 살펴봤다. 갈릴레오는 인텔이 개발한 아두이노 호환 보드로, 아두이노 UNO에 사용하는 소스 코드를 사용할 수 있고 리눅스가 구동된다는 특징을 가지고 있다. 이번 시간에는 갈릴레오의 초기 설정부터 이더넷, 미니 PCI 익스프레스 등을 활용하는 방법에 대해 살펴본다.



지난 시간에 소개한 것과 같이 갈릴레오는 아두이노와 호환되는 보드다. 그 덕분에 아두이노에서 사용하는 기존의 소스 코드와 쉴드를 사용할 수 있다. 그리고 일반 노트북에서 주로 사용되던 미니 PCI 익스프레스를 사용할 수 있어 하드웨어적으로 더 다양한 연결이 가능하고 리눅스를 이용한 개발도 가능하다는 장점이 있다. 이번 시간에는 갈릴레오의 초기설정과 각 기능별 활용법에 대해 살펴볼 것이다.



초기설정

갈릴레오는 아두이노 UNO와 동일하게 스케치를 사용하지만 개발에 사용하는 프로그램은 다르다. 따라서 갈릴레오 홈페이지에서 관련 프로그램을 다운로드해 설치해야 한다. 갈릴레오 다운로드 페이지(communities.intel.com/docs/DOC-22226)로 이동하면 각 운영체제별 설치파일을 확인할 수 있다.



필자 메모

이것만은 반드시 주의하세요! 갈릴레오를 초기설정하기 전에 주의할 사항이 있다. PC와 연결할 때 반드시 전원 어댑터를 먼저 연결하고, 그 다음 USB를 연결해야 한다는 점이다. USB를 먼저 연결할 경우 회로가 망가질 수 있다. 반대로 연결을 해제하는 경우에도 USB를 먼저 제거한 뒤 전원 어댑터를 분리해야 한다.



● 윈도우
다운로드한 윈도우용 아두이노 설치파일의 압축을 해제하면 바로 실행이 가능한데, 가급적 최상단 루트와 가까운 곳에 압축을 해제하는 것이 좋다. 아두이노가 설치된 디렉토리의 경로가 너무 길면 정상적으로 작동하지 않는 문제가 발생할 수 있기 때문이다. 또 경로 상에 한글이나 공백이 없어야 한다. 아두이노를 설치한 뒤에는 드라이버를 설치해야 한다. 갈릴레오에 전원을 연결한 다음 USB를 통해 갈릴레오를 PC에 연결하면 자동으로 장치를 인식하고 드라이버 설치를 시도할 것이다. 그러나 이내 실패했다는 경고창이 나타나게 된다. 그럼 ‘장치 관리자’로 이동하자. ‘기타 장치’에서 ‘Gadget Serial v2.4’를 찾을 수 있는데, 여기에 마우스를 가져다 댄 뒤 우측 버튼을 눌러 ‘드라이버 소프트웨어 업데이트’를 선택한다. 아두이노가 설치된 경로에서 ‘\hardware\arduiono\x86\tools\’를 지정하고 설치를 진행하면 된다. 설치가 완료되면 ‘포트 (COM & LPT)’에 추가된 갈릴레오와 해당 포트 번호를 확인할 수 있다. 만약 갈릴레오의 포트 번호가 10 이상이라면 한 자릿수로 변경하는 것이 좋다. 스케치를 업로드할 때 포트 번호가 10 이상이면 에러가 발생할 수 있기 때문이다.

● 맥
맥용 아두이노도 압축 파일로 돼 있다. 파일의 압축을 해제하면 Arduino.app이란 응용프로그램을 확인할 수 있다. 주의할 점은 일반 아두이노에서 사용하는 아두이노 프로그램도 Arduino. app으로 돼 있기 때문에 서로 구분할 수 있도록 이름을 바꿔주는 것이 좋다. 응용프로그램의 이름을 변경할 시에는 공백이나 한글을 넣지 않도록 한다. 맥에서는 별도의 드라이버 설정 없이 바로 아두이노를 실행하면 된다. 포트는 ‘/dev/cu.usbmodemXX XX/’ 형태로 설정된다.

● 리눅스
리눅스용 아두이노는 tar 파일로 돼 있다. 파일을 다운로드한 후 <리스트 1>의 명령어를 입력해 압축을 해제한다.



<리스트 1> 리눅스용 아두이노 파일 압축 해제하기
tar -zxvf arduino-1.5.3-리눅스32.tar.gz

리눅스에서는 기본적으로 모뎀 관리자가 설치돼 있는데, 모뎀 관리자를 제거해야 아두이노가 정상적으로 실행된다. <리스트 2>와 같이 모뎀 관리자를 삭제한다. 리눅스도 맥과 마찬가지로 별도의 드라이버 설정을 하지 않아도 된다.



<리스트 2> 리눅스 모뎀 관리자 제거하기
sudo apt-get remove modemmanager

갈릴레오 연결하기

아두이노와 드라이버 설치가 완료됐다면 이제 갈릴레오를 연결할 준비를 마친 것이다. 갈릴레오의 클라이언트 USB를 PC에 연결하고 아두이노를 실행한다. 아두이노가 실행됐다면 포트를 연결한다. ‘도구(Tools)’에서 ‘시리얼 포트(Serial Port)’를 선택하면 현재 활성화된 포트를 확인할 수 있다. 윈도우에서는 해당 COM 포트를 선택하면 되고, 맥에서는 ‘/dev/cu.usbmodem XXXX’로 표시된 것을 선택하면 된다. 다음으로 보드를 선택한다. ‘도구(Tools)’에서 ‘보드(Board)’를 선택하면 보드 목록이 표시된다. 현재는 갈릴레오 하나만 표시되만 x86기반 아두이노 호환 보드가 더 늘어나면 그 중 갈릴레오를 찾아 선택하면 된다.



펌웨어 업데이트

갈릴레오의 펌웨어는 2014년 4월 14일을 기준으로 0.7.5.7 버전까지 공개된 상태다. 갈릴레오가 아두이노를 호환하기 때문에 아두이노 UNO의 소스 코드와 쉴드를 사용할 수 있다고 하지만 아직 몇 가지 버그나 지원되지 않는 함수들이 존재한다. 인텔은 지속적인 펌웨어 업데이트를 통해 이러한 문제를 해결해 나갈 것이라고 밝혔다. 따라서 주기적으로 펌웨어 업데이트를 확인하는 것이 좋다. 펌웨어 업데이트 방법은 다음과 같다. 우선 갈릴레오에 삽입된 SD카드가 있다면 제거한 뒤 재부팅한다. 아두이노를 실행한 뒤 ‘도움말(Help)’ 메뉴에서 ‘Firmware Update’를 선택한다. 실행하면 진척도가 표시된 팝업창이 나타나는데, 이 팝업창이 사라지기 전까지 절대 갈릴레오의 연결을 해제하면 안 된다. 펌웨어 업데이트 시간은 대략 5분 정도 소요되며, 완료되면 성공했다는 메시지 창이 나타난다.



리눅스 시리얼 통신

갈릴레오 보드에 보면 ‘UART’라고 적힌 3.5mm 오디오 단자를 확인할 수 있는데, 이는 사운드와 관련된 처리를 하는 단자가 아니라, 갈릴레오의 리눅스와 시리얼 통신을 하기 위한 용도로 사용된다.



column_img_1241.jpg

시리얼 통신을 하기 위해서는 <그림 1>과 같은 3.5mm to DB9 케이블이 필요하다. 요즘의 데스크톱과 노트북에는 DB9이 없는 모델이 많으므로, 이 글에서는 DB9을 다시 USB로 변환하는 케이블을 이용한다는 전제로 설명할 것이다. 시리얼 통신을 할 때 기존의 갈릴레오 USB 클라이언트와 연결할 필요는 없다. 시리얼 통신을 하기 위해 CoolTerm과 같은 터미널 프로그램이 필요한데, ‘freeware.the-meiers.org’라는 웹사이트에 접속하면 각 운영체제용 CoolTerm을 다운로드할 수 있다. 갈릴레오를 연결한 상태에서 CoolTerm을 실행한 다음 ‘Connection’ 메뉴에서 ‘Options...’를 선택한다. ‘Port’를 usbserial로, ‘Baudrate’를 115,200bps로 설정한다. 설정을 저장하고 ‘Connect’를 누르면 리눅스에 연결된다. 간혹 Connected 모드로 전환된 후 화면에 아무것도 표시되면의 내용이 나타날 것이다. 처음 연결하는 경우에는 사용자에 root를 입력하고 비밀번호는 없기 때문에 그냥 엔터를 치면 된다.



아두이노에서 리눅스 명령어 사용하기

앞서 설명했던 것처럼 시리얼 통신으로 갈릴레오의 리눅스를 제어할 수 있지만, 3.5mm to DB9 케이블을 가지고 있는 사람이 흔치 않을 것이다. 물론 케이블을 가지고 있지 않더라도 아두이노 스케치를 이용해 리눅스를 제어할 수 있다. 라즈베리파이가 system이라는 함수를 이용해 리눅스를 바로 제어할 수 있듯이, 갈릴레오도 동일하게 system이라는 함수를 제공하기 때문이다.



<리스트 3> system 함수를 이용해 현재 시간 가져오기
// 시간 정보를 담기 위한 변수
char buf[9];
void setup() {
// 아두이노 시리얼 모니터에서 확인하기 위해 Baudrate를 115,200bps로 설정한다.
Serial.begin(115200);
// 시스템 시간을 2013년 1월 1일 12시로 설정한다.
system("date 010112002013");
}
void loop() {
// 현재 시간을 '/home/root/time.txt'에 기록한다.
system("date '+%H:%M:%S' > /home/root/time.txt");
// 파일 변수
FILE *fp;
// '/home/root/time.txt' 파일을 읽기모드로 연다.
fp = fopen("/home/root/time.txt", "r");
// buf 변수에 텍스트 파일의 내용을 집어넣는다.
fgets(buf, 9, fp);
// 파일을 닫는다.
fclose(fp);

// 아두이노 시리얼 모니터에 출력한다.
Serial.print("The current time is ");
Serial.println(buf);
// 1초 멈춤
delay(1000);
}

column_img_1242.png

<리스트 3>은 system 함수를 이용해 리눅스 시스템의 현재 시간을 시리얼 모니터로 출력하는 예제다. 이를 실행하면 <그림 2>와 같이 현재 시간이 출력됨을 확인할 수 있다. 앞서 시리얼 통신에서 CoolTerm의 Baudrate를 115,200bps로 설정했던 것과 같이 아두이노 시리얼 모니터의 Baudrate도 동일하게 설정한다.



<리스트 4> system 함수를 이용해 파이썬 사용하기
// log.txt의 내용을 담을 변수
char output[3];
void setup() {
// 아두이노 시리얼 모니터에서 확인하기 위해 Baudrate를 115,200bps로 설정한다.
Serial.begin(115200);

// myScript.py 파일에 반복문으로 log.txt에 기록하는 파이썬 코드를 입력한다.
system("echo '#!/usr/bin/python' > myScript.py");
system("echo 'import time' >> myScript.py");
system("echo 'for i in range(10):' >> myScript.py");
system("echo ' with open(\log.txt\"

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""