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 에서 메시지 확인해보기

사전 준비 사항

https://github.com/Azure/azure-iot-explorer/releases 에서 자신의 환경에 맞는 설치파일을 다운로드 합니다. 윈도우 OS 사용자는 msi 파일을 받습니다.

현재 Azure IoT Explorer 프로그램은 preview 버전으로, 일부 기능들이 정상 동작하지 않습니다.

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