Quick Start - IoT hub 개발

IoT hub 무료 제품을 사용하여 Node.js 프로그램으로 실제 클라우드에 데이터를 전송해보는 방법을 설명합니다.

Azure 클라우드에 IoT hub 와 IoT 디바이스 만들기

1. 로그인 및 평가판 가입

https://portal.azure.com 으로 이동하여 Azure 클라우드 계정을 만들고, 로그인합니다. 이미 계정을 갖고 계신 경우 그 계정을 사용하셔도 됩니다. 로그인 하신 이후 평가판 시작을 클릭해 평가판 가입하시기 바랍니다.

모든 테스트가 끝난 이후에는 반드시 리소스를 모두 삭제하셔서 사용료가 결제되지 않도록 주의합니다.

그랜드뷰 관련 협력 파트너에게는 개발/테스트를 위한 IoT hub 환경을 무료로 제공해드립니다.

  • 디바이스 커넥션 스트링

  • Azure IoT Explorer 용 커넥션 스트링

2. 리소스 만들기

리소스 만들기 메뉴를 클릭해 범주의 사물 인터넷 클릭 후 맨위의 IoT Hob 만들기를 클릭합니다.

3. IoT Hub 만들기

리소스 그룹은 새로 만들기를 클릭하고, "iothubfree" 를 입력합니다. 지역은 한국 중부를 선택하고, IoT hub 이름은 고유한 ID 로 입력합니다.

관리 탭으로 이동합니다.

위 예제 이미지와 같이 F1: 무료 계층을 선택합니다. 무료 계층은 구독 당 1개로 제한되고, 몇 가지 고급 기능을 사용할 수 없지만 단순히 클라우드에 MQTT 메시지 보내는 개발/테스트 용도로 쓰기에는 충분합니다.

왼쪽 하단의 검토 + 만들기를 클릭하면 IoT hub 가 몇 분 후에 생성되며, 이후 IoT Hub 리소스로 이동합니다.

왼쪽 메뉴에서 모든 리소스를 클릭하고 검색창에 iothub 를 입력하면 쉽게 찾을 수 있습니다.

4. 디바이스 만들기

메뉴에서 탐색기의 IoT 디바이스를 클릭 후 새로 만들기를 클릭합니다.

디바이스 ID 에 사용할 적당한 ID 값을 입력하고 하단의 만들기를 클릭합니다. 만들어진 디바이스 ID를 클릭하면 아래의 화면이 보여집니다.

기본 연결 문자열은 커넥션 스트링입니다. 기본 연결 문자열 텍스트를 복사 합니다. 을 누르면 마스킹된 커넥션 스트링을 평문으로 볼 수 있으며, 텍스트 박스 오른쪽아이콘을 누르면 자동으로 커넥션 스트링 텍스트를 복사 합니다.

Node.js 테스트 프로그램으로 메시지 보내보기

https://nodejs.org/ko/ 에서 안정적인 버전을 다운로드 받고 설치 합니다. 설치 위치를 기록해두셨다가 nodejs 실행파일의 경로를 시스템 변수 PATH 에 등록하시기 바랍니다. 일반적으로 자동으로 PATH 등록이 진행되지만, 그렇지 못한 경우에는 수동으로 PATH 에 입력해야 할 수 있습니다.

Node.js 용 IoT 디바이스 샘플 어플리케이션을 제공해드립니다. 아래 링크를 클릭해서 다운로드 받으시고 적당한 위치에 압축을 푸시기 바랍니다.

쉘을 열어서 압축을 푼 위치로 이동합니다. 윈도우 OS 사용자는 cmd 명령으로 DOS 쉘을 여시면 됩니다.

PS C:\Users\mjher\Desktop\새 폴더> npm install
added 142 packages from 208 contributors and audited 142 packages in 9.4s

5 packages are looking for funding 
 run 'npm fund' for details
 
found 0 vulnerabilities 
 
PS C:\Users\mjher\Desktop\새 폴더>

쉘에 npm install 이라고 명령을 입력하면 package.json 파일에 지정된 npm 모듈들이 자동으로 설치됩니다.

SimulatedDevice.js 파일을 텍스트 에디터로 엽니다.

'use strict';

var connectionString = "붙여넣기";
var serviceId = "1";
var deviceId = "device";

var Mqtt = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var Message = require('azure-iot-device').Message;

var client = Client.fromConnectionString(connectionString, Mqtt);

//Timeout created by setInterval
var intervalLoop = null;

앞에서 copy 해두었던 커넥션 스트링을 붙여넣기라 되어 있는 부분에 넣습니다. 기존에 있던 붙여넣기 라는 문구는 삭제하시고 따옴표 내에 붙여넣으시기 바랍니다.

쉘에서 node SimulatedDevice.js 라고 입력합니다. js 파일이 위치한 같은 디렉토리/폴더 내에서 실행해야 합니다.

