아두이노 우노 Q DHT11 LCD

DHT11 습도 및 온도 센서를 Arduino UNO Q의 16x2 I2C LCD와 결합하여 명확하고 한눈에 볼 수 있는 환경 모니터를 만듭니다. Bridge와 Telegram을 추가하여 원격 모니터링 및 경고를 받습니다.

이 튜토리얼에서 배울 사항:

Arduino UNO Q dht11 lcd

필요한 하드웨어

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

DHT11 센서 정보

핀 배치

DHT11에는 4개의 핀(일반적인 3핀 모듈 사용 시)이 있습니다:

  • GND: GND에 연결
  • VCC: 3.3V 또는 5V에 연결
  • DATA: Arduino UNO Q MCU의 디지털 핀 2에 연결
dht11 온습도 센서 핀 배치

작동 방식

DHT11은 단일 와이어 디지털 프로토콜을 사용하여 습도 및 온도를 전송합니다. 측정 가능:

  • 습도: 20–80% RH (±5% 정확도)
  • 온도: 0–50°C (±2°C 정확도)

측정 간 최소 3초 대기.

LCD 디스플레이 정보

16x2 I2C LCD는 I2C를 통해 연결되며 2행의 16자를 표시합니다. 맨 위 행에는 온도(°C 및 °F)가 표시되고 맨 아래 행에는 습도가 표시됩니다. 기본 I2C 주소: 0x27.

배선 다이어그램

Arduino UNO Q dht11 lcd 배선 다이어그램

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

DHT11에서 Arduino UNO Q MCU로:

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

LCD I2C에서 Arduino UNO Q MCU로:

LCD 핀 Arduino UNO Q MCU
GND GND
VCC 5V
SDA SDA
SCL SCL

DHT11 + LCD 프로그래밍 방법

  • 필요한 라이브러리 포함:
#include <DHT.h> #include <LiquidCrystal_I2C.h>
  • DHT11 및 LCD 초기화:
DHT dht11(DHT11_PIN, DHT11); LiquidCrystal_I2C lcd(0x27, 16, 2);
  • 온도 및 습도 읽기 (읽기 간 최소 3초 대기):
float humidity = dht11.readHumidity(); float tempC = dht11.readTemperature(); float tempF = dht11.readTemperature(true);
  • 항상 실패한 읽기 확인:
