아두이노 우노 Q DHT22 LCD

DHT22 고정밀 습도 및 온도 센서와 16x2 I2C LCD를 Arduino UNO Q와 결합합니다. DHT22는 DHT11보다 더 높은 정확도를 제공하므로 정밀한 환경 모니터링이 필요한 프로젝트에 이상적입니다.

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

Arduino UNO Q dht22 lcd

필요한 하드웨어

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

DHT22 센서 소개

핀 배열

DHT22는 4개의 핀을 가지고 있습니다(일반적인 3핀 모듈 사용 시):

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

작동 원리

DHT22는 단일 와이어 디지털 프로토콜을 사용하여 습도 및 온도를 전송합니다. DHT11보다 높은 정밀도를 제공합니다:

  • 습도: 0–100% RH (±2–5% 정확도)
  • 온도: -40–80°C (±0.5°C 정확도)

각 읽기 사이에 최소 2–3초를 기다리십시오.

LCD 디스플레이 소개

16x2 I2C LCD는 I2C를 통해 연결되며 16개의 문자로 된 2행을 표시합니다. 상단 행은 온도(°C 및 °F)를 표시하고 하단 행은 습도를 표시합니다. 기본 I2C 주소: 0x27.

배선 다이어그램

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

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

DHT22에서 Arduino UNO Q MCU로:

DHT22 핀 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

DHT22 + LCD 프로그래밍 방법

  • 필요한 라이브러리를 포함시킵니다:
#include <DHT.h> #include <LiquidCrystal_I2C.h>
  • DHT22 및 LCD를 초기화합니다:
DHT dht22(DHT22_PIN, DHT22); LiquidCrystal_I2C lcd(0x27, 16, 2);
  • 온도 및 습도를 읽습니다(각 읽기 사이에 최소 3초를 기다리십시오):
float humidity = dht22.readHumidity(); float tempC = dht22.readTemperature(); float tempF = dht22.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는 두 개의 프로세서가 함께 작동합니다:

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

MCU는 3초마다 DHT22를 읽고, LCD에 온도와 습도를 표시하며, 시리얼 모니터에 인쇄합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht22-lcd */ #include <DHT.h> #include <DIYables_LCD_I2C.h> #define DHT22_PIN 2 DHT dht22(DHT22_PIN, DHT22); DIYables_LCD_I2C lcd(0x27, 16, 2); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("DHT22 Sensor"); lcd.setCursor(0, 1); lcd.print("Initializing..."); dht22.begin(); delay(2000); // allow sensor to stabilize Serial.println("Arduino UNO Q DHT22 + LCD ready"); } void loop() { float humidity = dht22.readHumidity(); float tempC = dht22.readTemperature(); float tempF = dht22.readTemperature(true); if (isnan(humidity) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT22 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 시작하기 튜토리얼을 먼저 따르십시오.

  • 연결: 배선 다이어그램에 표시된 대로 DHT22 및 LCD를 Arduino UNO Q MCU에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드를 감지할 때까지 기다립니다.
  • 새 앱 생성: 새 앱 생성 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab의 새 앱 생성
  • 앱에 이름을 지정합니다(예: Dht22Lcd).
  • 생성을 클릭하여 확인합니다.
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와 시리얼 모니터에 나타나는 것을 관찰합니다.

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 DHT22 + LCD ready [2026-04-29 09:00:04] Humidity: 55.2% Temp: 26.30°C / 79.34°F [2026-04-29 09:00:07] Humidity: 55.1% Temp: 26.35°C / 79.43°F [2026-04-29 09:00:10] Humidity: 55.3% Temp: 26.40°C / 79.52°F

Bridge: Linux + MCU

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

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

