스마트디바이스실습 ‐ 11주차 - jiho0419/SmartDevice_2025-1 GitHub Wiki
1️⃣ IoT 클라우드 서비스
*️⃣ 정의
💠 IoT 장치에서 수집된 데이터를 저장, 처리, 분석하는 플랫폼 및 서비스를 말한다.
💠 서비스는 확장성과 유연성을 제공하여, IoT 프로젝트를 빠르고 안정적으로 개발 및 운영할 수 있도록 지원한다.
*️⃣ 주요 기능
💠 디바이스 관리
🔸 IoT 기기의 등록, 인증, 상태 모니터링 및 펌웨어 업데이트 등 기능을 포함
💠 데이터 수집 및 처리
🔸 센서로부터 실시간으로 수집된 데이터를 수집하고 저장하며, 데이터 정제 및 필터링 작업을 수행
💠 데이터 분석 및 시각화
🔸 수집된 데이터를 기반으로 통계 분석, 머신러닝 적용, 대시보드 제공 등을 통해 인사이트를 제공
💠 보안
🔸 기기 간 통신, 데이터 저장 및 전송 시 암호화, 사용자 인증 및 접근 제어 등의 기능이 포함
💠 애플리케이션 개발 환경 제공
🔸 API, SDK, 이벤트 트리거, 서버리스 컴퓨팅 등 개발자 편의 기능을 제공
*️⃣ 장점
💠 확장성
🔸 기기 수가 급격히 증가해도 유연하게 확장 가능
💠 비용 절감
🔸 물리적 인프라에 대한 투자 비용 절감
💠 실시간 처리
🔸 실시간 모니터링 및 빠른 응답 가능
💠 유지보수 용이성
🔸 중앙 집중형 관리로 유지보수 효율화
💠 글로벌 접근성
🔸 전 세계 어디서든 기기와 데이터 접근 가능
*️⃣ 구성 요소
구성 요소 | 설명 |
---|---|
디바이스 게이트웨이 | IoT 기기와 클라우드 간 통신을 중계 |
메시지 브로커 | MQTT, AMQP 등 메시지 프로토콜을 사용하여 데이터 전달 |
데이터 저장소 | 수집된 데이터를 저장 (NoSQL, Time-series DB 등) |
분석 엔진 | 데이터 분석 및 예측 기능 제공 |
사용자 인터페이스 | 웹/모바일 대시보드, 알림 시스템 등 |
*️⃣ 활용 사례
💠 스마트 팩토리
🔸 제조 공정 데이터 분석을 통한 자동화 및 품질 관리
💠 스마트 홈
🔸 가전제품, 보안 시스템 원격 제어
💠 스마트 시티
🔸 교통, 에너지, 치안 등 도시 인프라 관리
💠 헬스케어
🔸 환자 모니터링, 응급 알림 시스템
💠 농업
🔸 토양 습도, 온도, 기후 정보 분석을 통한 정밀 농업
2️⃣ Arduino Cloud
*️⃣ 정의
💠 Arduino에서 제공하는 클라우드 기반 IoT 플랫폼 으로, 사용자가 Arduino 및 ESP32/ESP8266과 같은 기기를 인터넷에 연결하여 원격 모니터링, 제어, 데이터 로깅, 자동화 등을 할 수 있도록 지원하는 서비스를 말한다.
💠 웹 기반 대시보드, 코드 자동 생성, OTA(Over-the-Air) 업데이트 등의 기능을 통해 개발자가 손쉽게 IoT 프로젝트를 구축하고 운영할 수 있도록 돕는다.
*️⃣ 주요 기능
💠 Thing Management
🔸 Arduino Cloud는 Thing이라는 개체를 중심으로 구성된다. Thing은 센서나 기기를 정의하며, 각 Thing은 연결된 디바이스와 변수로 구성
💠 변수 정의 및 동기화
🔸 사용자는 웹에서 센서 값, 출력 제어값 등을 변수로 정의하고, 이 변수는 Arduino 코드와 자동으로 동기화
💠 Web-based Dashboard
🔸 실시간 데이터 시각화 및 제어가 가능한 대시보드를 제공한다. 스위치, 슬라이더, 차트 등을 자유롭게 배치 가능
💠 OTA (Over-the-Air) 업데이트
🔸 물리적으로 디바이스에 접속하지 않고, 클라우드를 통해 원격으로 펌웨어를 업데이트
💠 Web Editor
🔸 클라우드 기반의 웹 IDE를 제공하여 어디서든 브라우저에서 코딩, 업로드, 디버깅이 가능
💠 Alexa 및 IFTTT 연동
🔸 Arduino Cloud는 Amazon Alexa, IFTTT 등과 연동이 가능하여 음성 제어 및 자동화 시나리오 구축에 유리
*️⃣ 장 / 단점
💠 장점
🔸 사용자 친화적 UI/UX : 복잡한 설정 없이 GUI 기반으로 IoT 구축 가능
🔸 자동 코드 생성 : 변수 등록만으로 코드 골격 자동 생성
🔸 접근성 : 웹 기반으로 어디서든 접근 가능
🔸 연동성 : Analytics, Cloud Platform 등과 원활한 연동
💠 단점
🔸 무료 요금제의 제약 : 무료 플랜은 연결 가능한 기기 수나 대시보드 기능에 제한이 있음
🔸 고급 기능 부족 : 산업용 IoT 플랫폼에 비해 분석/보안 기능이 단순
🔸 지속적인 인터넷 연결 필요 : 오프라인 기능 미비
*️⃣ 활용 사례
분야 | 사례 |
---|---|
스마트 홈 | 온습도 센서 기반 실내 환경 제어, 조명/플러그 원격 제어 |
농업 | 토양 수분 센서 및 자동 급수 시스템 |
헬스케어 | 심박수 측정기 원격 모니터링 |
교육 | 프로그래밍 학습 및 프로젝트 과제용 실습 |
환경 모니터링 | 대기질 센서, 소음 센서 기반 실시간 데이터 수집 및 알림 |
3️⃣ 실습
*️⃣ Arduino Cloud을 활용한 온습도, LED 제어
💠 Arduino Cloud를 활용하여 온도, 습도 데이터를 모니터링하고 LED 제어하는 실습 진행
💠 준비물
🔸 ESP32
🔸 ESP32 확장 쉴드
🔸 DH11 온습도 센서
🔸 LED 모듈
💠 회로 연결
ESP32 실드 | DH11 온습도센서 |
---|---|
S : D13 | S |
V | V |
G | G |
ESP32 실드 | LED 모듈 |
---|---|
S : D23 | S |
V | V |
G | G |
💠 코드
#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);
}
}
💠 실행 방법
🔸 아두이노 클라우드 설정
🔸 https://cloud.arduino.cc/
접속 후 로그인
🔸 프로젝트 생성
🔸 Thing
> CREATE THING
🔸 ADD
클릭해서 LED 스위치 / 습온도 프로젝트 생성
🔸 LED 스위치 > Boolean eg.true
> Read & Write
> On change
> ADD VARIABLE
🔸 습온도 차트 > Floating Point Number
> Read Only
> Periodically
> ADD VARIABLE
🔸 Associated Device
🔸 Select Device
> SET UP NEW DEVICE
> Third party device
🔸 ESP32
선택 > DOIT ESP32 DEVKIT V1
클릭
🔸 설정 후 나오는 Secret Key 는 이 창에서만 알고 있으므로 저장 > CONTINUE
🔸 Network 설정
🔸 연결할 wifi 이름과 비밀번호 입력 > 위에 저장한 Secret Key 입력
🔸 USB 포트를 읽지 못할 경우를 대비하여 밑에 사이트에 접속하여 Agent 설치
🔸 https://support.arduino.cc/hc/en-us/articles/360014869820-Install-the-Arduino-Cloud-Agent
🔸 Sketch 에 접속 > 위에 작성한 코드 업로드
🔸 Dashboards 설정 및 위젯 추가
🔸 Dashboards
> CREATE DASHBOARD
> 우측 상단 EDIT
클릭 > ADD
🔸 Switch
> led_state
> LINK VARIABLE
- LED 제어 스위치 위젯 추가
🔸 Chart
> temperature
> LINK VARIABLE
- 습온도 차트 위젯 추가
💠 실습 결과
🔸 LED 스위치를 ON / OFF 에 따라 LED 스위치가 점등함
🔸 시간에 따라 습온도를 표시하는 차트를 확인
https://github.com/user-attachments/assets/f2a065fc-32a8-4c7f-a396-7a486cbed203