if (isnan(humidity) || isnan(tempC) || isnan(tempF)) { // sensor read failed }
  • LCD에 표시:
lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(tempC, 1); lcd.print((char)223); lcd.print("C "); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(humidity, 1); lcd.print("%");

Arduino UNO Q 코드

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

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

MCU는 3초마다 DHT11을 읽고 LCD에 온도 및 습도를 표시하며 Serial Monitor에 인쇄합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11-lcd */ #include <DHT.h> #include <DIYables_LCD_I2C.h> #define DHT11_PIN 2 DHT dht11(DHT11_PIN, DHT11); DIYables_LCD_I2C lcd(0x27, 16, 2); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("DHT11 Sensor"); lcd.setCursor(0, 1); lcd.print("Initializing..."); dht11.begin(); delay(2000); // allow sensor to stabilize Serial.println("Arduino UNO Q DHT11 + LCD ready"); } void loop() { 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!"); lcd.setCursor(0, 0); lcd.print("Sensor Error! "); delay(3000); return; } lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(tempC, 1); lcd.print((char)223); lcd.print("C "); lcd.print(tempF, 1); lcd.print((char)223); lcd.print("F "); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(humidity, 1); lcd.print("% "); Serial.print("Humidity: "); Serial.print(humidity, 1); Serial.print("% Temp: "); Serial.print(tempC, 2); Serial.print("°C / "); Serial.print(tempF, 2); Serial.println("°F"); delay(3000); }

빠른 단계

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

  • 연결: 배선 다이어그램에 표시된 대로 DHT11 및 LCD를 Arduino UNO Q MCU에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: 새 앱 만들기 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab에서 새 앱 만들기
  • 앱에 이름을 지정합니다. 예: Dht11Lcd
  • 만들기를 클릭하여 확인합니다.
Arduino UNO Q의 아두이노 app lab 앱 폴더 및 파일
  • 스케치 붙여넣기: 위의 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
  • Search for DIYables LCD I2C created by DIYables.io 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
DIYables LCD I2C DIYables.io

This library is designed for HD44780-based I2C LCD displays. It provides LiquidCrystal-compatible API plus helper functions (text alignment, progress bars, predefined custom characters). Supports multiple I2C buses (Wire, Wire1, Wire2) for advanced boards like Arduino Giga, Due, and ESP32. Compatible with all Arduino-based platforms including Arduino Uno, Mega, Nano, ESP32, ESP8266, STM32, and Raspberry Pi Pico.

1.0.0
Install
More Info
  • 업로드: Arduino App Lab에서 실행 버튼을 클릭합니다.
Arduino UNO Q의 아두이노 app lab에서 실행 버튼 클릭
  • 3초마다 LCD 및 Serial Monitor에 온도 및 습도가 나타나는 것을 확인합니다.

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 + LCD ready [2026-04-29 09:00:04] Humidity: 55.0% Temp: 26.40°C / 79.52°F [2026-04-29 09:00:07] Humidity: 55.0% Temp: 26.40°C / 79.52°F [2026-04-29 09:00:10] Humidity: 56.0% Temp: 26.60°C / 79.88°F

Bridge: Linux + MCU

이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 측이 Bridge를 통해 DHT11 데이터를 읽고 LCD를 제어하는 방법을 보여줍니다:

  • DHT11 센서 및 LCD는 MCU에 연결되어 있습니다 — 모든 읽기 및 디스플레이 로직은 MCU에서 3초마다 실행됩니다
  • MPU는 센서 또는 LCD에 직접 액세스할 수 없습니다 — Bridge 함수를 호출하여 읽기를 검색하거나 디스플레이를 지웁니다
  • MPU에는 Wi-Fi가 있습니다 — 전체 Debian Linux를 실행하므로 읽기를 로깅하거나 대시보드에 게시하거나 Telegram 경고를 보낼 수 있습니다
  • Arduino_RouterBridge두 프로세서 간의 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1(Linux) 및 Serial1(MCU)은 라우터로 예약되어 있습니다 — 사용자 코드에서 이들을 열지 마세요

요약: MCU는 3초마다 DHT11을 읽고 LCD를 업데이트 → MPU는 Bridge를 통해 읽기 → MPU는 Wi-Fi를 통해 경고 전송.

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11-lcd */ #include <DHT.h> #include <DIYables_LCD_I2C.h>#include "Arduino_RouterBridge.h" #define DHT11_PIN 2 DHT dht11(DHT11_PIN, DHT11); DIYables_LCD_I2C lcd(0x27, 16, 2); float last_humidity = 0.0; float last_temp_c = 0.0; float last_temp_f = 0.0; unsigned long last_read_ms = 0; void lcd_show(float tempC, float tempF, float humidity) { lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(tempC, 1); lcd.print((char)223); lcd.print("C "); lcd.print(tempF, 1); lcd.print((char)223); lcd.print("F "); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(humidity, 1); lcd.print("% "); } 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 clear_lcd(String arg) { lcd.clear(); Monitor.println("LCD cleared"); return "OK"; } 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(); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("DHT11 Sensor"); lcd.setCursor(0, 1); lcd.print("Initializing..."); 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; lcd_show(c, f, h); } Bridge.provide("get_humidity", get_humidity); Bridge.provide("get_temp_c", get_temp_c); Bridge.provide("get_temp_f", get_temp_f); Bridge.provide_safe("clear_lcd", clear_lcd); Bridge.provide("get_status", get_status); Monitor.println("Arduino UNO Q DHT11 + LCD 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; lcd_show(c, f, h); 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-lcd */ 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 및 LCD를 Arduino UNO Q에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 만들기: 새 앱 만들기를 클릭하고 이름을 Dht11LcdBridge로 지정한 후 만들기를 클릭합니다.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 Python 파일에 붙여넣습니다.
  • 업로드: Arduino App Lab에서 실행 버튼을 클릭합니다.
Arduino UNO Q의 아두이노 app lab에서 실행 버튼 클릭
  • LCD가 3초마다 업데이트되고 Python 콘솔에 읽기가 나타나는 것을 확인합니다.

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 + LCD Bridge ready [2026-04-29 09:00:04] Humidity: 55.0% Temp: 26.40°C / 79.52°F [2026-04-29 09:00:07] Humidity: 55.0% Temp: 26.40°C / 79.52°F [2026-04-29 09:00:10] Humidity: 56.0% Temp: 26.60°C / 79.88°F
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:04] Temp: 26.40°C / 79.52°F Humidity: 55.0% [2026-04-29 09:00:07] Temp: 26.40°C / 79.52°F Humidity: 55.0% [2026-04-29 09:00:10] Temp: 26.60°C / 79.88°F Humidity: 56.0%

