.NET Micro Framework

.NET Micro Framework 살펴보기

.NET Micro Framework는 .NET Framework의 가장 작은 버전으로 아주 작은 크기의 디바이스에서 제한된 파워와 메모리 상에서 구동하는 것을 목표로 만들어졌다. 00~000 MHz 정도의 속도와 KB 단위의 메모리에서 동작한다. 원래는 SPOT 시계용으로 디자인이 되었으며, 다양한 디바이스로 포팅되었다. 오픈소스 프로젝트로 모든 소스가 공개되어 있으며 공식 사이트가 있다. 40% 코드가 커뮤니티에서 작성한 코드라고 한다.

이 글에서는 공식 사이트의 소개 동영상을 통해 .NET MF를 살펴보고자 한다.

개발도구

image

영상이 2012년에 촬영된 것이라 최신 정보는 아니지만 필요한 기본 도구는 위와 같다. 현재 .NET MF 버전 4.3이 출시되어 있으며 Visual Studio 2012를 지원한다. 자세한 내용은 여기서 참고할 수 있다.

최근의 블로그 포스팅을 보면 VS 2013 버전용으로 통합작업을 진행 중이며 향후 몇 주 안에 출시될 예정이라고 한다. Express 버전의 무료 툴이 있으며, Mac이나 Linux에서는 Windows VM과 VS을 쓰거나, Monodevelop을 이용해서 개발할 수 있다.

 

디바이스 형태

디바이스 형태에는 다음과 같은 4가지로 분류할 수 있다.

  1. Arduino 스타일
    image
    • Netduino, Netduino Plus
    • FEZ Panda 류
  2. 소켓 스타일
    image
    image
    image
    • .NET Gadgeteer
    • Netduino GO!
  3. 개발용 보드
  4. 소형 형태
    • Netduino Mini
    • FEZ Mini, Cerb40
    • GHI G120

image

아두이노 호환보드

image

표준화된 소켓을 이용한 히드라 보드

image

image

다양한 소켓 방식의 모듈과 전원 공급을 제어할 수 있는 4개의 릴레이가 적용된 보드(맨 우측)

image

넷두이노 미니가 들어간 게임 디바이스

아키텍쳐

image

아두이노와 유사하게 개발용 머신과 타겟 디바이스가 있으며, 개발-컴파일-배포-디버깅은 개발용 머신에서 작업을 한다. 타겟 디바이스에서는 부트로더 펌웨어가 NETMF Runtime을 로드하고 중간 언어로 컴파일된 코드를 실행한다.

용도

image

메이커들이 .NET MF로 만드는 프로젝트들의 리스트이다. 시계에서부터 수족관 제어, 로봇, IoT 디바이스 등 다양한 것을 만들 수 있다. 홈 모니터링/보완도 큰 분야 중에 하나이다. TCP/IP가 구현된 초소형 웹서버를 구동할 수 있다.

.NET MF를 이용하는 가장 큰 목적은 하드웨어 아이디어를 빠르게 프로토타이핑하는 것이다. 또한, 개발 스킬을 연습할 수 있는데, 저용량 메모리와 저전력의 CPU파워, 적은 분량의 코드로 작성을 해야 하기 때문이다. C# 개발자들에게는 C나 어셈블리를 배우지 않고도 디바이스 개발을 할 수 있다는 것이 장점이다.

사례

image

게임기

image

윈도우폰으로 잔디 스프링클러를 동작하는 사례

image

음악 악기 사례

image

플로피 디스크로 스타워즈 테마곡 연주

image

센서로 전방을 인식해서 이동하는 로봇

개발

image

VS에서 새 프로젝트 메뉴를 실행하여 Visual C# > Micro Framework를 선택하면 위와 같이 Netduino 어플리케이션 프로젝트를 생성할 수 있다.

image

Program.cs 파일을 열면 위와 같은 코드를 볼 수 있다. Reference 추가를 통해서 버튼, LED, 가변저항을 처리하는 라이브러리를 불러와서 사용할 수 있다.

image

일반 프로젝트와 다른 점은 Main() 함수의 마지막에 Thread.Sleep(Timeout.Infinite); 를 추가해서 프로그램이 계속 실행되도록 하는 점이다.

완성된 코드를 Build하고 Start Debugging을 실행하면 된다.

image

하단의 버튼을 눌렀을 때 좌측 상단의 LED가 들어오는 것을 확인할 수 있다.

image

Breakpoint를 이용해서 Debug를 할 수 있다.

