스마트디바이스실습 11차시 실습 - MJ050311/MJ050311 GitHub Wiki
☁️ 아두이노 클라우드(Arduino Cloud)
🔍 아두이노 클라우드란?
Arduino Cloud는 아두이노에서 제공하는 클라우드 기반 IoT 플랫폼으로, 사용자가 센서 데이터를 수집하고 원격으로 장치를 제어할 수 있도록 지원하는 웹 기반 개발 환경입니다.
주요 기능
- IoT 장치 등록 및 제어
- 실시간 데이터 시각화 대시보드 제공
- 자동 코드 생성 및 업로드 지원
- 스마트폰 앱(Arduino IoT Remote)을 통한 원격 제어
- 다양한 보드(ESP32, Arduino MKR 등) 지원
✅ 아두이노 클라우드의 장점
장점 | 설명 |
---|---|
🔌 쉬운 연결성 | 다양한 보드(ESP32, MKR 등)를 간단히 연결 가능 |
🌐 웹 기반 개발환경 | 설치 없이 브라우저에서 코드 작성 및 업로드 |
📊 실시간 데이터 시각화 | 센서 데이터를 실시간으로 확인하고 기록 가능 |
📱 원격 제어 가능 | 스마트폰 또는 웹 대시보드에서 장치 제어 가능 |
🔐 보안 지원 | 인증 토큰, Secret Key를 통한 보안 설정 제공 |
🤖 자동 코드 생성 | 변수 설정 시 자동으로 코드 템플릿 생성 |
📲 클라우드 대시보드 예시
Arduino Cloud는 다양한 **위젯(Widgets)**을 제공하여 실시간 데이터를 시각화하거나 장치를 제어할 수 있습니다.
Gauge
(게이지)Toggle
(스위치)Chart
(그래프)Value
(실시간 값 출력)
각 위젯은 드래그 앤 드롭 방식으로 간단히 구성 가능하며, PC와 스마트폰 앱 모두에서 사용 가능합니다.
🤔 Arduino Cloud을 활용한 온습도, LED 제어
실습 준비물
- ESP32
- ESP32 확장 실드
- DHT11 온습도 센서
- LED 모듈
회로연결
☝️ 실습전 준비
- Arduinocloud홈페이지에 들어가서 open app 클릭 후 로그인
- things 클릭 후 Create new 클릭
- 프로젝트 이름 입력 후 "Add" 버튼 클릭
- LED 상태를 제어하기 위한 led_state 변수는 boolean 타입 read&write으로 설정 온습도 센서를 모니터링하기 위한 temperature 변수는 float 타입 read only로 설정
- ""Associated Device""에서 "Selected Device" 선택 -> "SET UP NEW DEVICE" 선택 -> "Third party device" 선택
- ESP32 선택 -> Select model에서 DOIT ESP32 DEVKIT V1 선택 -> Device 이름 정하기
- Device ID와 Secret key Key를 받게 된다.
(⚠️ 주의사항 Secret Key는 이 화면에서만 조회 가능하니 따로 메모한다.)
- 만든 device를 Associate 한 후 Network 섹션에서 Configure 버튼을 클릭한다.
- 네트워크 이름, 비밀번호, Secret Key를 입력 후 SAVE를 누른다.
준비완료 화면
✔ 실습1. 아두이노 클라우드를 이용한 LED 제어 및 온습도 센서값 읽기
실습 코드
#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);
}
}
대시보드 설정 및 위젯추가
- Setup -> Dashboards 클릭 -> CREATE DASHBOARD -> 오른쪽 상단에 EDIT 클릭 -> ADD 클릭 -> widgets에서 switch 선택 -> Link Variable 클릭 -> led_state 선택
- ADD 클릭 -> widgets에서 chart 선택 -> Link Variable 클릭 -> temperature 선택
💡 실습결과
https://github.com/user-attachments/assets/d686ca30-7eb6-479d-8ec4-0111f328e70c
🔧 실습 중 발생한 오류 및 문제 해결 보고서
Create Agent
스케치에 들어갔을때 아래에 이 메세지가 나온다면 Create Agent가 설치되어 있지 않은 것이니
“Learn More”를 눌러 Create Agent를 다운로드 후 코드를 업로드 한다.
dht 센서 오류
- LED 제어 기능은 정상적으로 작동하였으나,
- Arduino Cloud 대시보드에서 온도 차트가 표시되지 않음
- 시리얼 모니터에 다음과 같은 오류 메시지가 반복 출력됨:
🔍 원인 분석
실습 중 dht.readTemperature()
함수 호출 시 센서로부터 유효한 데이터를 수신하지 못해 NaN(Not a Number)
이 반환됨. 이로 인해 온도값이 클라우드에 전송되지 않아 대시보드 차트에도 아무런 데이터가 나타나지 않음.
해당 오류는 DHT 센서의 연결 문제, 핀 번호 불일치, 풀업 저항 누락, 전원 부족, 센서 불량 등 다양한 하드웨어적 원인에 의해 발생할 수 있음.
🧪 해결을 위한 시도
-
핀 번호 변경
- GPIO 13 → GPIO 14, GPIO 27 등으로 변경하며 테스트
- 여전히 센서 인식 실패
-
테스트 코드 단독 실행
#include "DHT.h"
#define DHTPIN 13 // 연결된 핀 번호
#define DHTTYPE DHT11 // 또는 DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" °C, Humidity: ");
Serial.print(hum);
Serial.println(" %");
}
delay(2000);
}
- 센서 단독 코드로도
"Failed to read from DHT sensor!"
오류 발생
🧾 결론 및 판단
위의 점검 사항을 모두 검토하였음에도 불구하고 센서 인식이 되지 않아, 최종적으로 DHT11 센서의 불량 또는 센서 내부 회로 문제로 판단함.
본 실습에서 온도 데이터 시각화 부분은 완전히 구현되지 못했으며, 추후 정상 동작하는 DHT 센서로 교체 후 실습 재진행 하겠습니다.