아두이노 우노 Q DHT11 온도 및 습도 센서

Arduino UNO Q로 온도와 습도를 동시에 측정하고 싶으신가요? 그리고 너무 뜨겁거나 습할 때 Telegram 알림을 받으려고 하시나요? 이 튜토리얼은 완벽한 환경 모니터링을 위해 DHT11 센서 모듈을 사용하는 방법을 보여줍니다.

이 튜토리얼에서 배우게 될 내용:

Arduino UNO Q dht11 temperature and humidity sensor

필요한 하드웨어

1×Arduino UNO Q 아마존
1×Arduino Uno Q USB 케이블 아마존
1×DHT11 온도 습도 센서 모듈 아마존
1×10 kΩ 저항 아마존
1×브레드보드 쿠팡 | 아마존
1×점프 와이어 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

DHT11 센서에 대하여

DHT11
동작 전압 3~5V
온도 범위 0°C ~ 50°C
온도 정확도 ± 2°C
습도 범위 20% ~ 80%
습도 정확도 5%
읽기 속도 1Hz(매 초마다 한 번)

핀아웃

DHT11은 두 가지 형태로 제공됩니다: 센서와 모듈.

dht11 temperature and humidity sensor 사용법 핀아웃

DHT11 센서(4핀):

  • GND: GND(0V)에 연결
  • VCC: 3.3V 또는 5V에 연결
  • DATA: 통신 핀 — MCU의 디지털 핀에 연결
  • NC: 연결 안 함

DHT11 모듈(3핀):

  • GND: GND(0V)에 연결
  • VCC: 3.3V 또는 5V에 연결
  • DATA: 통신 핀(일부 모듈에서는 OUT 또는 S로 표시됨)

대부분의 DHT11 모듈에는 내장 풀업 저항이 있으므로 외부 저항이 필요하지 않습니다.

배선도

Arduino UNO Q - DHT11 센서 배선

DATA와 VCC 사이에 10kΩ 풀업 저항이 필요합니다.

Arduino UNO Q dht11 sensor 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

Arduino UNO Q - DHT11 모듈 배선

외부 저항이 필요하지 않습니다 — 모듈에 이미 포함되어 있습니다.

Arduino UNO Q dht11 module 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

DHT11 핀 Arduino UNO Q MCU
GND GND
VCC 3.3V 또는 5V
DATA D2

DHT11을 위한 프로그래밍 방법

  • 라이브러리 포함:
#include <DHT.h>
  • 핀을 정의하고 센서 객체 생성:
#define DHT11_PIN 2 DHT dht11(DHT11_PIN, DHT11);
  • 센서 초기화:
dht11.begin();
  • 습도 및 온도 읽기:
float humidity = dht11.readHumidity(); float tempC = dht11.readTemperature(); float tempF = dht11.readTemperature(true);
  • 항상 읽기 실패를 확인하세요:
if (isnan(humidity) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT11 sensor!"); }

Arduino UNO Q 코드

Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:

  • STM32 MCU는 DHT11 센서를 직접 읽습니다 — 모든 센서 통신은 MCU에서 실행됩니다
  • Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.

MCU는 3초마다 온도와 습도를 읽고 Serial Monitor에 출력합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11 */ #include <DHT.h> #define DHT11_PIN 2 // Arduino UNO Q MCU pin connected to DHT11 DATA pin DHT dht11(DHT11_PIN, DHT11); void setup() { Serial.begin(115200); delay(1500); dht11.begin(); Serial.println("Arduino UNO Q DHT11 ready"); } void loop() { delay(3000); // DHT11 requires at least 1 second between readings float humidity = dht11.readHumidity(); float tempC = dht11.readTemperature(); float tempF = dht11.readTemperature(true); if (isnan(humidity) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT11 sensor!"); } else { Serial.print("Humidity: "); Serial.print(humidity); Serial.print("% | Temperature: "); Serial.print(tempC); Serial.print("°C ~ "); Serial.print(tempF); Serial.println("°F"); } }

빠른 단계

Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.

  • 연결: 배선도에 표시된 대로 DHT11 센서 또는 모듈을 Arduino UNO Q MCU에 배선하세요.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다리세요.
  • 새 앱 만들기: Create New App 버튼을 클릭하세요.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다(예: Dht11).
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
  • Search for DHT sensor library created by Adafruit and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
DHT sensor library Adafruit

Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors

1.4.6
Install
More Info
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭하세요.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서에 숨을 불거나 손으로 잡으세요 — 습도 및 온도 읽기가 업데이트되는 것을 확인하세요.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q DHT11 ready [2026-04-29 09:00:04] Humidity: 55.0% | Temperature: 26.00°C ~ 78.80°F [2026-04-29 09:00:07] Humidity: 56.0% | Temperature: 26.10°C ~ 79.00°F [2026-04-29 09:00:10] Humidity: 58.0% | Temperature: 26.40°C ~ 79.52°F [2026-04-29 09:00:13] Humidity: 62.0% | Temperature: 27.00°C ~ 80.60°F

Bridge: Linux + MCU

이 섹션은 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다. Linux 측에서 Bridge를 통해 온도 및 습도를 읽을 수 있습니다:

  • DHT11 센서는 MCU(STM32)에 연결됩니다 — MCU는 3초마다 데이터를 읽고 최신 값을 캐시합니다
  • MPU는 DHT11에 직접 액세스할 수 없습니다 — Bridge 함수를 호출하여 읽기를 검색해야 합니다
  • MPU에는 Wi-Fi가 있습니다 — 완전한 Debian Linux를 실행하면서 데이터를 로깅하고, 대시보드에 게시하거나 인터넷을 통해 알림을 보낼 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 가능하게 합니다
  • ⚠️ /dev/ttyHS1(Linux) 및 Serial1(MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 절대 열지 마세요

요약하면: MCU는 3초마다 DHT11을 읽고 결과를 캐시합니다 → MPU는 Bridge를 폴링하여 읽기를 검색합니다 → MPU는 Wi-Fi를 통해 게시하거나 경고합니다.

참고: Bridge 스케치에서 loop() 함수는 3초마다 DHT11을 읽어 캐시된 값을 최신 상태로 유지합니다. 모든 Bridge 콜백은 읽기 전용이며 차단 없이 캐시된 데이터를 반환합니다.

MCU 코드(Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11 */ #include <DHT.h>#include "Arduino_RouterBridge.h" #define DHT11_PIN 2 DHT dht11(DHT11_PIN, DHT11); float last_humidity = 0.0; float last_temp_c = 0.0; float last_temp_f = 0.0; unsigned long last_read_ms = 0; String get_humidity(String arg) { return String(last_humidity, 1); } String get_temp_c(String arg) { return String(last_temp_c, 2); } String get_temp_f(String arg) { return String(last_temp_f, 2); } String get_status(String arg) { return "Temp: " + String(last_temp_c, 2) + "°C / " + String(last_temp_f, 2) + "°F Humidity: " + String(last_humidity, 1) + "%"; } void setup() { Bridge.begin(); Monitor.begin(); dht11.begin(); delay(2000); // allow sensor to stabilize float h = dht11.readHumidity(); float c = dht11.readTemperature(); float f = dht11.readTemperature(true); if (!isnan(h) && !isnan(c) && !isnan(f)) { last_humidity = h; last_temp_c = c; last_temp_f = f; } Bridge.provide("get_humidity", get_humidity); Bridge.provide("get_temp_c", get_temp_c); Bridge.provide("get_temp_f", get_temp_f); Bridge.provide("get_status", get_status); Monitor.println("Arduino UNO Q DHT11 Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= 3000) { last_read_ms = now; float h = dht11.readHumidity(); float c = dht11.readTemperature(); float f = dht11.readTemperature(true); if (isnan(h) || isnan(c) || isnan(f)) { Monitor.println("Failed to read from DHT11 sensor!"); } else { last_humidity = h; last_temp_c = c; last_temp_f = f; Monitor.println("Humidity: " + String(h, 1) + "% Temp: " + String(c, 2) + "°C / " + String(f, 2) + "°F"); } } }

Python 코드(Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11 */ from arduino.app_utils import * import time def loop(): status = Bridge.call("get_status") print(status) time.sleep(3) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선도에 표시된 대로 DHT11 센서를 Arduino UNO Q에 배선하세요.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다리세요.
  • 새 앱 만들기: Create New App을 클릭하고 Dht11Bridge라는 이름을 지정한 후 Create를 클릭하세요.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 Python 파일에 붙여넣습니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭하세요.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • Python 콘솔에서 3초마다 온도 및 습도 읽기가 표시되는 것을 확인하세요.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q DHT11 Bridge ready [2026-04-29 09:00:04] Humidity: 55.0% Temp: 26.00°C / 78.80°F [2026-04-29 09:00:07] Humidity: 56.0% Temp: 26.10°C / 79.00°F [2026-04-29 09:00:10] Humidity: 58.0% Temp: 26.40°C / 79.52°F
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:04] Temp: 26.00°C / 78.80°F Humidity: 55.0% [2026-04-29 09:00:07] Temp: 26.10°C / 79.00°F Humidity: 56.0% [2026-04-29 09:00:10] Temp: 26.40°C / 79.52°F Humidity: 58.0% [2026-04-29 09:00:13] Temp: 27.00°C / 80.60°F Humidity: 62.0%

Telegram

온도 및 습도를 원격으로 모니터링합니다. 온도가 35°C를 초과하거나 습도가 80%를 초과할 때 자동 알림을 받으세요.

MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다.

Python 코드(Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11 */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 TEMP_ALERT_C = 35.0 HUMIDITY_ALERT = 80.0 temp_alert_sent = False humi_alert_sent = False def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): global temp_alert_sent, humi_alert_sent # Auto-alerts temp_c_str = Bridge.call("get_temp_c") humi_str = Bridge.call("get_humidity") try: temp_c = float(temp_c_str) humi = float(humi_str) temp_f_str = Bridge.call("get_temp_f") if temp_c > TEMP_ALERT_C and not temp_alert_sent: temp_alert_sent = True msg = f"⚠️ High temperature: {temp_c_str}°C / {temp_f_str}°F" print(msg) send_message(CHAT_ID, msg) elif temp_c <= TEMP_ALERT_C: temp_alert_sent = False if humi > HUMIDITY_ALERT and not humi_alert_sent: humi_alert_sent = True msg = f"💧 High humidity: {humi_str}%" print(msg) send_message(CHAT_ID, msg) elif humi <= HUMIDITY_ALERT: humi_alert_sent = False except ValueError: pass # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q DHT11 Bot\n" "/temp - Read temperature (°C and °F)\n" "/humidity - Read humidity\n" "/status - Get full sensor status") elif text == "/temp": temp_c = Bridge.call("get_temp_c") temp_f = Bridge.call("get_temp_f") send_message(chat_id, f"Temperature: {temp_c}°C ~ {temp_f}°F") elif text == "/humidity": result = Bridge.call("get_humidity") send_message(chat_id, f"Humidity: {result}%") elif text == "/status": result = Bridge.call("get_status") send_message(chat_id, result) else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(3) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 얻은 실제 봇 토큰으로 바꾸세요.
  • YOUR_CHAT_ID를 Telegram 채팅 ID로 바꾸세요.
  • 이 Python 코드를 앱의 Python 파일에 붙여넣습니다(MCU 스케치 유지).
  • Run 버튼을 클릭합니다. Telegram에서 /temp 또는 /humidity를 보내거나 센서에 숨을 불어 알림을 트리거하세요.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:10] ⚠️ High temperature: 36.00°C / 96.80°F [2026-04-29 09:10:25] 💧 High humidity: 82.0% [2026-04-29 09:10:40] Received: /temp [2026-04-29 09:10:55] Received: /humidity
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
/temp
10:15 AM ✓✓
Temperature: 26.00°C ~ 78.80°F
10:16 AM
/humidity
10:17 AM ✓✓
Humidity: 55.0%
10:18 AM
/status
10:19 AM ✓✓
Temp: 26.00°C / 78.80°F Humidity: 55.0%
10:20 AM
⚠️ High temperature: 36.00°C / 96.80°F
10:21 AM
💧 High humidity: 82.0%
10:22 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

프로젝트 아이디어

Arduino UNO Q 및 DHT11 센서로 많은 유용한 프로젝트를 구축할 수 있습니다:

  • 스마트 기상 관측소: 온도와 습도를 지속적으로 측정합니다 — Linux MPU는 매분 데이터를 로깅하고 일일 요약을 클라우드 대시보드에 업로드합니다
  • 온실 자동화: 습도 및 온도 읽기를 사용하여 릴레이 팬 및 미스팅 시스템을 제어합니다 — MPU는 조건이 범위를 벗어날 때 Telegram 경고를 보냅니다
  • 아기 방 모니터: 아기 방의 온도 및 습도를 모니터링합니다 — Telegram은 너무 덥거나 건조할 때 경고를 보내 편안함을 유지하는 데 도움이 됩니다
  • 발효 모니터: 발효 중 온도 및 습도를 추적합니다 — MPU는 데이터를 로깅하고 조건이 목표 범위에서 벗어나면 Telegram 경고를 표시합니다
  • 원격 환경 로거: 배터리 전원 및 Wi-Fi로 배포합니다 — MPU는 10분마다 Bridge를 통해 DHT11을 읽고 읽기를 원격 서버에 업로드합니다

도전해보세요

Arduino UNO Q의 DHT11로 더 나아갈 준비가 되셨나요? 다음 도전을 시도해보세요:

  • 쉬움: MCU 스케치를 수정하여 습도가 70%를 초과하면 내장 LED를 깜빡이게 하여 보드에서 직접 시각적 경고를 제공합니다.
  • 중간: set_temp_threshold(String)set_humi_threshold(String) Bridge 함수를 추가하여 Python이 MCU 스케치를 재컴파일하지 않고 런타임에 경고 임계값을 동적으로 업데이트할 수 있도록 합니다.
  • 고급: 편안함 지수 표시 빌드: 온도 및 습도에서 열 지수를 계산하고, Python 콘솔에 표시하고, 평균 온도, 습도 및 열 지수를 포함하는 매시간 Telegram 보고서를 보냅니다. 마지막 3개 읽기를 기반으로 트렌드 표시기(상승/하강/안정)를 포함하세요.