image

위 사진은 보드에 연결한 MIDI 모듈과 MIDI 인터페이스 신디사이저를 연결한 데모이다.

image

Gadgeteer 모듈을 드래그앤드롭으로 디자인할 수 있는 화면이다. 좌측 상단에 MIDI 인터페이스 모듈을 볼 수 있다.

image

우측 상단의 터치 패널을 통해서 일종의 음악을 만드는 디바이스 데모이다.

image

이 데모는 손 아래 쪽에 있는 초음파 거리 센서를 이용해서 측정한 손과 보드 사이의 거리를 MIDI 음으로 변환하여 소리를 연주하는 데모이다.

image

image

ParallaxPingModule로 거리를 측정하는 코드이다.

image

_ping.GetDistance(…)를 이용하여 거리 값을 측정한 후에 거리에 따라 음을 만들고, midi.SendNoteOn(…)으로 소리를 보낸다.

image

.NET Gadgeteer 어플리케이션을 만드는 화면이다. Micro framework 대신 Gadgeteer를 선택하였다.

image

Program.gadgeteer 파일을 열고 위와 같이 드래그앤드롭으로 보드와 모듈들을 배치하고 소켓을 연결시킨다. 각 모듈 밑에 button, led라는 인스턴스 이름을 지정할 수 있다. 위와 같은 방식으로 실제 보드와 모듈도 연결시킨다.

image

Program.generated.cs 파일을 열어보면 위와 같이 초기화 코드가 생성되어 있다. 이 프로젝트의 경우 Thread.Sleep(Timeout.Infinity)가 필요 없다.

image

위와 같이 button, led 인스턴스를 이용하여 동작 코드만 작성하면 실행시킬 수 있다.

image

버튼을 눌러서 초록색 LED를 점등하는 화면이다. 소켓 방식을 이용한 Gadgeteer를 이용하면 보다 쉽게 하드웨어 프로젝트를 만들어 볼 수 있다.

여기까지 간단히 .NET Micro Framework를 살펴보았다. 최근 메이커 커뮤니티가 커지면서 많은 사람들이 직접 하드웨어를 만드는 취미 생활을 가지고 있다. 또한, 미국에서는 이러한 취미 활동이 보다 전문화 되면서 대기업들도 관심을 가지고 관련 산업이 점차 커지고 있는 추세라고 한다. .NET Micro Framework도 최근 1~2년간 별다른 업데이트가 없다가, 최근에 IoT의 유행과 함께 다시 주목을 받으며 마이크로소프트에서도 IoT 전담 팀이 꾸려지고 Visual Studio 2013 버전용으로 새로 개발이 시작되었다. 앞으로 어떻게 변화하고 응용될지 관심을 가지고 지켜보면 재미있을 것 같다.

image

참고로 IoT는 다양한 디바이스 크기에 따라 개발 플랫폼이 다르게 구성될 수 있다. .NET Micro Framework는 가장 작은 Micro 수준의 디바이스용으로 만들어진 플랫폼이다. IoT 디바이스 분류 및 기술에 대해서는 여기를 참고하자.

윈도우와 IoT

이번 Build 2014 컨퍼런스에서 진행되었던 세션들이 온라인에서 다시 볼 수 있는데, 그 중에 가장 조회수가 높은 윈도우와 IoT 세션에 대해서 리뷰를 해보고자 한다.

이 세션은 OS 그룹의 IoT팀의 Steve Teixeira라는 Director가 발표를 하였다.

iot 

여러 가지 IoT 세션들이 빌드에서 진행되었지만, 이 세션은 디바이스에 좀 더 초점을 맞췄다고 한다. 이 영역은 키보드나 마우스가 없으며 우리가 일반적으로 생각하는 컴퓨팅과는 다른 형태이고 인터랙션 방식도 다르다.

iot001

iot002

image

image

2020년까지 2천억개의 디바이스가 연결될 거라는 전망이 있다

IoT 디바이스의 구분은 크기에 따라 다음과 나누어 볼 수 있는데 그 활용이나 기술 구성은 사뭇 다르다. 첫번째 줄은 응용 영역, 두번째 줄은 기술 구성, 세번째 줄은 관련 Microsoft 기술이다.

image

그리고 이러한 디바이스들은 Azure M2M과 같은 클라우드를 통해 디바이스 관리, 명령, 제어, 데이터 분석 등을 제공할 수 있다. (관련 학습 동영상)

image

