2025. 3. 7. 15:36ㆍ정보기술/하드웨어
ARM 기반의 종합 프로젝트를 수행하고, 향후 커리어 발전 방향을 학습한다.
1. ARM 기반의 종합 프로젝트 설계 및 구현: IoT 디바이스 설계 및 클라우드 연동 프로젝트
ARM 기반 IoT 디바이스는 저전력, 실시간 데이터 처리, 무선 연결 등의 특성을 활용하여 스마트 홈, 산업 자동화, 환경 모니터링, 스마트 팩토리, 헬스케어 등의 다양한 분야에서 사용된다.
이번 프로젝트에서는 ARM Cortex-M 또는 Cortex-A 기반 IoT 디바이스를 설계하고, 센서 데이터를 수집하여 클라우드에 연동하는 방법을 소개한다.
또한, AWS Lambda 이벤트 구조 개선, DynamoDB 테이블 설계 최적화, 데이터 조회 성능 향상 등의 추가적인 개선 사항을 반영하여 프로젝트의 확장성과 성능을 최적화한다.
1. ARM 기반 IoT 시스템 설계 개요
1) IoT 디바이스 설계 및 클라우드 연동의 필요성
IoT 디바이스는 센서 데이터를 수집하고 이를 클라우드에 저장 및 분석하여 실시간 모니터링, 자동화, 예측 분석 등에 활용된다.
설계 요소 | 기능 및 역할 |
ARM Cortex-M / Cortex-A 기반 MCU/MPU | IoT 센서 데이터 수집 및 처리 |
무선 통신 (Wi-Fi, BLE, LoRa, NB-IoT) | 클라우드 서버와의 데이터 송수신 |
센서 모듈 (I2C, SPI, ADC 인터페이스) | 온도, 습도, 조도, 가속도 등 환경 데이터 측정 |
임베디드 OS (FreeRTOS, Linux, Zephyr) | 실시간 데이터 처리 및 네트워크 통신 |
클라우드 플랫폼 (AWS IoT, Google Cloud IoT, Azure IoT Hub) | 데이터 저장, 분석, 대시보드 시각화 |
✅ 센서 → IoT 디바이스 → 클라우드 서버 → 웹 대시보드의 전체 데이터 흐름을 설계하는 종합 프로젝트
2. 프로젝트 아키텍처 구성
1) 시스템 구성도
[IoT 센서] → [ARM Cortex-M IoT 디바이스] → [무선 통신] → [클라우드 서버] → [웹 대시보드]
✅ ARM Cortex-M → 저전력 IoT 디바이스
✅ ARM Cortex-A (예: Raspberry Pi, Jetson Nano) → 엣지 컴퓨팅 및 게이트웨이
✅ AWS IoT, Google Cloud IoT, Azure IoT Hub → 클라우드 데이터 처리
3. IoT 디바이스 설계 및 구현
1) 하드웨어 구성
구성 요소 | 설명 |
MCU/MPU | STM32 (Cortex-M4), Raspberry Pi (Cortex-A) |
센서 모듈 | 온습도 센서 (DHT22), 조도 센서 (BH1750), 가속도 센서 (MPU6050) |
네트워크 인터페이스 | Wi-Fi (ESP8266, ESP32), LoRa, BLE |
전원 공급 | 배터리(3.7V 리튬이온), 전력 최적화 |
2) ARM Cortex-M을 활용한 센서 데이터 수집 (STM32 예제)
#include "stm32f4xx_hal.h"
#include "i2c.h"
#define BH1750_ADDRESS 0x23 // 조도 센서 I2C 주소
I2C_HandleTypeDef hi2c1;
uint16_t read_light_sensor() {
uint8_t command = 0x10; // High-resolution mode
uint8_t buffer[2];
HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDRESS << 1, &command, 1, HAL_MAX_DELAY);
HAL_Delay(180); // 측정 시간
HAL_I2C_Master_Receive(&hi2c1, BH1750_ADDRESS << 1, buffer, 2, HAL_MAX_DELAY);
return (buffer[0] << 8) | buffer[1]; // 조도 값 반환
}
✅ STM32 기반 ARM Cortex-M MCU에서 조도 센서 데이터를 I2C로 수집
4. 클라우드 연동 및 데이터 전송
1) AWS Lambda를 이용한 클라우드 데이터 처리
import boto3
import json
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('SensorData')
def lambda_handler(event, context):
data = json.loads(event['body'])
table.put_item(Item={"timestamp": data["timestamp"], "temperature": data["temperature"], "humidity": data["humidity"]})
return {"statusCode": 200, "body": "Data stored successfully"}
✅ AWS Lambda를 사용하여 IoT 데이터를 DynamoDB에 저장
5. 추가적인 개선 사항
1) AWS Lambda 이벤트 구조 개선
✅ 기존 문제점
- Lambda 함수에서 AWS IoT Core의 다양한 이벤트 구조를 처리하지 못하는 경우 발생
- 이벤트 구조가 단순화되어 있어 일부 메시지가 누락될 가능성이 있음
✅ 개선된 AWS Lambda 이벤트 핸들러 코드
def lambda_handler(event, context):
try:
records = event.get("Records") or event.get("messages") or [event]
for record in records:
payload = json.loads(record.get("body", "{}")) if "body" in record else record
table.put_item(
Item={
"device_id": payload.get("device_id", "unknown"),
"timestamp": payload.get("timestamp", "unknown"),
"temperature": payload.get("temperature", 0.0),
"humidity": payload.get("humidity", 0.0),
}
)
return {"statusCode": 200, "body": "Data stored successfully"}
except Exception as e:
return {"statusCode": 500, "body": str(e)}
✅ AWS IoT Core에서 다양한 이벤트 구조를 받아들일 수 있도록 개선
2) DynamoDB 테이블 설계 최적화
✅ 기존 문제점
- timestamp를 단독으로 파티션 키로 사용하면 특정 시간대 트래픽 증가 시 핫 파티션 문제 발생
- 데이터 분산을 위해 device_id와 timestamp를 복합 키로 사용
✅ 개선된 DynamoDB 테이블 생성 코드
aws dynamodb create-table \
--table-name SensorData \
--attribute-definitions AttributeName=device_id,AttributeType=S AttributeName=timestamp,AttributeType=S \
--key-schema AttributeName=device_id,KeyType=HASH AttributeName=timestamp,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST
✅ 데이터 분산 효과 증가 및 성능 최적화
3) DynamoDB 데이터 조회 최적화
✅ 기존 문제점
- scan()을 사용하여 전체 테이블을 조회 → 비효율적인 데이터 검색
- query()를 사용하여 특정 디바이스의 데이터를 빠르게 검색해야 함
✅ 개선된 데이터 조회 코드
response = table.query(
KeyConditionExpression="device_id = :device_id",
ExpressionAttributeValues={":device_id": device_id},
Limit=10,
ScanIndexForward=False
)
✅ 최신 데이터부터 빠르게 조회 가능
6. 결론
✅ AWS Lambda 이벤트 구조 개선 → 다양한 IoT 이벤트 처리 가능
✅ DynamoDB 테이블 설계 최적화 → 데이터 저장 성능 향상 및 핫 파티션 문제 해결
✅ DynamoDB query() 최적화 → 데이터 조회 속도 개선
이러한 개선 사항을 적용하면 IoT 디바이스의 데이터 저장과 조회 성능이 최적화되어 보다 안정적이고 확장성이 높은 IoT 솔루션을 구축할 수 있다. 🚀
'정보기술 > 하드웨어' 카테고리의 다른 글
ARM Core - 8. 최종 프로젝트 및 커리어 로드맵 (3. ARM 인증 프로그램 소개 및 준비 방법) (0) | 2025.03.07 |
---|---|
ARM Core - 8. 최종 프로젝트 및 커리어 로드맵 (2. ARM 관련 산업 동향 및 취업 정보) (0) | 2025.03.07 |
ARM Core - 7. 실습 프로젝트 (3. Jetson Nano/Xavier와 같은 ARM 기반 AI 개발 보드 활용) (0) | 2025.03.07 |
ARM Core - 7. 실습 프로젝트 (2. Raspberry Pi를 활용한 ARM 기반 리눅스 시스템 개발) (0) | 2025.03.07 |
ARM Core - 7. 실습 프로젝트 (1. ARM Cortex-M을 활용한 IoT 센서 데이터 수집 및 분석) (0) | 2025.03.07 |