11주차-ESP32 아두이노 클라우드 모니터링 - boguuu/SmartDevice_2025-1 GitHub Wiki
IoT(Internet of Things) 기술은 다양한 디바이스가 센서와 네트워크를 통해 연결되어 데이터를 생성하고, 이를 실시간으로 처리 및 분석하여 효율적인 서비스를 제공하는 기술. IoT 클라우드 서비스는 이 과정을 가능하게 하는 핵심 인프라
- 데이터 수집 및 저장 수백만 개의 센서·디바이스에서 발생하는 데이터를 수집하고 안정적으로 저장
- 실시간 처리 및 제어 원격지에서 장치를 모니터링하고 실시간으로 제어 가능
- 확장성 확보 수십, 수백 개 이상의 디바이스도 수용 가능한 유연한 아키텍처
- 보안 및 관리 인증, 암호화, 사용자 접근 제어 등의 보안 기능을 제공
- AI 및 분석 연계 수집된 데이터를 기반으로 머신러닝 분석 및 자동화 가능
1) AWS IoT Core (Amazon Web Services)
- MQTT, HTTP, WebSocket 지원
- Lambda와 연동하여 이벤트 기반 처리
- 다양한 보안 정책과 디바이스 인증
- 장점: 높은 확장성, 엔터프라이즈 수준의 안정성
2) Google Cloud IoT
- Google Cloud Pub/Sub, BigQuery, AI 연동 가능
- IoT Core 서비스로 디바이스 관리 및 데이터 흐름 처리
- 장점: GCP 기반 분석 도구와 자연스러운 통합
3) Microsoft Azure IoT Hub
- 장치 등록, 인증, 메시지 처리 기능 제공
- Azure Digital Twins, Time Series Insights 등과 통합
- 장점: 산업용 IoT에 특화된 서비스 확장성 보유
1) KT GiGA IoT 플랫폼
- KT에서 제공하는 통합 IoT 플랫폼
- 통신 모듈, 디바이스 관리, API 연동 서비스 제공
- 스마트팩토리, 스마트시티 솔루션 등에서 활용
2) SKT ThingPlug
- SKT의 IoT 전용 플랫폼 (OneM2M 기반)
- 다양한 센서 디바이스 연동 및 대규모 데이터 수집 처리
- 공공/산업 분야에 적용 사례 존재
※ LG U+는 자체 IoT 플랫폼보다는 NB-IoT 등의 네트워크 기반 서비스 제공에 집중
-
특징
- 간단한 웹 기반 설정
- 센서 데이터 시각화 위젯 제공
- 무료 요금제로 소규모 실습과 교육에 적합
-
한계
- 상업용 대규모 서비스 구축에는 부적합
- 사용자 정의 확장성 및 백엔드 연동 기능 부족
항목 | 대기업형 | 오픈소스형 | 아두이노 클라우드 |
---|---|---|---|
대표 예시 | AWS IoT, Azure IoT | ThingsBoard, Node-RED | Arduino Cloud |
확장성 | 매우 높음 | 중간~높음 | 낮음 |
사용 편의성 | 중간 | 중간~어려움 | 매우 쉬움 |
교육용 적합도 | 낮음 | 중간 | 매우 높음 |
상용 서비스 적합도 | 매우 높음 | 중간 | 낮음 |
- ESP32
- ESP32 확장 실드
- DHT11 온습도 센서
- LED 모듈
모듈 | 연결 핀 (ESP32) |
---|---|
DHT11 온습도 센서 | S → D13, V → 3.3V, G → GND |
LED 모듈 | S → D23, V → 3.3V, G → GND |
- 온도 데이터 실시간 모니터링
- LED 상태 원격 제어
- 클라우드 대시보드를 통한 시각화
https://cloud.arduino.cc/에 login 한 후에 오른쪽 상단의 메뉴를 통해 Cloud 사이트로 이동
Thing tab 에서 "CREATE THING" 버튼을 클릭
LED 상태를 제어하기 위한 led_state 변수 추가
온습도 센서를 모니터링하기 위한 temperature변수 추가
“Associated Device” 섹션에서 “Select Device” 클릭
“SET UP NEW DEVICE”를 선택한 뒤, “Third Party device”를 클릭
ESP32를 선택하고 드롭다운 메뉴에서 “DOIT ESP32 DEVKIT V1”을 선택“Device ID”와 “Security Key”
“Device ID”, “Security Key” “Security Key”는 이 화면에서만 조회가능 메모!!
USB 포트를 통해 스케치를 업로드하려면 Create Agent가 필요 스케치 탭에 진입했을 때 아래에 메시지 창이 뜬다면 Create Agent가 설치되어 있지 않은 것
https://support.arduino.cc/hc/en-us/articles/360014869820-Install-the-Arduino-Cloud-Agent (Arduino Create agent installation page 클릭하여 다운로드)
#include "thingProperties.h"
#include "DHT.h"
int led_pin = 23;
int dh11_pin = 13;
DHT dht(dh11_pin, DHT11);
void setup() {
pinMode(led_pin, OUTPUT);
dht.begin();
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
// Your code here
// Read temperature as Celsius (the default)
temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(temperature)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Temperature: "));
Serial.println(temperature);
delay(1000);
}
/*
Since LedState is READ_WRITE variable, onLedStateChange() is
executed every time a new value is received from IoT Cloud.
*/
void onLedStateChange() {
// Add your code here to act upon LedState change
Serial.print("LED state is changed : ");
Serial.println(led_state);
if (led_state) {
digitalWrite(led_pin, HIGH);
}
else {
digitalWrite(led_pin, LOW);
}
}
#include "thingProperties.h" // IoT Cloud 변수 및 설정
#include "DHT.h" // DHT 센서 라이브러리
int led_pin = 23; // LED가 연결된 핀 번호
int dh11_pin = 13; // DHT11 센서가 연결된 핀 번호
DHT dht(dh11_pin, DHT11); // DHT11 센서 객체 생성
- thingProperties.h: IoT Cloud에서 사용하는 변수 및 설정이 정의된 헤더 파일
- DHT.h: DHT11 센서를 쉽게 제어할 수 있도록 도와주는 라이브러리
- led_pin, dh11_pin: 각각 LED와 DHT11 센서가 연결된 핀 번호를 지정
void setup() {
pinMode(led_pin, OUTPUT); // LED 핀을 출력 모드로 설정
dht.begin(); // DHT11 센서 초기화
Serial.begin(9600); // 시리얼 통신 시작
delay(1500); // 시리얼 모니터 준비 대기
initProperties(); // IoT Cloud 변수 초기화
ArduinoCloud.begin(ArduinoIoTPreferredConnection); // IoT Cloud 연결 시작
setDebugMessageLevel(2); // 디버그 메시지 레벨 설정(2: 상세 정보)
ArduinoCloud.printDebugInfo(); // 디버그 정보 출력
}
- pinMode: LED 핀을 출력으로 설정
- dht.begin(): DHT11 센서를 사용할 준비
- Serial.begin(9600): 시리얼 통신 속도를 9600bps로 설정
- initProperties(), ArduinoCloud.begin(): IoT Cloud와 연동을 위한 변수 및 연결을 초기화
- setDebugMessageLevel(2): 네트워크 및 IoT Cloud 연결 상태에 대한 상세 정보를 출력
void loop() {
ArduinoCloud.update(); // IoT Cloud와 데이터 동기화
temperature = dht.readTemperature(); // 온도 읽기
if (isnan(temperature)) { // 읽기 실패 시
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Temperature: "));
Serial.println(temperature);
delay(1000); // 1초 대기
}
- ArduinoCloud.update(): IoT Cloud와의 데이터 동기화 및 이벤트 처리를 담당
- dht.readTemperature(): DHT11 센서에서 온도 값을 읽음
- isnan(temperature): 온도 값이 유효하지 않을 경우 에러 메시지를 출력
- Serial.print/println: 온도 값을 시리얼 모니터로 출력
cppvoid onLedStateChange() {
Serial.print("LED state is changed : ");
Serial.println(led_state);
if (led_state) {
digitalWrite(led_pin, HIGH); // LED ON
}
else {
digitalWrite(led_pin, LOW); // LED OFF
}
}
- onLedStateChange(): IoT Cloud에서 LED 상태(led_state)가 변경될 때마다 호출되는 콜백 함수
- digitalWrite: led_state 값에 따라 LED를 켜거나 끔
- 초기화: 센서와 LED 핀을 초기화하고, IoT Cloud와 연결
- 온도 측정: 1초마다 DHT11 센서로부터 온도를 읽고, 시리얼 모니터에 출력
- LED 제어: IoT Cloud에서 led_state 값이 변경되면, 해당 값에 따라 LED를 켜거나 끔
네트워크 설정
이때 위에서 메모한 Secret Key 활용
스위치와 그래프를 선택 후 각 Linked Variable 설정
❗LED ON/OFF 스위치를 통해 LED 조절, 그래프를 통해 온습도 실시간 확인