PS C:\Users\mjher\Desktop\새 폴더> node .\SimulatedDevice.Js
Client connected
message sent{"serviceId":"1","diviceId":"device","timestamp":1620772209308,"contents":{"temperature":22.857710189195238,"humidity":72.28566755017717,"illuminance":100}}
message sent{"serviceId":"1","diviceId":"device","timestamp":1620772210313,"contents":{"temperature":28.803487837307678,"humidity":62.10569874897759,"illuminance":100}}
message sent{"serviceId":"1","diviceId":"device","timestamp":1620772211323,"contents":{"temperature":30.632854507286666,"humidity":65.12026770091586,"illuminance":100}}
message sent{"serviceId":"1","diviceId":"device","timestamp":1620772212337,"contents":{"temperature":24.10516148628943,"humidity":61.45916004813632,"illuminance":100}}
message sent{"serviceId":"1","diviceId":"device","timestamp":1620772213351,"contents":{"temperature":25.96091841183808,"humidity":73.61279451435996,"illuminance":100}}
PS C:\Users\mjher\Desktop\새 폴더>

그러면 샘플 프로그램은 1초 간격으로 데이터를 IoT hub 로 전송합니다.

{
   "serviceId":"1",
   "deviceId":"device",
   "timestamp":1620772213351,
   "contents":{
      "temperature":25.96091841183808,
      "humidity":73.61279451435996,
      "illuminance":100
   }
}

이런 모습의 데이터입니다. 온도(temperature 필드), 습도(humidity 필드), 조도(illuminance 필드) 가 랜덤 값으로 채워져 1초 마다 서버로 전송됩니다. ctrl+c 를 누르면 프로그램을 멈출 수 있습니다.

이 샘플 프로그램의 구조는 IoT 디바이스를 개발하실 때 좋은 시작 지점이 될 것입니다. 아래와 같은 기본적인 기능들을 모두 포함하고 있기 때문입니다.

  • IoT hub 에 연결하기 위한 디바이스마다 고유하게 부여되는 커넥션 스트링 지정

  • 그랜드뷰 서비스에 데이터를 전송하기 위해 필요한 메시지 표준 구조 사용

  • 서버에 보낼 데이터를 얻고 JSON 으로 구조화

  • 주기적으로 서버에 데이터 전송

이외에도 IoT 디바이스가 사용할 수 있는 고급 기능들은 아래와 같습니다. 이런 주제들은 모두 따로 메뉴얼로 제공되고 있습니다.

  • Policy profile 을 통한 디바이스 원격 설정

    • 디바이스의 펌웨어가 configuration driven 방식으로 개발된 경우 개별 디바이스마다 설정을 따로 관리하고 원격에서 업데이트 가능

  • 펌웨어 OTA

    • 디바이스 펌웨어 원격에서 업데이트 가능

    • 단 원격 리부팅과 자동 펌웨어 업데이트가 구현되어 있어야 함

  • 원격 명령 전송

    • 펌웨어에 대한 원격 명령 전송

      • 리부팅 등과 같은 특정 동작 수행 가능

    • 설비에 대한 원격 명령 전송

      • 펌웨어가 설비에 대한 명령을 수신하고 설비에 해당 신호를 보내는 형식

IoT hub 에서 메시지 확인해보기

사전 준비 사항

Azure 포탈의 IoT hub 페이지 메뉴에서 공유 엑세스 정책을 클릭하고 iothubowner 를 선택하면 오른쪽에 패널이 나타납니다. 여기서 Primary connection string 을 복사합니다.

+ Add connection 을 클릭하고 복사했던 커넥션 스트링을 붙여넣은 후 저장합니다.

자동으로 만들었던 디바이스들이 표시됩니다.

Node.js 프로그램과 연결되어 있는 디바이스를 클릭합니다.

Telemetry 를 선택하고 Start 를 클릭합니다. 그러면 이 프로그램은 IoT hub 에 들어오는 메시지를 모니터링하게 됩니다.

Node.js 프로그램에서 데이터를 보내기 시작하면 아래 그림처럼 데이터를 수신하는 것을 확인할 수 있습니다.

서버에 실제로 데이터가 어떻게 흘러오는지 확인할 수 있습니다.

여기까지 개발이 되었다면 실제 그랜드뷰 서비스에 데이터를 보낼 수 있는 기본적인 준비가 끝났습니다. 하지만 샘플 프로그램은 말 그대로 샘플이며, 다양한 예외 상황에 대처할 수 있도록 펌웨어의 완성도를 높여야 합니다.

  • 통신이 완전히 불가능할 때 펌웨어가 어떻게 동작할지

  • 일시적인 통신 불안정으로 IoT hub 에 데이터를 보내지 못한 경우 데이터를 어떻게 처리할지

  • 데이터 원천에서 데이터를 얻지 못했을 때 펌웨어는 어떻게 동작할지

Azure SDK 를 기반으로 펌웨어를 개발하시는 것을 권고 드립니다. IoT hub 용 SDK 는 대표 언어 별로 제공되고 있으니 아래 URL 에서 확인하시기 바랍니다.

https://docs.microsoft.com/ko-kr/azure/iot-hub/iot-hub-devguide-sdks#azure-iot-hub-device-sdks

SDK 를 사용하지 않고 MQTT 메시지를 직접 분석하여 개발하는 방법도 있으며 Azure 클라우드에서 그것을 막지는 않습니다. 그러나 그 경우에는 개발 관련 기술지원이 전혀 불가능합니다.

샘플 코드와 SDK

마이크로소프트에서는 주요 언어 별 SDK 와 샘플코드를 Github 에서 제공하고 있습니다. 아래 페이지를 확인하여 필요한 SDK 와 샘플코드를 다운 받으시기 바랍니다.

Last updated

Was this helpful?