Microsoft MVP성태의 닷넷 이야기
사물인터넷: 1. .NET Micro Framework - 넷두이노 플러스 [링크 복사], [링크+제목 복사],
조회: 26255
글쓴 사람
정성태 (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/
정성태

... 31  32  33  34  35  36  37  38  39  [40]  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12666정성태6/10/20218611.NET Framework: 1067. 별도 DLL에 포함된 타입을 STAThread Main 메서드에서 사용하는 경우 CoInitializeSecurity 자동 호출파일 다운로드1
12665정성태6/9/202110018.NET Framework: 1066. Wslhub.Sdk 사용으로 알아보는 CoInitializeSecurity 사용 제약파일 다운로드1
12664정성태6/9/20218388오류 유형: 723. COM+ PIA 참조 시 "This operation failed because the QueryInterface call on the COM component" 오류
12663정성태6/9/202110042.NET Framework: 1065. Windows Forms - 속성 창의 디자인 설정 지원: 문자열 목록 내에서 항목을 선택하는 TypeConverter 제작파일 다운로드1
12662정성태6/8/20218982.NET Framework: 1064. C# COM 개체를 PIA(Primary Interop Assembly)로써 "Embed Interop Types" 참조하는 방법파일 다운로드1
12661정성태6/4/202119798.NET Framework: 1063. C# - MQTT를 이용한 클라이언트/서버(Broker) 통신 예제 [4]파일 다운로드1
12660정성태6/3/202110768.NET Framework: 1062. Windows Forms - 폼 내에서 발생하는 마우스 이벤트를 자식 컨트롤 영역에 상관없이 수신하는 방법 [1]파일 다운로드1
12659정성태6/2/202112045Linux: 40. 우분투 설치 후 MBR 디스크 드라이브 여유 공간이 인식되지 않은 경우 - Logical Volume Management
12658정성태6/2/20219363Windows: 194. Microsoft Store에 있는 구글의 공식 Youtube App
12657정성태6/2/202110713Windows: 193. 윈도우 패키지 관리자 - winget 설치
12656정성태6/1/20218963.NET Framework: 1061. 서버 유형의 COM+에 적용할 수 없는 Server GC
12655정성태6/1/20218308오류 유형: 722. windbg/sos - savemodule - Fail to read memory
12654정성태5/31/20218344오류 유형: 721. Hyper-V - Saved 상태의 VM을 시작 시 오류 발생
12653정성태5/31/202111112.NET Framework: 1060. 닷넷 GC에 새롭게 구현되는 DPAD(Dynamic Promotion And Demotion for GC)
12652정성태5/31/20219197VS.NET IDE: 164. Visual Studio - Web Deploy로 Publish 시 암호창이 매번 뜨는 문제
12651정성태5/31/20219378오류 유형: 720. PostgreSQL - ERROR: 22P02: malformed array literal: "..."
12650정성태5/17/20218624기타: 82. OpenTabletDriver의 버튼에 더블 클릭을 매핑 및 게임에서의 지원 방법
12649정성태5/16/202110129.NET Framework: 1059. 세대 별 GC(Garbage Collection) 방식에서 Card table의 사용 의미 [1]
12648정성태5/16/20218828사물인터넷: 66. PC -> FTDI -> NodeMCU v1 ESP8266 기기를 UART 핀을 연결해 직렬 통신하는 방법파일 다운로드1
12647정성태5/15/202110032.NET Framework: 1058. C# - C++과의 연동을 위한 구조체의 fixed 배열 필드 사용파일 다운로드1
12646정성태5/15/20219161사물인터넷: 65. C# - Arduino IDE의 Serial Monitor 기능 구현파일 다운로드1
12645정성태5/14/20218896사물인터넷: 64. NodeMCU v1 ESP8266 - LittleFS를 이용한 와이파이 접속 정보 업데이트파일 다운로드1
12644정성태5/14/20219959오류 유형: 719. 윈도우 - 제어판의 "프로그램 및 기능" / "Windows 기능 켜기/끄기" 오류 0x800736B3
12643정성태5/14/20219208오류 유형: 718. 서버 유형의 COM+ 사용 시 0x80080005(Server execution failed) 오류 발생
12642정성태5/14/202110165오류 유형: 717. The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
12641정성태5/13/20219862디버깅 기술: 179. 윈도우용 .NET Core 3 이상에서 Windbg의 sos 사용법
... 31  32  33  34  35  36  37  38  39  [40]  41  42  43  44  45  ...