AWS IoT

IoT 디바이스의 역할 및 요구사항 정의

임베디드 친구 2025. 4. 2. 10:13
728x90
반응형

IoT 디바이스의 역할 및 요구사항 정의

1. IoT 디바이스란?

IoT(Internet of Things) 디바이스는 인터넷에 연결되어 데이터를 수집하고, 처리하며, 클라우드 또는 다른 디바이스와 통신하는 장치를 의미합니다. IoT 디바이스는 센서를 활용해 환경 정보를 측정하고, 네트워크를 통해 데이터를 전송하여 실시간 모니터링과 자동화를 가능하게 합니다.

AWS IoT 디바이스는 AWS IoT Core와 연동되어 데이터를 송수신하며, 이를 통해 클라우드에서 디바이스를 관리하고 분석할 수 있습니다. 본 포스팅에서는 AWS IoT 디바이스의 역할과 요구사항을 정의하고, ESP32를 이용한 예제 코드를 제공합니다.


2. IoT 디바이스의 주요 역할

IoT 디바이스는 일반적으로 다음과 같은 역할을 수행합니다.

  1. 데이터 수집: 센서를 통해 온도, 습도, 조도 등 다양한 환경 정보를 측정합니다.
  2. 데이터 전송: 측정된 데이터를 MQTT, HTTP, WebSocket 등의 프로토콜을 이용하여 클라우드(AWS IoT Core)로 전송합니다.
  3. 명령 수신 및 처리: AWS IoT Core에서 전송한 명령을 수신하고, 이에 따라 동작을 수행합니다.
  4. 자동화 및 제어: 특정 조건이 충족되면 자체적으로 동작하거나, 클라우드에서 내려온 명령에 따라 기기를 제어합니다.
  5. 보안 유지: IoT 디바이스는 AWS IoT 인증서 기반의 보안 프로토콜을 준수해야 합니다.

3. IoT 디바이스의 요구사항 정의

IoT 디바이스는 안정적인 운영을 위해 다음과 같은 요구사항을 만족해야 합니다.

3.1. 하드웨어 요구사항

  • 마이크로컨트롤러 (MCU): ESP32와 같은 저전력 Wi-Fi 또는 BLE 지원 MCU 사용
  • 센서: 온도 센서(예: DHT22, DS18B20) 등 환경 데이터를 측정할 센서 포함
  • 네트워크 모듈: Wi-Fi 또는 LoRa, Zigbee 등의 네트워크 모듈 포함
  • 전원 관리: 배터리 구동 가능 또는 안정적인 전력 공급 필요

3.2. 소프트웨어 요구사항

  • 펌웨어 개발 환경: ESP-IDF 또는 Arduino IDE 지원
  • AWS IoT SDK 지원: AWS IoT Device SDK for Embedded C 적용
  • 네트워크 프로토콜: MQTT, HTTP, WebSocket 지원
  • 보안 프로토콜: TLS 기반 암호화 및 AWS IoT 인증서 사용

3.3. 보안 요구사항

  • 디바이스 인증: AWS IoT Core의 X.509 인증서 기반 인증 사용
  • 데이터 암호화: TLS 1.2 이상을 이용한 안전한 데이터 전송
  • 펌웨어 업데이트: OTA(Over-The-Air) 업데이트 기능 포함

4. IoT 디바이스 예제 코드 (ESP32 + AWS IoT)

다음은 ESP32와 AWS IoT Core를 연동하는 예제 코드입니다. ESP-IDF 환경에서 AWS IoT Device SDK for Embedded C를 활용하여 온도 데이터를 주기적으로 AWS IoT Core로 전송합니다.

4.1. 프로젝트 설정

ESP32에서 AWS IoT와 통신하기 위해 AWS IoT SDK를 설정해야 합니다. 다음과 같은 단계가 필요합니다.

  1. ESP-IDF 설치 (ESP32 개발 환경 구성)
  2. AWS IoT 인증서 발급 (AWS IoT Core에서 X.509 인증서 생성)
  3. ESP32와 AWS IoT Core 연결 설정 (MQTT 기반 통신)

4.2. ESP32 코드 (C언어)

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "mqtt_client.h"
#include "driver/gpio.h"

#define AWS_IOT_BROKER "your-aws-iot-endpoint"
#define AWS_IOT_PORT 8883
#define AWS_CLIENT_ID "ESP32_IoT_Device"

// 온도 센서 데이터 가정 (실제 센서 사용 시 센서 라이브러리 필요)
float get_temperature() {
    return 25.0 + (rand() % 100) / 10.0;
}

static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
    ESP_LOGI("MQTT", "Event received: %d", event_id);
}

void mqtt_app_start(void) {
    esp_mqtt_client_config_t mqtt_cfg = {
        .uri = "mqtts://" AWS_IOT_BROKER,
        .port = AWS_IOT_PORT,
        .client_id = AWS_CLIENT_ID,
    };

    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
    esp_mqtt_client_start(client);

    while (1) {
        float temperature = get_temperature();
        char payload[50];
        snprintf(payload, sizeof(payload), "{\"temperature\": %.2f}", temperature);
        esp_mqtt_client_publish(client, "iot/device/temperature", payload, 0, 1, 0);
        ESP_LOGI("MQTT", "Published: %s", payload);
        vTaskDelay(pdMS_TO_TICKS(5000));
    }
}

void app_main(void) {
    nvs_flash_init();
    mqtt_app_start();
}

5. AWS IoT 서버 예제 (Python)

AWS IoT Core에 등록된 디바이스로부터 데이터를 수신하고 분석하는 Python 코드를 작성할 수 있습니다. boto3 라이브러리를 활용하여 AWS IoT Core와 상호작용합니다.

5.1. AWS IoT Core에서 데이터 수신 (Python)

import boto3
import json

iot_client = boto3.client('iot-data', region_name='us-east-1')

def get_temperature_data():
    response = iot_client.get_thing_shadow(thingName="ESP32_IoT_Device")
    payload = json.loads(response['payload'].read())
    temperature = payload['state']['reported']['temperature']

    if temperature > 30.0:
        print(f"경고: 높은 온도 감지 ({temperature}°C)")
    else:
        print(f"현재 온도: {temperature}°C")

if __name__ == "__main__":
    get_temperature_data()

6. 결론

IoT 디바이스는 AWS IoT Core와 통신하면서 데이터를 수집하고 전송하는 역할을 수행합니다. 이를 위해 하드웨어 및 소프트웨어 요구사항을 충족해야 하며, 보안이 중요한 요소로 작용합니다.

이번 포스팅에서는 ESP32를 활용한 IoT 디바이스 예제와 AWS IoT Core에서 데이터를 수신하는 Python 예제를 소개하였습니다. 이를 통해 IoT 디바이스가 AWS 클라우드와 연동되는 과정을 이해하고, 직접 구현할 수 있도록 하였습니다.

반응형