.NET Micro Framework - 넷두이노 플러스
크리스마스 선물로 회사에서 ^^ 넷두이노를 받았습니다.
[70186D] 넷두이노 플러스 - 이더넷 기능 SD소켓 포함형 (Netduino Plus)
; http://www.artrobot.co.kr/front/php/product.php?product_no=638
오~~~ 멋지죠? ^^
곧바로 다음의 웹 페이지를 보고 개발환경을 구성해 보았습니다.
개발 환경 구성
; http://netduino.com/downloads
다음은 설치해야 할 프로그램 목록입니다.
- Microsoft Visual C# Express 2010
- .NET Micro Framework SDK v4.1 (http://www.netduino.com/downloads/MicroFrameworkSDK.msi)
- Netduino SDK v4.1.0 (32-bit: http://www.netduino.com/downloads/netduinosdk_32bit.exe) or Netduino SDK v4.1.0 (64-bit: http://www.netduino.com/downloads/netduinosdk_64bit.exe)
제 경우에는 Visual Studio 2010이 이미 설치되어 있기 때문에 1번은 생략하고 2번과 3번을 다운로드 받아서 설치했습니다.
아래는 .NET Micro Framework SDK 4.1 (QFE1)의 설치 구성 요소입니다.
설치가 완료되면 "Microsoft Framework SDK Release Notes.txt" 파일이 열리는 데 다음의 사항 정도가 기억해 둘만 합니다.
=== New behavior ===
1) DPWS stack is compatible with Windows 7 WSDAPI and WCF4.0
2) Flexibility of the SPI interface has improved
3) Support for Big Endian devices
4) Support for Visual Studio 2010 with multi-targeting of previous .NET MF
assemblies and versions from the .NET 4.1 SDK
5) Addition of new SSL and TCP/IP stacks
Netduino SDK v4.1.0은 제 컴퓨터가 윈도우 8 64비트이기 때문에 64비트 버전을 설치했습니다.
모든 게 정상적으로 설치가 되었으면 Visual Studio 2010을 실행하고, "File" / "New" / "Project" 대화창을 띄우면 Visual C# 언어에 "Micro Framework" 범주가 보이고 그 안에 다음의 7개 프로젝트 템플릿이 보입니다.
- Class Library
- Console Application
- Device Emulator
- Netduino Application
- Netduino Mini Application
- Netduino Plus Application
- Window Application
제가 구매한 보드는 "Netduino Plus"이기 때문에 "Netduino Plus Application" 프로젝트를 선택해서 생성하면 다음과 같이 기본 코드가 Program.cs에 포함되어 있습니다.
/*
참조 DLL
- Microsoft.SPOT.Hardware (C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.1\Assemblies\le\Microsoft.SPOT.Hardware.dll)
* 기본적인 하드웨어 정보에 대한 내용을 관리
* Battery, Cpu, I2CDevice, InputPort, OutputPort, SerialPort, SPI, SystemInfo, Utility,...
- Microsoft.SPOT.Native (C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.1\Assemblies\le\Microsoft.SPOT.Native.dll)
* Debug, SPOT(Smart Personal Objects Technology), 암호화, 하드웨어, 메시징, 터치 등의 기능을 담당
- mscorlib (C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.1\Assemblies\le\mscorlib.dll)
* 닷넷 마이크로 프레임워크 실행의 기본이 되는 모듈
- SecretLabs.NETMF.Hardware (C:\Program Files (x86)\Secret Labs\Netduino SDK\Assemblies\v4.1\SecretLabs.NETMF.Hardware.dll)
* 넷두이노 제조업체에서 제공, AnalogInput, PWM 클래스 제공
- SecretLabs.NETMF.Hardware.Netduino (C:\Program Files (x86)\Secret Labs\Netduino SDK\Assemblies\v4.1\SecretLabs.NETMF.Hardware.Netduino.dll)
* BaudRates, InterruptModes, Pins, RegistorModes, SerialPorts, SPI_Devices 클래스 제공
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
namespace NetduinoApplication1
{
public class Program
{
public static void Main()
{
// write your code here
}
}
}
자, 이제 Netduino를 USB 케이블로 컴퓨터에 연결해 볼까요? ^^ 정상적으로 연결되면, 아래의 사진에서는 잘 보이지 않지만 PWR라는 글자 아래의 LED가 환하게 빛납니다.
그리고 윈도우의 장치 관리자(Device Manager)에 보면 "Universal Serial Bus controllers" 노드에 "Netduino" 항목이 추가된 것을 확인할 수 있습니다. (장치 관리자는 항상 띄워놓는 것이 좋습니다. 가끔씩 넷두이노로 프로그램 배포가 실패하는 것을 장치가 없어지는 것을 보고 판단할 수 있습니다. 이런 때면 USB케이블을 빼고 다시 연결해 주면 됩니다.)
그리고 Visual Studio의 프로젝트 속성창에서 USB 영역을 선택하면 "Device" 콤보상자에 "NetduinoPlus_NetduinoPlus" 항목이 보이는데 이를 선택해 줍니다.
^^ 자, 이제 본격적인... 이 아니라 아주 기초적인 LED 깜빡이는 예제를 작성해 보겠습니다.
넷두이노 보드에는 기본적으로 1개의 LED가 장착되어 있습니다. LED는 출력에 해당하므로 OutputPort 클래스를 선택하고 다음과 같이 코딩해 줍니다.
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
// Pins.ONBOARD_LED == 보드에 있는 LED 지정
// false == LED 초기 상태 지정 (만약 이 값이 true이면 LED가 켜짐)
그다음부터는 그냥 무한 루프를 돌며 LED에 true/false 값을 반복적으로 쓰기만 하면 LED가 깜빡이는 효과를 얻을 수 있습니다.
public static void Main()
{
bool ledOn = false;
OutputPort led = new OutputPort(Pins.ONBOARD_LED, ledOn);
while (true) // 일반적인 프로그램은 종료를 가정하고 프로그램을 만들겠지만, robotics 분야에서는 무한 루프가 보통 사용되지요.
{
led.Write(ledOn = !ledOn);
Thread.Sleep(1000);
}
}
이렇게 만들고 Ctrl + F5 키를 누르면 넷두이노에 배포 후 LED가 깜빡이는 것을 볼 수 있습니다. 물론, F5 키를 눌러 디버깅도 가능합니다. BP(Breakpoint)도 걸리고 변수값도 확인 됩니다.
넷두이노 보드에는 기본적으로 스위치가 하나 제공되는 데 이것은 "입력"으로 사용될 수 있습니다. 이것을 사용하는 예제로 다음의 글을 참고했습니다.
[Netduino] LED에 불이 깜빡깜빡!
; http://talkingaboutme.tistory.com/218
코드는 동일하게 따라 했습니다.
public static void Main()
{
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
InputPort sw1 = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);
bool switchState = false;
while (true)
{
switchState = sw1.Read();
led.Write(!switchState);
}
}
InputPort의 값이 저같은 비전공자에게는 생소합니다. 2번째(glitch), 3번째(resistor) 인자의 값이 문제인데요. 자세한 설명은 위의 글을 참고하세요. ^^
이 예제를 실행하면 스위치를 누른 경우 Read에서는 false를 반환하고, 누르지 않은 경우에 true를 반환합니다. "
[Netduino] LED에 불이 깜빡깜빡!" 글에 의하면 펌웨어가 구버전이어서 그렇다고 하는데요. 암튼, 그래서 위에서는 led.Write에 switchState값을 NOT 연산자로 바꿔서 전달하고 있습니다.
실행하면 보드위의 스위치를 누르면 LED 불이 들어오고, 떼면 불이 꺼집니다.
그나저나, 웹 검색을 해보면 역시나 넷두이노 같은 것은 저 같은 순수 소프트웨어 개발자 입장에서는 별다르게 응용해 볼 것이 없는 것 같습니다. 그래도 아이디어를 한번 내봐야지요. ^^
어쨌든, 오늘은 여기까지! ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]