Telegram

DHT11 읽기를 원격으로 모니터링하고 온도 또는 습도가 임계값을 초과할 때 자동 Telegram 경고를 받습니다.

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

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht11-lcd */ 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_THRESHOLD_C = 35.0 HUMIDITY_THRESHOLD = 80.0 temp_alert_sent = False humidity_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, humidity_alert_sent # Auto-alerts temp_c_str = Bridge.call("get_temp_c") humidity_str = Bridge.call("get_humidity") try: temp_c = float(temp_c_str) humidity = float(humidity_str) if temp_c > TEMP_THRESHOLD_C and not temp_alert_sent: temp_alert_sent = True temp_f = Bridge.call("get_temp_f") msg = f"⚠️ High temperature alert: {temp_c_str}°C / {temp_f}°F" print(msg) send_message(CHAT_ID, msg) elif temp_c <= TEMP_THRESHOLD_C: temp_alert_sent = False if humidity > HUMIDITY_THRESHOLD and not humidity_alert_sent: humidity_alert_sent = True msg = f"⚠️ High humidity alert: {humidity_str}%" print(msg) send_message(CHAT_ID, msg) elif humidity <= HUMIDITY_THRESHOLD: humidity_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 + LCD Bot\n" "/temp - Temperature (°C and °F)\n" "/humidity - Humidity reading\n" "/clear - Clear LCD display\n" "/status - 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 == "/clear": result = Bridge.call("clear_lcd") send_message(chat_id, f"LCD cleared: {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 스케치 유지).
  • 실행 버튼을 클릭합니다. 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:18] ⚠️ High temperature alert: 36.20°C / 97.16°F [2026-04-29 09:10:35] Received: /humidity [2026-04-29 09:10:40] Received: /status
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.40°C = 79.52°F
10:16 AM
/humidity
10:17 AM ✓✓
Humidity: 55.0%
10:18 AM
/clear
10:19 AM ✓✓
LCD cleared: OK
10:20 AM
/status
10:21 AM ✓✓
Temp: 26.40°C / 79.52°F Humidity: 55.0%
10:22 AM
⚠️ High temperature alert: 36.20°C / 97.16°F
10:23 AM
⚠️ High humidity alert: 82.0%
10:24 AM

OpenClaw

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

프로젝트 아이디어

Arduino UNO Q의 DHT11 및 LCD로 많은 유용한 프로젝트를 만들 수 있습니다:

  • 휴대용 온습도계: LCD는 온도 및 습도를 명확하게 보여줍니다 — 프로젝트를 작은 케이스에 패키징하여 휴대용 기후 게이지를 만들 수 있습니다
  • 아기 방 모니터: 보육실에 장치를 설치합니다 — LCD는 실시간 읽기를 표시하고 온도 또는 습도가 쾌적한 범위를 벗어나면 Telegram에서 부모에게 즉시 경고합니다
  • 콜드 체인 로거: DHT11 및 LCD를 사용하여 저장소 조건을 추적합니다 — Python 측은 나중에 검사하기 위해 타임스탬프가 있는 Linux 파일에 Bridge를 통해 각 읽기를 기록합니다
  • 수경 재배 스테이션: LCD에 성장실 온도 및 습도를 표시하고 습도가 떨어질 때 Bridge를 통해 가습기 릴레이를 트리거하여 식물 성장 조건을 최적으로 유지합니다
  • 실험실 환경 추적: DHT11 읽기를 MPU의 Wi-Fi를 사용하여 매분 HTTP 엔드포인트에 게시합니다 — LCD는 현재 조건을 확인하는 동안 대시보드는 과거 트렌드를 표시합니다

도전해 보세요

Arduino UNO Q의 DHT11 및 LCD로 더 나아갈 준비가 되셨나요? 다음 도전 과제를 시도하세요:

  • 쉬움: createChar()를 사용하여 LCD에 사용자 정의 섭씨 도 문자를 추가하여 디스플레이가 가장 가까운 인쇄 가능 문자 대신 참 ° 기호를 표시하도록 합니다.
  • 중간: Python 측에서 버퍼링한 Bridge 데이터에서 계산한 마지막 10개 읽기의 평균 온도 및 습도를 반환하는 Telegram /avg 명령을 구현합니다.
  • 고급: 일일 예정 보고서 구축 — 24시간마다 MPU는 Bridge 데이터에서 하루의 최소, 최대 및 평균 온도 및 습도를 계산하고 형식이 지정된 요약을 Telegram으로 보냅니다.