Build 2014 키노트에서 소개되었던 Intel의 Galileo 보드와 Sharks Cove라는 보드, 마이크로소프트에서 만든 무선 라우터 제품(Windows CE가 들어가는 제품으로 몇 년 전에 생산했었다고 함) 들을 세션에서 잠깐 소개하였다.

image

Micro 레벨에서 사용되는 .NET Micro Framework를 설명한다. 오픈소스이며, 런타임 퍼포먼스, 모던 랭귀지, 비주얼 스튜디오 측면에서 투자를 확대하고 있다.

image

.NET Micro Framework을 사용해서 아두이노 프로젝트를 할 수 있는 오픈소스 플랫폼인 netduino도 있는데, 올 봄에 Azure용 SDK를 출시한다고 한다.

image

좌측 화면에 발표자 옆의 라이트를 어떻게 만들었는지 살펴보고 있다. Netduino Plus 2, 라이트를 제어하는 릴레이 모듈, shorky bits(?), 블루투스 모듈 등이 들어있다.

image

솔루션을 자세히 보면, Netduino 프로젝트와 Windows Phone 프로젝트가 있고, WP앱에서 블루투스로 Netduino로 통신을 하는 구조이다. 소스 코드 상으로는 GPIO 인터페이스를 이용하여 LED를 제어하고 있고, 그 밑에는 블루투스 통신으로 들어오는 데이터를 처리하는 이벤트 핸들러 DataReceived 등이 보인다. Netduino 에서 WP앱의 신호를 받아서 처리하는 부분의 코드이다.

image 

WP앱 코드에서는 StreamSocket으로 블루투스 디바이스에 접속하여, 버튼을 눌렀을 때 신호를 보내는 코드가 작성되어 있다.

image

다음은 Small과 Mobile에 걸쳐있는 Connected Car를 살펴 본다.

image

마이크로소프트는 15년 이상 이 영역에 투자를 했는데 이미 여러 가지 사례들이 있다.

image

개인적으로 Ford의 대시보드와 Sync 솔루션을 접해보았는데, 그 동안은 UX 측면에서 느린 반응성이나 음성 인식의 부정확성, 인터페이스의 불편함 등으로 아직은 많이 부족하다는 생각이 들었다.

image

앞으로는 디바이스를 가지고 차와 연동하는 시나리오가 많아질 것이라고 한다. 이런 시스템을 IVI(in-vehicle-infotainment)라고 하는 듯.

image 

위 스크린샷의 윈도우 로고가 윈도우8인 것을 보니 최신 버전의 Car OS 사례인 듯 하다.

다음은 IVI+Windows의 컨셉카 데모 화면이다.(동영상의 0:30:36 부분)

image

image

image

image

마지막 화면은 앱과 마켓플레이스 컨셉을 나타내는 화면인데, 서드파티 앱 개발사들이 여기에 참여해서 카앱을 개발하여 경험을 확대할 수 있다. 파킹 앱이라던지… 안전한 운전을 위한 앱 가이드라인 등이 있어야 할 것이라는 얘기도 언급했다.

image

image

image

image

이 프로토타입은 Window Store App으로 개발되었는데, 개인적으로는 이러한 스타일이 자동차 UI에 가장 적절하고 효과적이라고 생각한다. 디자인 컨셉이 원래 복잡한 지하철이나 공항의 사인처럼 빠른 정보 제공을 할 수 있는 디자인을 추구한 것이라 자동차에서도 효과적으로 적용될 수 있을 것이라고 본다.

image 

image

image

image

image

image

image

커넥티트카 데모는 여기까지.

다음은 Small 디바이스 영역에 해당하는 내용이다. 여기는 Windows Embedded Compact가 활용된다.

image

image

새로운 Windows Embedded Compact 2013을 발표했다. Visual Studio 2013을 지원하고, Wi-Fi 접속이 개선되었다.

다음은 모바일 영역의 Windows Embbed Handheld를 소개한다.

image

image

기술 및 제품이 많아서 좀 헷깔릴 수 있는데, 작은 사이즈 부터 적용할 수 있는 기술/제품은 .NET Micro Framework > Windows Embedded > Windows Embedded Handheld > Windows Embedded Industry로 구성된다.

