AWS IoT

AWS DynamoDB 및 Grafana를 이용한 실시간 온도 데이터 시각화

임베디드 친구 2025. 4. 17. 15:06
728x90
반응형

AWS DynamoDB 및 Grafana를 이용한 실시간 온도 데이터 시각화

안녕하세요, '소프트웨어 공장' 블로그를 방문해주셔서 감사합니다. 이번 포스팅에서는 AWS IoT를 활용한 실시간 온도 모니터링 시스템 구축 프로젝트에서, AWS DynamoDBGrafana를 이용하여 온도 데이터를 실시간으로 시각화하는 방법에 대해 설명하겠습니다.

이 프로젝트에서는 ESP32를 IoT 디바이스로 활용하여 온도 데이터를 수집하고, 이를 AWS IoT Core에 전송합니다. 서버에서는 Python을 사용하여 DynamoDB에 데이터를 저장하고, 그 데이터를 Grafana를 통해 실시간으로 시각화합니다.

실시간 온도 데이터 흐름

이 시스템의 전반적인 흐름은 아래와 같습니다:

  1. ESP32 디바이스: 온도 센서를 통해 데이터를 읽어 AWS IoT Core에 전송합니다.
  2. AWS IoT Core: 디바이스에서 데이터를 수신하고, 이를 AWS Lambda를 통해 처리하여 DynamoDB에 저장합니다.
  3. DynamoDB: 저장된 데이터를 AWS IoT 서버에서 관리하고, 이를 Grafana에서 시각화할 수 있도록 제공합니다.
  4. Grafana: DynamoDB에서 실시간 데이터를 가져와 대시보드 형태로 시각화합니다.

1. ESP32 디바이스 설정

ESP32에서 온도 센서 데이터를 읽어 AWS IoT Core로 전송하기

먼저, ESP32에 온도 센서를 연결하고, 이를 읽어 AWS IoT Core에 데이터를 전송하는 예제를 구현합니다. 이 과정에서는 ESP32 IDFAWS IoT Device SDK for Embedded C를 사용합니다.

1.1 ESP32 SDK 설치 및 환경 설정

ESP32 개발을 위해 ESP-IDF를 설치합니다. 아래 명령어를 통해 설치할 수 있습니다.

# ESP-IDF 설치
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
source export.sh

1.2 AWS IoT SDK 설치

AWS IoT Device SDK를 ESP32 프로젝트에 통합합니다. aws-iot-device-sdk-c를 ESP32 프로젝트에 추가하여 AWS IoT Core와의 연결을 설정합니다. AWS IoT Core에 연결하기 위해 필요한 인증서와 설정을 준비합니다.

# AWS IoT Device SDK 설치
git clone https://github.com/aws/aws-iot-device-sdk-embedded-c.git
cd aws-iot-device-sdk-embedded-c
git checkout v2.0.0

1.3 온도 센서 데이터 읽기 및 전송

온도 센서에서 데이터를 읽고 이를 AWS IoT Core로 전송하는 코드입니다. 여기서는 DHT11 온도 센서를 예시로 사용합니다.

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "dht.h"
#include "aws_iot_log.h"
#include "aws_iot_mqtt_client_interface.h"

// 온도 센서 핀 설정
#define DHT_PIN 4
dht_sensor_type_t sensor_type = DHT_TYPE_DHT11;

// MQTT 클라이언트 설정
IoT_Client_Init_Params mqtt_init_params = IoT_Client_Init_Params_default;

// 온도 데이터 전송
void temperature_sensor_task(void *param) {
    float temperature;
    dht_read_data(sensor_type, DHT_PIN, &temperature, NULL);
    AWS_IoT_MQTT_Publish("temperature_topic", &temperature, sizeof(temperature));
}

void app_main() {
    // ESP32 WiFi 연결 및 AWS IoT Core 연결 설정
    setup_wifi();
    IoT_Client_Connect(&mqtt_init_params);

    // 온도 데이터 주기적으로 읽기
    while (true) {
        temperature_sensor_task(NULL);
        vTaskDelay(5000 / portTICK_PERIOD_MS); // 5초 주기로 읽기
    }
}

1.4 AWS IoT Core 설정

AWS IoT Core에서 Thing을 생성하고, 인증서를 발급받아 IoT 디바이스를 등록합니다. 또한, MQTT를 통해 데이터를 송수신할 수 있도록 설정합니다.


2. AWS 서버 설정

2.1 DynamoDB 테이블 생성

온도 데이터를 저장하기 위해 AWS DynamoDB에서 테이블을 생성합니다. 예를 들어, TemperatureData라는 이름으로 테이블을 생성하고, timestampPartition Key로 설정할 수 있습니다.

aws dynamodb create-table     --table-name TemperatureData     --attribute-definitions         AttributeName=timestamp,AttributeType=S     --key-schema         AttributeName=timestamp,KeyType=HASH     --provisioned-throughput         ReadCapacityUnits=5,WriteCapacityUnits=5

2.2 AWS Lambda 함수 설정

디바이스에서 전송된 온도 데이터를 DynamoDB에 저장하는 AWS Lambda 함수를 작성합니다. 이 Lambda 함수는 AWS IoT Core에서 트리거되어 데이터를 DynamoDB 테이블에 기록합니다.

import json
import boto3
from datetime import datetime

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TemperatureData')

def lambda_handler(event, context):
    # 온도 데이터 추출
    temperature = event['temperature']
    timestamp = datetime.utcnow().isoformat()

    # DynamoDB에 데이터 저장
    response = table.put_item(
        Item={
            'timestamp': timestamp,
            'temperature': temperature
        }
    )

    return {
        'statusCode': 200,
        'body': json.dumps('Data saved successfully')
    }

2.3 AWS IoT 규칙 엔진 설정

AWS IoT Core의 Rules Engine을 설정하여, 디바이스에서 전송된 메시지를 Lambda 함수로 전달하고, 해당 메시지를 DynamoDB에 저장합니다.

SELECT * FROM 'temperature_topic'

3. Grafana 설정

3.1 Grafana 설치

Grafana를 설치하여 실시간 데이터를 시각화합니다. Grafana는 온도 데이터를 대시보드에서 실시간으로 보여주는 역할을 합니다.

# Grafana 설치
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install grafana

3.2 Grafana에서 DynamoDB 연결

Grafana에서 DynamoDB를 데이터 소스로 설정하고, 실시간 온도 데이터를 시각화할 수 있습니다. Grafana는 AWS의 CloudWatch 또는 AWS DynamoDB에 직접 연결하여 데이터를 쿼리하고 시각화합니다.

3.3 대시보드 구성

Grafana 대시보드에서 온도 데이터를 시각화할 수 있도록 쿼리를 작성하고, 실시간으로 데이터가 업데이트되는 대시보드를 구성합니다.


4. 결론

이번 포스팅에서는 AWS IoT, DynamoDB, 그리고 Grafana를 활용하여 실시간 온도 모니터링 시스템을 구축하는 방법을 살펴보았습니다. 이 시스템은 ESP32 디바이스에서 온도 센서를 읽고, AWS IoT Core를 통해 데이터를 전송하며, 서버에서는 데이터를 DynamoDB에 저장하고, 이를 Grafana 대시보드를 통해 실시간으로 시각화합니다.

이와 같은 시스템을 통해 IoT 디바이스에서 수집한 데이터를 쉽게 관리하고, 실시간으로 모니터링할 수 있습니다. 다양한 센서와 데이터를 추가하여 시스템을 확장할 수 있으며, 이를 통해 더욱 정교한 IoT 솔루션을 구축할 수 있습니다.

반응형