아두이노 이클립스 플러그인: 저작자의 홈페이지 – Installation advice, 가 있으니 참고. 플러그인 설치는 이클립스를 실행후 Help >> Install New Software…를 실행후 “http://www.baeyens.it/eclipse/update” 주소를 입력하고 Add 버튼을 누른다. 그러면 Arduino Eclipse extensions 이 나타나는데 이것을 선택하면 설치가 된다.
Preferences > General > Workspace를 선택하고 “Save automatically before build”를 선택
Arduino항목에서 Arduino가 설치된 path와 library path 를 입력하고, Use Arduino ODE tools in eclipse를 선택한다. 그리고 test serial dll를 클릭해서 serial drive가 동작하는 지 확인한다.
아두이노 프로젝트 만들기: New >> Project >> Arduino >> New Arduino sketch를 선택, 프로젝트 이름를 설정, 보드와 COM port를 설정하면 setup()과 loop()함수가 만들어진 빈 프로젝트가 생긴다.
간단한 blink 예제를 만들고 Project >> Build All하면 컴파일이되고, AVR >> Upload Project to Target Device를 선택하면 아두이노 보드에 프로그래밍이된다.
WIZnet 칩중에서 SPI가 지원되는 칩은 W5100, W5200 그리고 W5500이 있다. 이중 W5100은 아두이노에 적용이 되어 Ethernet Shield 및 Arduino Ethernet 보드에 사용이 되고 있다. 물론 W5200으로 만든 Ethernet Shield도 있고 W5500으로 만든 Ethernet Shield도 있다. 그리고 최근에는 아두이노 팀에서 W5500으로 Ethernet Shield를 만들고 있다. 이렇게 3가지 칩으로 적용된 보드가 있는데, 그럼 코드에서 이 칩들을 구별할 수 있는 방법이 있는가?
Arduino 코드에서 WIZnet칩 구별하기
W5100, W5200, W5500의 칩들의 기본 기능은 같지만 H/W적으로는 패키지도 다르고 핀도 다르고, 내부 메모리 맵도 다르다. 모두 SPI 를 사용하지만 칩을 제어하기 위한 SPI format도 다르다. 그리고 W5100은 소켓이 4개이고 나머지 칩들은 모두 8개의 소켓을 지원한다.
코드에서 이들 칩을 구별을 하려면 이 칩들의 내부 레지스터를 읽어서 각 칩들에만 유효한 값을 확인해서 비교를 해야한다. 다행히 W5200과 W5500은 칩의 버젼을 구분하는 레지스터가 있다. 따라서 이들 2칩을 구분하면 3개중 2개를 구분이 되니 W5100은 구분이 가능하다. 즉 W5200이 경우 version 레지스터(0x001F)를 읽으면 0x03이 읽히고, W5500의 경우 0x0039 번지를 읽으면 0x04가 읽힌다.
W5100
W5200
W5500
0x001F
0x00
0x03
0x00
0x0039
0x00
0x00
0x04
아두이노 코드
아래 코드는 아두이노 Ethernet 코드를 수정하여 만든 코드이고, Webserver.ino에서 테스트를 했다.
업무때문에 2010년도에 아두이노팀을 만나고 오픈소스 하드웨어에 관심을 갖게되어서 뉴욕에서 열린 오픈하드웨어 서밋에도 참석을 하고, 메이커페어도 참석을 했다. 이후에 아두이노 IDE가 다국어 버젼을 지원을 할때, 한국어 번역도 하고(덕분에 지금도 버젼이 바뀌면 메일이 온다…) OSHW definition 도 번역을 했다. 최근 아두이노의 영향때문에 크라우드 펀딩 사이트인 Kickstarter.com에도 아두이노로 검색을 하면 161여개의 프로젝트가 뜬다.
ICT D.I.Y
국내에도 오픈소스 하드웨어에 대한 관심아 졌는데 특히 정부에서도 이 분야에 관심을 가지고 있는듯 하다. 미래창조과학부의 보도 자료에 의하면 2017년까지 ICT R&D예산 총 8.5조를 투자하는데 이중 15대 미래서비스 중 하나로 들어가 있는 것이 ICT D.I.Y서비스 이다. 물론 IoT플랫폼도 오픈 소스 하드웨어와 관련이 있다. 그런데 몇가지 궁금한 점이 있다.
“한류(국산) 오픈 소스 하드웨어 플랫폼”?
기술적으로 국산 오픈 소스 하드웨어 플랫폼이 가능하려면 사용되는 모든 부품 특히 MCU를 만들어야 하는데, 호환성 없는 즉 전혀 생소한 개발 환경의 제품을 만들어 내지는 않을까 우려가 된다. 즉 한국형이라는 말로 정말 한국에서만 쓰이는… 또는 정부 과제를 위한 사업들로 전락하는 것은 아닌지 우려스럽다.
개인적인 바램은 이런 사업으로 중소기업 또는 개인이 이런 플랫폼으로 쉽게 자신의 아이디어를 구체화하고 검증하며 시제품을 만드는데 도움을 줘야한다.
특히 요즘은 하나의 제품을 만드는 것이 단순히 하드웨어를 만드는 것 뿐만 아니라 S/W, 스마트폰 앱, 인터넷 서비스 까지 신경을 써야하기 때문에 이런 부분의 전문가들이 서로 협업을 할 수 있는 공간과 미국의 TechShop처럼 Tool들의 사용법을 가르치고 사용할 수 있는 기반이 필요하다.
또한 해외의 유명 커뮤니티처럼 국내에서도 이런 커뮤니티를 육성하고 지원을 해줄 수 있는 제도도 필요하다. 국내의 카페형 커뮤니티는 너무 폐쇄적임…
인기를 어떻게 알 수 있을까? 오픈소스하드웨어중 하나인 아두이노 관련 책을 인터넷 서점에서 검색해보면 2010년도에 한 권이던 책이, 2012년도를 기점으로 2013년에는 15권이나 된다. 대학에서도 아두이노를 가르치고 심지어는 고등학교 동아리에서도 아두이노를 가지고 프로젝트를 하는 것을 보았다.
2013년도 서울디지털포럼의 주제가 초협력이었고, 여기서 마친 자쿠보우스키(오픈소스 에콜로지 창립자), 카타리나 모타(오픈 머티리얼 & 에브리웨어테크 공동 창립자), 강윤서(오픈테크포에버 창립자) 등 오픈소스 하드웨어 운동가들이 SDF에 참석해 오픈소스 정신의 중요성을 알렸다. – 참고기사. 크라우드펀딩 사이트인 Kickstarter.com 에서 오픈소스하드웨어 플랫폼인 아두이노로 검색을 하면 122개의 프로젝트가 나온다. 우리나라는 몇 년 늦은 감이 있지만 이미 전세계적으로 오픈소스하드웨어의 열풍은 대단하다. 리눅스같은 오픈소스소프트웨어는 알겠는데, 그럼 오픈소스하드웨어란무엇인가?
오픈 소스하드웨어란?
오픈소스하드웨어도 오픈소스소프트웨어와 크게 다르지 않다. 오픈소스소프트웨어가 소프트웨어를 구성하는 소스코드를 공개하듯, 오픈소스 하드웨어는 하드웨어를 구성하는 회로도, 파트리스트, 회로도 등을 대중에게 공개한 제품을 말한다. 그리고 오픈소스하드웨어협회(Open Source Hardware Association)에서는 오픈소스하드웨어에 대한 정의를 명문화 해서 공개하고 있으며 현재 1.0버젼이 공개되어 있고 위키페이지에 한글 번역본도 공개되어 있다.
여기에 나와 있는 원칙에 대해 살펴보면…
오픈 소스 하드웨어는 누구나 이 디자인이나 이 디자인에 근거한 하드웨어를 배우고, 수정하고, 배포하고, 제조하고 팔 수 있는 그 디자인이 공개된 하드웨어이다. 하드웨어를 만들기 위한 디자인 소스는 그것을 수정하기에 적합한 형태로 구할 수 있어야 한다. 오픈 소스 하드웨어는 각 개인들이 하드웨어를 만들고 이 하드웨어의 사용을 극대화 하기 위하여, 쉽게 구할 수 있는 부품과 재료, 표준 가공 방법, 개방된 시설, 제약이 없는 콘텐트 그리고 오픈 소스 디자인 툴을 사용는 것이 이상적이다. 오픈 소스 하드웨어는 디자인을 자유롭게 교환함으로써 지식을 공유하고 상용화를 장려하여 사람들이 자유롭게 기술을 제어할 수 있도록 한다.
여기서 핵심은 디자인이 공개되야 하며, 공개하는 것도 누구나 쉽게 접근할 수 있도록 가능하면 상용툴이 아닌 오픈툴을 사용하라는 것이다. 즉 예를 들면 회로도는 EagleCad, Kicad등으로 구성하여 회로도 및 아트워크 파일까지 오픈하고, 소스코드로 github이나 Google code 같은 소스 공유 플랫폼을 이용해서 공유하라는 것이다. 그리고 재미있는 것은 오픈소스하드웨어의 원칙은 이 자료를 이용해서 누구나 상용화를 장려한다는 것이다. 아래 동영상은 OSHWA에서 공개한 “What is Open Source Hardware?” 라는 동영상이다.
오픈소스하드웨어와 비즈니스
상용화를 장려한다고? 공개를 하지 않아도 중국에서는 몇 개월이면 똑같은 제품을 만들어 내는데….누구나 쓸 수 있게 자료를 다 오픈하면 이게 더 쉬워지는데… 그럼 원저작자는 어떻게 돈을 벌지? 사실 오픈소스하드웨어는 개발 모델이지 비즈니스 모델은 아니라고 생각이 되지만 이미 오픈소스하드웨어기반의 비즈니스로 성공한 크리스 앤더슨의 지난 2012년 서밋의 키노트(MICROECONOMICS FOR MAKERS)를 읽어보면 오픈소스하드웨어 비즈니스에 관해 이해 및 영감을 얻을 수 있을 것 같다.
Open Hardware Business Model
• “Give away the bits, sell the atoms”
• Charge 2.6x BOM
• Keep ahead of cloners by innovating faster, supporting better
• “90-10” Rule: 90% the performance of commercial products at 10% the price
• Democratize the technology: low prices = high volume = high innovation.
상용제품보다 성능은 90%로 약간 떨어지지만 가격은 10% 밖에 안되는 제품을 많이 팔아라. 그리고 카피캣, 클론에 대비하기 위해 지속적으로, 빨리 제품을 업그레이드 해라. 이와 비슷한 얘기를 오픈소스하드웨어 비즈니스에서 성공한 Sparkfun의 CEO인 Nathan Seidle이 TED강연에서도 했다. 아래 동영상 참고.
그는 특허가 혁신을 일으키지 않는다고 하며, 자신의 오픈소스하드웨어 제품은 12주면 카피제품이 나오기 때문에 혁신이 필요하다고 얘기를 한다. 참고로 아래 비디오와 비슷한 내용의 글이 SparkFun 홈페이지에 있는데, 여기서 보면 2012년 당시 Sparkfun의 비즈니스 규모는 $75M이다. (35 co-workers, 75 million dollars of sales, 600,000 customers and our 431 unpatented products…)
관심이 있는 다양한 사용자들이 서로 이야기할 수 있는 공간이 온라인 상에 있으므로 서로의 프로젝트를 공유하고, 서로 자랑하고, 의견을 나눌 수 있는 환경을 만들어야 한다. 즉 이 공간을 통해 서로가 자극이 되고 격려가 되어 자신의 프로젝트를 공개할 수 있는 온라인 공간이 필요하다. 한 사람, 한 회사에서 주도하는 게시판 성격의 틀이 아닌 누구나 질문을 올리고 서로 답변을 할 수 있는 공간이 되야 한다. 위의 두가지 조건이 최소의 조건이다.
지금 다시 읽어보니 예전의 생각이나 지금의 생각이나 크게 차이가 없다. 하지만 당시의 생각보다 지금 더 중요하게 생각되는 부분은 바로 두번째 부분인 온라인 플랫폼인 커뮤니티부분이다. 위 오픈소스하드웨어 비즈니스 부분에서 보았던 업체들의 공통점은 무엇인가? 그들은 단순히 하드웨어 제품만 파는 업체들이 아니다. 자신들의 커뮤니티를 통해서 유저들과 소통한다. 즉 홈페이지에 심하다 싶을 정도로 자세한 튜토리얼을 제공하고 유저와 소통하는 포럼을 운영하고 있다. 이중에 개인적으로 가장 잘되어 있다고 생각되는 튜토리얼은 Adafruit의 Learning System이다. 세세한 설명, 고퀄의 사진들… 즉 이들의 비즈니스는 교육과도 무관하지 않다.
오픈소스하드웨어 비즈니스에서 또 한가지 고민해야 할 부분은 어떻게 카피켓, 클론들 속에서 비즈니스를 지속하느냐 이다. 크리스 앤더슨이 발표한 자료의 마지막에 “7 OSH Limitations”에도 언급이 되어 있는데, 대안은 하드웨어를 모두다 오픈하지 않는다는 것이다. 즉 회로 자체는 오픈하되 디자인 파일들이나 패키지, 금형관련된 부분들은 오픈하지 않는 것이다. 실제로 아두이노노 회로및 아트웍 파일은 오픈하지만 아트웍 파일이 실제 판매되는 파일과 다르다. MakerBot도 비슷한 전략을 쓰고 있다.
관련 글을 쓰다보니 오래된 내 블로그의 글을 다시 한번 확인하게 되었는데, 지금도 흥미로운 글이 몇개 있다. ^^
아두이노의 미래 – 2011년 OSHW서밋과 메이커페에 때 아두이노 발표, 이 포스팅에 있는 SlideShare 자료에 보면 당시 아두이노 커뮤니티의 규모가 나온다. 참고로 이후에 아두이노 커뮤니티에 대한 언급은 2013년 6월 [블로터포럼] ‘오픈소스 하드웨어’를 말한다 에서 언급된다.
2011년 아두이노 서밋에서 포스팅 수가 50만개, 사용자수가 5만명 밖에 되지 않았는데 최근에 들어가 보니 사용자수가 14만명, 올라온 글이 120만개더라.
WizFi210의 F/W를 업데이트하기 위해서는 모듈을 RUN mode에서 PROGRAM mode로 설정을하고, UART를 이용해서 업데이트를 해야한다. 아래 회로도를 보면 모듈의 37번핀을 Low로 하면 RUN mode이고, High로 하면 PROGRAM mode이다. 이 핀을 High로하고, UART핀 TX(40번), RX(42번)핀을 RS232 트랜시버를 거쳐서 PC의 시리얼 포트에 연결을 한다.
아두이노의 공식 Ethernet 쉴드에는 Wiznet의 W5100이 사용된다. 따라서 모든 Ethernet 라이브러리는 W5100을 이용하는 것으로 되어있는데 Wiznet의 신규칩인 W5200을 아두이노 보드에서 사용하기 위해서는 라이브러리를 일부 수정을 해야 한다. W5100과 비교해서 W5200의 장점은 대략 작은 패키지, 8 socket 지원(W5100의 경우 4 socket 지원), Power down mode, Wake on LAN 기능 지원 등이다. W5100 to W5200 migration guide
cfile3.uf.1221F0404EE59A7B11507B.pdf
Hardware 연결
간단한 테스트를 위해 Wiz820io를 사용을 해서 아래 그림처럼 테스트를 했다. 아래 그림은 Fritzing 이라는 툴로 Wiz820io 라이브러리를 만든 후 작성한 연결도이다. Fritzing관련해서는 이전 포스트 참고(Fritzing, Fritzing 라이브러리 만들기) Wiz820io의 Fritzing 라이브러리
cfile28.uf.182202414EE59CB821A744.fzpz
* PWDN, nINT, 스위치를 통한 reset 입력은 연결을 안 해도 되고, VCC, GND도 하나의 선만 연결해도 된다.
라이브러리 수정 변경을 최소화하고 기존의 라이브러리와의 호환성을 위해 변경된 드라이버는 W5100과 같은 파일명을 쓴다. 즉 W5100.cpp와 W5100.h 파일만 수정해서 아두이노 IDE가 설치된 폴더에 덮어쓰면 된다. 즉 “/libraries/Ethernet/utility” 아래에 있는 W5100.cpp 및 W5100.h 파일을 아래 첨부한 파일로 변경하면 된다. 파일에 수정된 부분은 W5200으로 검색을 하면 쉽게 찾을 수 있다.
* Support for DHCP and DNS has been added to the Ethernet library, thanks to integration by Adrian McEwen. Most classes in the Ethernet library have been renamed to add a “Ethernet” prefix and avoid conflicts with other networking libraries. In particular, “Client” is now “EthernetClient”, “Server” is “EthernetServer”, and “UDP” is “EthernetUDP”. A new IPAddress class makes it easier to manipulate those values.
* The UDP API has been changed to be more similar to other libraries. Outgoing packets are now constructed using calls to the standard write(), print(), and println() functions – bracketed by beginPacket() and endPacket(). The parsePacket() function checks for and parses an incoming packet, which can then be read using available(), read(), and peek(). The remoteIP() and remotePort() functions provide information about the packet’s origin. (Again, thanks to Adrian McEwen for the implementation.)
Frtizing이라는 툴을 지난번에 소개한 적이 있다. 독일의 오픈 소스툴
이 툴을 직접 사용을 해봤는데, 실제 피지컬한 보드를 가지고 설계를 하는 듯한 느낌이 있고 이것을 다시 회로로 변환을 해주는 것이 흥미롭다. 전자공학을 하는 초보자들에게는 좋은 툴인 동시에 이미 많이 개발된 파트 라이브러리 덕에 문서 작업에 유용하게 쓰일 수 있다.
이미 아두이노, 아두이노 이더넷 쉴드, Xbee, mbed…등등의 파트들이 제작이 되어 있다.