이상 온도 감지 시 AWS SNS를 통해 알림 전송
이번 포스팅에서는 ESP32 기반의 온도 모니터링 시스템을 구축하고, 이상 온도 감지 시 AWS SNS(Simple Notification Service)를 통해 알림을 전송하는 방법에 대해 다루겠습니다. 이 시스템은 온도 센서를 통해 실시간으로 온도를 측정하고, 설정된 임계값을 초과하는 경우, AWS SNS를 통해 알림을 전송하는 방식으로 구현됩니다. 이번 실습에서는 AWS IoT Core와 SNS를 연동하여 이상 온도를 감지하면 알림을 받을 수 있도록 설정할 것입니다.
1. 시스템 구성
1.1. ESP32 디바이스
ESP32는 온도 센서를 연결하여 온도를 측정하고, 해당 데이터를 AWS IoT Core로 전송하는 역할을 합니다. 이 예제에서는 DHT11 온습도 센서를 사용하여 온도를 측정하고, AWS IoT Device SDK for Embedded C를 이용하여 데이터를 AWS IoT Core로 전송합니다.
1.2. AWS IoT Core
AWS IoT Core는 디바이스와 클라우드 간의 안전한 통신을 지원합니다. 디바이스는 데이터를 AWS IoT Core로 전송하고, 클라우드에서는 데이터를 처리하거나 다른 서비스를 연동할 수 있습니다.
1.3. AWS SNS
Amazon SNS(Simple Notification Service)는 다양한 프로토콜을 통해 메시지를 전송할 수 있는 서비스입니다. 여기서는 SNS를 통해 이상 온도 감지 시 알림을 전송하는 기능을 구현합니다.
2. 준비 사항
- AWS 계정: AWS IoT Core, SNS 서비스 등을 사용하기 위해 AWS 계정이 필요합니다.
- ESP32 보드: 온도 센서를 연결하여 데이터를 측정하는 디바이스입니다.
- 온도 센서 (DHT11): 온도와 습도를 측정하는 센서입니다.
- AWS IoT Core 및 SNS 설정: IoT Core와 SNS를 설정하여 ESP32 디바이스와 연동합니다.
- Python: AWS IoT Core와 SNS 연동을 위해 Python을 사용하여 서버측 로직을 구현합니다.
3. ESP32 디바이스 설정
3.1. ESP32와 DHT11 연결
먼저, ESP32 보드와 DHT11 센서를 연결합니다. DHT11 센서는 3개의 핀이 있으며, VCC, GND, Data 핀이 있습니다. Data 핀을 ESP32의 GPIO핀에 연결하여 온도 데이터를 읽을 수 있습니다.
3.2. ESP32에서 DHT11 센서 읽기
다음은 ESP32에서 DHT11 센서를 사용하여 온도를 읽는 코드입니다.
#include "DHT.h"
#include <WiFi.h>
#include <AWS_IOT.h>
// DHT 센서 핀 정의
#define DHTPIN 4 // GPIO4에 연결
#define DHTTYPE DHT11 // DHT11 센서 사용
DHT dht(DHTPIN, DHTTYPE);
// Wi-Fi 및 AWS IoT 설정
const char *ssid = "your-ssid";
const char *password = "your-password";
const char *host = "your-iot-endpoint.amazonaws.com";
const char *client_id = "ESP32-Temperature-Sensor";
// AWS IoT 클라이언트 객체 생성
AWS_IOT awsIot;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
// Wi-Fi 연결 대기
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
// AWS IoT Core 연결
awsIot.begin(host, client_id);
// DHT 센서 초기화
dht.begin();
}
void loop() {
// 온도와 습도 읽기
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 온도 출력
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// AWS IoT Core로 데이터 전송
String payload = "{\"temperature\": \"" + String(temperature) + "\"}";
awsIot.publish("temperature_topic", payload);
// 임계값 이상 온도 알림
if (temperature > 30) {
sendAlert(temperature);
}
delay(5000); // 5초마다 측정
}
// 이상 온도 알림 전송
void sendAlert(float temperature) {
Serial.println("Temperature exceeds threshold! Sending alert...");
// AWS SNS를 통해 알림 전송
// SNS 연동 코드 삽입
}
3.3. AWS IoT Core에 데이터 전송
ESP32는 Wi-Fi를 통해 AWS IoT Core에 데이터를 전송합니다. AWS_IOT 라이브러리를 사용하여 IoT Core와 연결하고, 온도 데이터를 주기적으로 전송합니다.
4. AWS IoT Core 설정
4.1. Thing 등록
- AWS IoT 콘솔에 로그인하고, Thing을 등록합니다.
- 디바이스에 대한 인증서를 생성하고 다운로드합니다.
- Thing 이름과 인증서를 사용하여 ESP32에서 IoT Core에 연결합니다.
4.2. 정책 설정
AWS IoT Core에서 정책을 생성하여 ESP32가 데이터를 전송할 수 있도록 권한을 부여합니다. 정책은 다음과 같이 설정할 수 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:region:account-id:topic/temperature_topic"
}
]
}
이 정책은 ESP32가 temperature_topic으로 데이터를 전송할 수 있게 해줍니다.
5. AWS SNS 설정
5.1. SNS 주제 생성
AWS SNS에서 주제(Topic)을 생성하고, 알림을 받을 이메일 주소나 SMS 번호를 구독합니다.
- SNS 콘솔에서 주제를 생성합니다.
- 생성된 주제에 이메일 또는 SMS를 구독하여 알림을 받을 수 있도록 설정합니다.
5.2. SNS 알림 전송
이상 온도를 감지했을 때, SNS를 통해 알림을 전송하는 Python 코드 예제입니다.
import boto3
def send_sns_alert(temperature):
sns = boto3.client('sns', region_name='us-west-2')
message = f"Warning: The temperature has exceeded the threshold! Current temperature: {temperature}°C"
subject = "Temperature Alert"
sns.publish(
TopicArn="arn:aws:sns:us-west-2:your-account-id:TemperatureAlerts",
Message=message,
Subject=subject
)
print("Alert sent successfully!")
위 코드에서는 boto3 라이브러리를 사용하여 SNS 알림을 전송합니다. TopicArn은 생성한 SNS 주제의 ARN을 입력합니다.
6. 결론
이번 포스팅에서는 ESP32와 AWS IoT Core, SNS를 활용하여 이상 온도 감지 시 알림을 전송하는 시스템을 구현하는 방법을 다루었습니다. 이 시스템을 통해 온도 모니터링을 실시간으로 수행하고, 이상 온도가 감지되면 즉시 알림을 받을 수 있습니다. 이를 활용하여 다양한 IoT 애플리케이션에 응용할 수 있습니다.
앞으로 다른 IoT 시스템을 구축할 때도 유용하게 사용할 수 있는 기본적인 IoT Core와 SNS의 연동 방법에 대해 배웠습니다. 이 과정을 통해 IoT 시스템의 실시간 데이터 모니터링과 알림 기능을 강화할 수 있습니다.
'AWS IoT' 카테고리의 다른 글
AWS DynamoDB 및 Grafana를 이용한 실시간 온도 데이터 시각화 (0) | 2025.04.17 |
---|---|
AWS IoT Core 및 Lambda를 이용한 데이터 처리 (0) | 2025.04.16 |
ESP32 IDF 기반 AWS IoT 디바이스 구현 (0) | 2025.04.15 |
AI/ML을 활용한 이상 온도 감지 및 자동 대응 (0) | 2025.04.14 |
AWS QuickSight, Grafana를 활용한 실시간 데이터 시각화 (0) | 2025.04.13 |