Microsoft MVP성태의 닷넷 이야기
사물인터넷: 1. .NET Micro Framework - 넷두이노 플러스 [링크 복사], [링크+제목 복사],
조회: 36945
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 7개 있습니다.)

.NET Micro Framework - 넷두이노 플러스

크리스마스 선물로 회사에서 ^^ 넷두이노를 받았습니다.

[70186D] 넷두이노 플러스 - 이더넷 기능 SD소켓 포함형 (Netduino Plus) 
; http://www.artrobot.co.kr/front/php/product.php?product_no=638

오~~~ 멋지죠? ^^

곧바로 다음의 웹 페이지를 보고 개발환경을 구성해 보았습니다.

개발 환경 구성
; http://netduino.com/downloads

다음은 설치해야 할 프로그램 목록입니다.

  1. Microsoft Visual C# Express 2010
  2. .NET Micro Framework SDK v4.1 (http://www.netduino.com/downloads/MicroFrameworkSDK.msi)
  3. 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)의 설치 구성 요소입니다.

netduino_startup_1.png

설치가 완료되면 "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가 환하게 빛납니다.

netduino_startup_2.png

그리고 윈도우의 장치 관리자(Device Manager)에 보면 "Universal Serial Bus controllers" 노드에 "Netduino" 항목이 추가된 것을 확인할 수 있습니다. (장치 관리자는 항상 띄워놓는 것이 좋습니다. 가끔씩 넷두이노로 프로그램 배포가 실패하는 것을 장치가 없어지는 것을 보고 판단할 수 있습니다. 이런 때면 USB케이블을 빼고 다시 연결해 주면 됩니다.)

그리고 Visual Studio의 프로젝트 속성창에서 USB 영역을 선택하면 "Device" 콤보상자에 "NetduinoPlus_NetduinoPlus" 항목이 보이는데 이를 선택해 줍니다.

netduino_startup_3.png

^^ 자, 이제 본격적인... 이 아니라 아주 기초적인 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 불이 들어오고, 떼면 불이 꺼집니다.

그나저나, 웹 검색을 해보면 역시나 넷두이노 같은 것은 저 같은 순수 소프트웨어 개발자 입장에서는 별다르게 응용해 볼 것이 없는 것 같습니다. 그래도 아이디어를 한번 내봐야지요. ^^

어쨌든, 오늘은 여기까지! ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/28/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2013-01-07 01시08분
정성태
2013-08-12 11시50분
GPS 모듈(UST-SNR-GPS)을 아두이노에 연결하기(1/2)
; http://cafe.naver.com/studyonarduino/296
정성태
2014-01-23 04시45분
10 Interesting .NET Micro Framework Demos and Applications
; http://10rem.net/blog/2011/01/19/10-interesting-net-micro-framework-demos-and-applications
정성태
2014-04-29 07시05분
Building a Netduino-Based HID Sensor for WinRT
; http://msdn.microsoft.com/en-us/magazine/dn605878.aspx
정성태
2014-11-28 07시58분
정성태
2016-08-09 01시01분
아두이노 개발 시작
; http://blog.naver.com/infopub/220783120299
정성태
2016-08-09 04시56분
아두이노를 사용한 에어콘 자동 조절기 만들기 (스마트 홈, 스마트 오피스)
; http://blog.poin2.com/2015/06/%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8-%EC%97%90%EC%96%B4%EC%BD%98-%EC%9E%90%EB%8F%99-%EC%A1%B0%EC%A0%88%EA%B8%B0/
정성태

... 61  62  63  64  65  66  67  68  69  70  71  72  73  74  [75]  ...
NoWriterDateCnt.TitleFile(s)
12153정성태2/23/202024255.NET Framework: 898. Trampoline을 이용한 후킹의 한계파일 다운로드1
12152정성태2/23/202021294.NET Framework: 897. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 세 번째 이야기(Trampoline 후킹)파일 다운로드1
12151정성태2/22/202023950.NET Framework: 896. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 - 두 번째 이야기 (원본 함수 호출)파일 다운로드1
12150정성태2/21/202024049.NET Framework: 895. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 [1]파일 다운로드1
12149정성태2/20/202020962.NET Framework: 894. eBEST C# XingAPI 래퍼 - 연속 조회 처리 방법 [1]
12148정성태2/19/202025592디버깅 기술: 163. x64 환경에서 구현하는 다양한 Trampoline 기법 [1]
12147정성태2/19/202020949디버깅 기술: 162. x86/x64의 기계어 코드 최대 길이
12146정성태2/18/202022147.NET Framework: 893. eBEST C# XingAPI 래퍼 - 로그인 처리파일 다운로드1
12145정성태2/18/202023740.NET Framework: 892. eBEST C# XingAPI 래퍼 - Sqlite 지원 추가파일 다운로드1
12144정성태2/13/202023952.NET Framework: 891. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 두 번째 이야기파일 다운로드1
12143정성태2/13/202018351.NET Framework: 890. 상황별 GetFunctionPointer 반환값 정리 - x64파일 다운로드1
12142정성태2/12/202022272.NET Framework: 889. C# 코드로 접근하는 MethodDesc, MethodTable파일 다운로드1
12141정성태2/10/202021247.NET Framework: 888. C# - ASP.NET Core 웹 응용 프로그램의 출력 가로채기 [2]파일 다운로드1
12140정성태2/10/202022624.NET Framework: 887. C# - ASP.NET 웹 응용 프로그램의 출력 가로채기파일 다운로드1
12139정성태2/9/202022276.NET Framework: 886. C# - Console 응용 프로그램에서 UI 스레드 구현 방법
12138정성태2/9/202028514.NET Framework: 885. C# - 닷넷 응용 프로그램에서 SQLite 사용 [6]파일 다운로드1
12137정성태2/9/202020179오류 유형: 592. [AhnLab] 경고 - 디버거 실행을 탐지했습니다.
12136정성태2/6/202021844Windows: 168. Windows + S(또는 Q)로 뜨는 작업 표시줄의 검색 바가 동작하지 않는 경우
12135정성태2/6/202027636개발 환경 구성: 468. Nuget 패키지의 로컬 보관 폴더를 옮기는 방법 [2]
12134정성태2/5/202024898.NET Framework: 884. eBEST XingAPI의 C# 래퍼 버전 - XingAPINet Nuget 패키지 [5]파일 다운로드1
12133정성태2/5/202022639디버깅 기술: 161. Windbg 환경에서 확인해 본 .NET 메서드 JIT 컴파일 전과 후 - 두 번째 이야기
12132정성태1/28/202025675.NET Framework: 883. C#으로 구현하는 Win32 API 후킹(예: Sleep 호출 가로채기) [1]파일 다운로드1
12131정성태1/27/202024370개발 환경 구성: 467. LocaleEmulator를 이용해 유니코드를 지원하지 않는(한글이 깨지는) 프로그램을 실행하는 방법 [1]
12130정성태1/26/202022001VS.NET IDE: 142. Visual Studio에서 windbg의 "Open Executable..."처럼 EXE를 직접 열어 디버깅을 시작하는 방법
12129정성태1/26/202028953.NET Framework: 882. C# - 키움 Open API+ 사용 시 Registry 등록 없이 KHOpenAPI.ocx 사용하는 방법 [3]
12128정성태1/26/202023091오류 유형: 591. The code execution cannot proceed because mfc100.dll was not found. Reinstalling the program may fix this problem.
... 61  62  63  64  65  66  67  68  69  70  71  72  73  74  [75]  ...