좋은 시기에 시스템베이스(주)에서 개최하는 Mr.eddy 경진대회를 참가하게 되었다.
이전부터 임베디드 보드를 이용하여 홈네트워크를 개발할 예정을 잡고, 구상중이 었는데
임베디드 보드의 높은 가격과 생각보다 큰 크기에 고심하고 있던차에, 우연히 보게된 경진대회글을 보고, 이거다! >.< 라는 생각이 들어 Eddy를 기반으로 구상을 하게 되었다.
@.@ 처음 구상은 홈서버를 집안에 두고, 내부와 외부(인터넷을 통한)에서 집안의 환경의 감시하고 제어하는 구상이었다.
홈서버를 구축하기 위해선 많은 조건이 필요하다.
1. 작은 크기
집안에 두는 것들은 최대한 작은것이 좋다. 집은 넓어야 한다는 우리나라 사람들에게 큰 제품은 절대 용납이 안된다.
2. 안정성
장시간 활용되어야 하는 서버이므로 단연, 안전성을 요구한다.
서버란 무엇인가. 내가 자고 있는 동안에도 열심히 달리며 실시간으로 나의 노크를 기다리고 있는 잠없는 아이이지않은가.
3. 적은 전력 소비량
집안에 설치되어 주된 제어를 하게 될 에디 서버이므로 잡아먹는 전력 또한 적게 들어야 한다. 계절성을 띄는 에어컨도 아니고 필요할때 켰다가 끌 수 있는 컴퓨터도 아니다.
1년 365일 24시간 내내 뛰어야 하는 서버는 적은 전력만 줘도 잘 달릴 수 있는 효율성이 요구된다.
4. 관리상의 용의성
Eddy 2.0은 위의 조건을 대부분 충족한다.(앗싸!!)
Eddy 2.0 CPU 의 간단한 사양은 다음과 같다.
ㅁArm9 기반의 180Mhz의 CPU
ㅁ4M의 플래쉬 메모리
ㅁ32M의 SRAM
ㅁ100M Ethernet 칩셋
ㅁ2개의 UART 포트
ㅁ16개의 범용 I/O(GPIO) 포트
사진을 봐서 알겠지만, Eddy 2.0의 CPU에는 단순히 CPU와 램과 플래쉬 메모리, 이더넷 칩셋말고는 아무것도 보이지 않는다.
그외의 포트를 사용하기 위해서는 Eddy 2.0 CPU를 장착해서 사용하는 기본적인 타겟보드를 이용하거나(여러개의 보드가 있으며, 자신의 구상에 맞는 보드를 사용하면된다.), 타겟보드를 직접 제작하여 나머지 포트를 연결해야한다.
2. Eddy 하드웨어
우리의 프로젝트에서 홈네트워크의 센서값을 얻기 위해서는 8bit 이상의 ADC를 사용해야하나, 기본적으로 제공되는 보드에는 4개의 GPIO 포트를 이용하지 못하기 때문에, 16개의 GPIO포트를 모두 사용하기 위해 타겟보드를 직접 작성하게 되었다.
다음과 같다.
하단의 Eddy 2.0 CPU를 일반적으로 사용하기 위한 기판에 연결하기 위해 시스템베이스에서는 변환 기판을 만들어 주었다.(무구한 감사드리옵니다~ㅠㅠ)
연결된 장비는 USB1.1, SD Card Slot, RJ49 Ehtetnet, Serial로 연결된 Zigbee Module등이 있으며 16개의 GPIO포트중 11개를 8bit ADC에 물려 8개는 데이터출력으로, 2개는 출력값 선택용으로, 1개는 Start로 이용했다. ADC에는 조도, 온도, 가스센서가 연결되어 있다.
나머지의 5개의 GPIO포트에는 도어락과 형광등, 환풍기에 연결하여 제어신호용 포트로 활용했으며, 가스 누출시 경보를 알리기 위해 알람에도 하나의 GPIO포트를 이용했다.
프로젝트를 진행하다가 실내에서 사용될 인터페이스의 필요성을 느껴, LCD가 내장된 보드(pxa270, hybus)를 이용하여 사용자 인터페이스를 추가했다.
이 보드는 이더넷으로 Eddy와 통신을 하며, 제어 TCP 패킷으로 Eddy의 프로세서가 GPIO를 제어하여 작동하며, Eddy에서는 센서값을 TCP 패킷으로 보드에 전달하여 표출한다.
제어가능한 집안물건은 3가지를 선정했으며, 도어락과 백열등, 환풍기(120MM팬)을 장착했으며, 백열등과 환풍기는 릴레이를 GPIO포트로 제어하여 작동시킨다.
3. Eddy 소프트웨어
우리 프로젝트에서 개발한 Eddy 소프트웨어는 총 4개의 프로그램을 제작하였다.
3개의 프로세서를 기동시키는 프로그램과
Serial에 연결된 Zigbee를 통해 Senser Module에서 센서값을 받아 전송해주는 프로그램과 USB에 연결된 Webcam을 통해 사진을 찍어 웹서버로 전송해주는 프로그램과
외부로부터 TCP제어 신호를 받아 GPIO신호를 제어하는 프로그램을 제작하였다.
Eddy V2.0 CPU를 기반으로 소프트웨어를 제작시 가장 큰 장점이라면 GUI기반의 통합된 IDE(LemonIDE)를 제공한다는 점이다.
이는 vi같은 커맨드기반의 개발툴에 익숙하지 않은 사용자에게는 반길만한점이다.
LemonIDE의 기본 사항은 다음과 같다.
ㅁEclipse 기반의 IDE (통합 개발 환경)
ㅁGUI 기반 소스코드 편집 인터페이스
ㅁ타겟 시스템 내부 어플리케이션 원격 실행
ㅁ원격 디버거
ㅁ원격 모니터링을 통한 타겟 시스템 상태 분석
ㅁ프로젝트 관리 기능
ㅁ크로스 컴파일 환경 연동
ㅁMakefile 자동생성
ㅁWindows / Linux 호스트 시스템에서 작동
Lemonide는 cygwin을 통하여 Windows에서도 완벽히 개발환경을 제공한다.
굳이 개발을 위한 VMware같은 가상머신을 이용해 Fedora나 Ubunto같은 Linux배포판을 이용해 개발환경을 구축하지 않아도 된다.
그렇다고 Linux 배포판에서 Lemonide가 동작하지 않는다는것은 아니다.
Eclipse기반으로 제작된 Lemonide는 Eddy에 맞게 구성된 원격 디버거가 내장되어 있다.
이는 다소 불편한 디버깅을 단순히 클릭한번에 해결해주는 멋진 도구이다.
그외에도 모니터링 도구가 내장되어 있으며, Eclipse의 장점을 그대로 이어받은 멋진 개발툴이다.
실제 개발에서도 Lemonide로 인해 개발시간의 단축을 꾀할수 있었고,
기본으로 제공되는 오픈소스 프로그램 및 Eddy API를 통해, 쉽게 제어 할수 있다.
단적인 예로, Linux 프로그래밍에서 TCP 서버 소켓을 생성하기 위해서는 다음과 같이 작성한다.
int serv_sock, clnt_sock;
struct sockaddr_in serv_addr;
sock = socket(PF_INET, SOCK_STREAM, 0);
memset(&serv_addr, 0, szieof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(IP);
serv_addr.sin_port=htons(atoi(PORT);
bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr));
listen(serv_sock, 5);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
struct sockaddr_in serv_addr;
sock = socket(PF_INET, SOCK_STREAM, 0);
memset(&serv_addr, 0, szieof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(IP);
serv_addr.sin_port=htons(atoi(PORT);
bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr));
listen(serv_sock, 5);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
하지만 SystemBase에서 제공되는 Eddy API를 이용하면 다음과 같이 된다.
int serv_sock, clnt_sock;
serv_sock = SB_ListenTcp(PORT, 8, 8);
clnt_sock = SB_AcceptTcp(serv_sock, 1);
->(왜 이렇게 함수로 만들 생각을 진작에 못했을까.-ㅁ-a)serv_sock = SB_ListenTcp(PORT, 8, 8);
clnt_sock = SB_AcceptTcp(serv_sock, 1);
이외에도 여러가지의 유용한 API(shared_memory, Serial, GPIO등)를 제공함으로써, Eddy 소프트웨어개발은 한층 쉬워진다.
4. Eddy의 장점과 단점
장점
저렴한 가격 : ARM 9이 내장된 CPU가 단품으로 6만원밖에 하지 않고, 개발보드인 DK보드를 포함한 가격이 30만원 내외인것으로 알고 있다.
LemonIDE : UI를 이용한 IDE 개발 툴 지원은 개발자들에게 반길만한 일이다.
충실한 메뉴얼 제공 : 우리가 학생으로싸 단기간 내에 프로젝트를 완성한 이유는 PDF로 제공되는 충실한 메뉴얼 및 회로도로 인한 개발기간이 많이 줄었기 때문이다.
API의 지원 : 개발에 필요한 API 제공은 개발 시간을 단축 시켜준다. 실제적으로 하드웨어 제작 이후 소프트웨어 제작에는 채 2주가 걸리지 않았다.
단점
부족한 IO포트 : 개발을 하면서 외부 장치를 많이 연결하고 싶었지만 부족한 IO포트(16개의 GPIO)포트로는 한계를 많이 느꼈다.
5. 프로젝트를 마치며
경진 프로그래머의 후기>>
에디와 함께 한 이번 프로젝트의 의미는 나에게도 크다.
작년 이맘 쯤 동아리에 들어온지 얼마 되지 않은 내가 본 선배들의 작품이
이 에디를 이용한 스마트 터치 시스템이었다.
아무것도 모르는 철없는 후배 눈에 프로젝트 때문에 밤을 새고 다음 날 지쳐 잠든 모습들은 참 신기하고 존경스러웠다. 힘들어보이기도 했지만 저렇게까지 할 수 있구나 라는 생각을 그때 하면서 내자신에게도 좀 엄하게 대한듯하다.
pxa270보드를 다루면서 예전에 마무리 못했던 작품을 떠올리며 스트레스가 남달리 쌓여갔었다. 이전에 못했었는데 지금은 할 수 있을까.
또 새로운 버전의 qt를 사용하면서 정보가 많이 없는데 잘될까 하는 불안감 때문에 몇달간 몇년의 나이를 먹어버린듯하다 ^^;;
그래도 밤을 새서 울고픈 마음 참아가며 마무리한 그 기분은... 정말 .. 정말 셀수없는 기쁨이었다. 바로 지쳐 쓰러지긴 했지만;;
내가 이번 프로젝트로 배운 것은 내가 목표로 둔 것에 대한 끝없는 도전이자 포기란 없다 였다. 만일 내가 그 새벽, 포기해버리고 잠들었더라면...
하기 싫다고 밖에 뛰쳐나가버렸더라면...
한 단계 더 성장할 수 없었을 것이다.
팀원들에게 고맙고 작품에 대해 좋은 평을 해주신 시스템 베이스 분들에게도 감사를 표한다. 그 평가 하나하나가 팀원들에게 힘이 되고 조언이 된 것 같다.
다음 프로젝트를 기약하며...
AIS 빠샤!!ㅋㅋㅋㅋ