간단히 말해: MCU는 3초마다 DHT22를 읽고 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-dht22-lcd */ #include <DHT.h> #include <DIYables_LCD_I2C.h>#include "Arduino_RouterBridge.h" #define DHT22_PIN 2 DHT dht22(DHT22_PIN, DHT22); 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("DHT22 Sensor"); lcd.setCursor(0, 1); lcd.print("Initializing..."); dht22.begin(); delay(2000); // allow sensor to stabilize float h = dht22.readHumidity(); float c = dht22.readTemperature(); float f = dht22.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 DHT22 + LCD Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= 3000) { last_read_ms = now; float h = dht22.readHumidity(); float c = dht22.readTemperature(); float f = dht22.readTemperature(true); if (isnan(h) || isnan(c) || isnan(f)) { Monitor.println("Failed to read from DHT22 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-dht22-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)

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 DHT22 및 LCD를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 생성: 새 앱 생성을 클릭하고, Dht22LcdBridge라고 이름을 지정한 다음, 생성을 클릭합니다.
  • 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 DHT22 + LCD Bridge ready [2026-04-29 09:00:04] Humidity: 55.2% Temp: 26.30°C / 79.34°F [2026-04-29 09:00:07] Humidity: 55.1% Temp: 26.35°C / 79.43°F [2026-04-29 09:00:10] Humidity: 55.3% 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.30°C / 79.34°F Humidity: 55.2% [2026-04-29 09:00:07] Temp: 26.35°C / 79.34°F Humidity: 55.1% [2026-04-29 09:00:10] Temp: 26.40°C / 79.52°F Humidity: 55.3%

Telegram

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

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

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-dht22-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 DHT22 + 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
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.30°C = 79.34°F
10:16 AM
/humidity
10:17 AM ✓✓
Humidity: 55.2%
10:18 AM
/clear
10:19 AM ✓✓
LCD cleared: OK
10:20 AM
/status
10:21 AM ✓✓
Temp: 26.30°C / 79.34°F Humidity: 55.2%
10:22 AM
⚠️ High temperature alert: 36.20°C / 97.16°F
10:23 AM
⚠️ High humidity alert: 82.1%
10:24 AM

OpenClaw

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

프로젝트 아이디어

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

  • 정밀 실내 온습도계: DHT22의 ±0.5°C 정확도와 LCD의 명확한 읽기를 결합하면 실내 기후 모니터링을 위한 안정적인 독립형 기기가 됩니다
  • 식품 저장소 모니터: 식료품 저장실 또는 와인 셀러의 습도 및 온도를 주시합니다 — Telegram 알림은 조건이 안전한 범위를 벗어날 때 알려줍니다
  • 식물 재배 스테이션: LCD에 온도 및 습도를 표시하여 이상적인 재배 조건 확보 — 읽기가 떨어질 때 Bridge를 통해 가습기 또는 팬을 트리거합니다
  • 교실 날씨 스테이션: 교실에 DHT22 및 LCD를 마운트합니다 — 학생들은 실시간 읽기를 관찰하고 Bridge Python 측을 사용하여 하루 종일 기후 데이터를 기록하고 그래프로 표시할 수 있습니다
  • 서버실 감시자: DHT22의 확장된 온도 범위(최대 80°C)를 사용하여 랙 온도를 모니터링합니다 — LCD는 실시간 상태를 표시하고 Telegram은 장비 손상이 발생하기 전에 즉시 알림을 보냅니다

도전 과제

Arduino UNO Q에서 DHT22 및 LCD를 더 사용하도록 준비되었나요? 이러한 도전 과제를 시도해 보세요:

  • 쉬움: LCD에 스크롤 텍스트 추가 — 온도가 35°C를 초과하면 lcd.scrollDisplayLeft()를 사용하여 하단 행에 걸쳐 경고 메시지를 스크롤합니다.
  • 중간: Telegram /setthreshold 명령 구현으로 인수로 온도 값을 받고 Python 측에서 알림 임계값을 동적으로 업데이트합니다(예: /setthreshold 30).
  • 고급: 이중 모드 디스플레이 구축 — LCD를 Celsius/Fahrenheit 디스플레이와 노점 디스플레이 사이에 5초마다 전환하고, 노점을 Python을 통해 Bridge로 계산하고 set_dew_point(String) Bridge 함수를 통해 MCU로 다시 보냅니다.