Assigned Access은 생산, 리테일, 배송 등의 영역에서 개인 보다는 역할에 타겟팅하여 디바이스 프로파일을 제공하는 기능이다. Enterprise App Development는 기업용 앱을 개발하여 이를 쉽게 탑재하는 기능이며, Device Management는 대규모의 배포에 최적화된 기능이다. 수많은 디바이스의 설정을 관리하는 등에 활용할 수 있다. Industry Standard APIs for Peripherals는 리테일 등에서 사용하는 다양한 주변기기를 지원하기 위한 산업 표준 API를 제공하여 꽂으면 바로 동작하게 하는 기능이다.

다음은 Windows Handhelds 8.1이 적용된 디바이스의 사례이다.

image

image

컨슈머용 제품과 비슷하게 보이지만 이 영역의 디바이스들은 대체로 내구성이 가장 중요한 핵심 요소라고 한다. 10피트 높이에서 콘크리트에 떨어뜨려도 문제 없도록 디자인되었다고 하는 ToughPad. 산업 현장에서 쓰기 위한 용도의 디바이스이다.

이런 디바이스들은 개인용이 아니라, 기업의 특정 직업군(역할) 프로파일을 제공하기 때문에 해당하는 역할에 맞게 최적화를 할 수 있는데, 예를 들어 다음과 같이 XML 설정 파일을 통해 시작화면에 보여줄 앱을 지정하거나, 버튼을 커스터마이징 하는 등의 설정이 가능하다.

image

다음은 특정 역할 프로파일로 로그인하는 데모이다.

image

게스트로 로그인을 하니까, 다음과 같은 커스터마이징된 시작화면이 나왔다.(좀 썰렁하게 설정되어 있다…)

image image image

다음은 Associate 로 로그인한 화면이다.

image image image

다음은 Manager로 로그인한 화면.

image image

매니저는 게임도 할 수 있다…

다음은 대형(Large) 디바이스의 사례이다.

image

image

로봇부터 의료 장비, 디지털 사이니지, ATM까지 다양한 시나리오의 디바이스가 있다.

올 봄에 Windows Embbedded 8.1 Industry Update를 출시한다고 한다.

image

개발자 경험이 향상되었고, 앱 개발이나 직접 배포(side-loading), 데스크탑-스토어앱 통신 등이 가능하다. UX가 개선되었고, 적은 메모리와 하드웨어 비용이 사용된다.

Embbed Lockdown Manager에서는 여러 가지 설정을 할 수 있는데, 사용자들이 Windows 제스쳐, 키보드의 Windows 키 등을 이용해서 네비게이션 못 하도록 각각 설정하는 등이 가능하다. USB 디바이스도 필터를 이용해서 제어가 가능하다.

image

애플리케이션 설정에서는 사용자 그룹과 기본 실행/실행 가능한 앱과 키오스크 모드(키오스크 시나리오를 위해서 하나의 앱이 전면으로 실행되는 기능)의 사용 여부 등을 설정할 수 있다. 미리 설정한 Kiosk 프로필로 로그인하면 아래와 같이 바로 키오스크 모드로 기본 앱이 실행된다.

image

image

image

다음은, 앞서 잠깐 언급한 향후 Atom 기반 태블릿에 적용될 SoC 칩 기반의 Sharks Cove 보드이다.

image

마지막으로 Small~Micro 영역의 디바이스에서 실행되는 윈도우이다.

image

5mm 짜리 PC인 Quark SoC이다.(CPU가 아니라 그냥 PC라고 강조함)

image 

이를 이용해서 개발한 보드가 Galileo이다.

image

image

Scalar instruction set architecture가 적용된 것이 다른 기존 32비트 x86 칩과 다른 점이다.

갈릴레오에 적용된 Windows에 Telnet으로 접속한 화면이다.

image 

CPP로 작성하여 빌드한 exe 실행파일을 Galileo로 복사하여 텔넷 화면에서 실행하고 있다.

image

image

그리고 정리. 지금 시작할 수 있는 것들…

image

현장에서 Galileo를 팔았으면 하나 샀을지도 모르겠다.

이 사이트(http://www.windowsondevices.com)에서 올 봄에 출시할 SDK와 샘플, 문서 등을 제공할 예정이다.

잘 알려지지는 않았지만 이미 다양한 디바이스 시나리오에 맞는 다양한 버전의 윈도우가 제공되고 있고, 안드로이드 등과의 경쟁 때문에라도 다시 이 임베디드 영역에 많은 투자를 하는 모습이다. .NET Micro Framework와 Windows Embbed, 그리고 Netduino, Galileo, Sharks Cove와 같은 보드에 관심을 가져볼만 하다는 생각이 든다.