Primal Display: 라즈베리 파이 LCD 온도 모니터 만들기
이 가이드는 16x2 HD44780 호환 LCD를 라즈베리 파이 3에 연결하고 DHT11 센서에서 실시간 온습도 판독값 표시하는 방법을 보여줍니다. 하드웨어 선택, 배선(4비트/8비트 모드), 필수 라이브러리, 완전한 파이썬 스크립트까지 다룹니다.
이야기
소개
LCD 디스플레이는 모든 라즈베리 파이 프로젝트에 다재다능한 애드온입니다. HD44780 호환 스크린을 GPIO 핀에 직접 배선하면 I2C나 SPI 어댑터 없이 센서 데이터나 커스텀 메시지 표시 가능.
하드웨어
- HD44780 호환 16x2 LCD (비용 $10 미만)
- 라즈베리 파이 3(또는 최신 모델)
- DHT11 온습도 센서
- 라즈비안 OS 설치된 마이크로 SD 카드
- 1~2개 10kΩ 포텐쇼미터(대비/밝기)
- 브레드보드, 점퍼 와이어, 5V 전원 공급기
LCD에 GPIO 6핀 사용, 이 직접 방식은 파이 시리얼 포트 자유롭게 하고 I2C 드라이버 불필요.
배선하기
두 가지 배선 옵션:
- 4비트 모드 – 데이터 라인 4개, 대비용 포텐쇼미터 1개.
- 8비트 모드 – 데이터 라인 8개, 포텐쇼미터 2개(대비, 밝기).
4비트 모드에서 8비트 명령 바이트가 두 4비트 반으로 분할돼 데이터 버스가 절반 폭. 실제로는 LCD 내부 처리 시간이 8비트 모드 속도 이점을 상쇄하므로 가용 핀 기준 선택.
LCD 핀 연결 (4비트)
- 핀 1 (GND) – 접지
- 핀 2 (+5V) – 전원
- 핀 3 (Vo) – 포텐쇼미터 와이퍼(대비)
- 핀 4 (RS) – GPIO 37
- 핀 5 (RW) – 접지(쓰기 전용)
- 핀 6 (EN) – GPIO 35
- 핀 7~10 – 미사용
- 핀 11 (D4) – GPIO 33
- 핀 12 (D5) – GPIO 31
- 핀 13 (D6) – GPIO 29
- 핀 14 (D7) – GPIO 23
- 핀 15 (LED+) – +5V
- 핀 16 (LED−) – 접지
LCD 핀 연결 (8비트)
- 핀 1 – 접지
- 핀 2 – +5V
- 핀 3 – 포텐쇼미터 와이퍼(대비)
- 핀 4 – GPIO 37 (RS)
- 핀 5 – 접지 (RW)
- 핀 6 – GPIO 35 (EN)
- 핀 7 (D0) – GPIO 40
- 핀 8 (D1) – GPIO 38
- 핀 9 (D2) – GPIO 36
- 핀 10 (D3) – GPIO 32
- 핀 11 (D4) – GPIO 33
- 핀 12 (D5) – GPIO 31
- 핀 13 (D6) – GPIO 29
- 핀 14 (D7) – GPIO 23
- 핀 15 – +5V
- 핀 16 – 접지
DHT11 센서 배선
DHT11은 VCC, Data, GND 3핀 사용. VCC를 3.3V(핀 1) 연결, 판독 불안정 시 5V(핀 2)로 전환. Data 핀을 GPIO 18(물리 핀 12)에 연결. VCC와 Data 사이 풀업 저항(4.7kΩ) 권장.
필수 라이브러리
시스템에 빌드 도구와 파이썬 헤더 확인:
sudo apt-get update
sudo apt-get install build-essential python-dev
RPLCD 설치로 LCD 제어:
sudo apt-get install python-pip
sudo pip install RPLCD
깃허브에서 Adafruit DHT11 라이브러리 설치:
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
파이썬 스크립트 (8비트)
원하는 에디터(예: nano)로 temperature.py 생성:
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import Adafruit_DHT
from RPLCD import CharLCD
GPIO.cleanup()
# LCD 설정 – 8비트 모드
lcd = CharLCD(
numbering_mode=GPIO.BOARD,
cols=16,
rows=2,
pin_rs=37,
pin_e=35,
pins_data=[40, 38, 36, 32, 33, 31, 29, 23]
)
while True:
humidity, temperature = Adafruit_DHT.read_retry(11, 18)
if humidity is None or temperature is None:
print('Failed to retrieve data from sensor')
continue
print(f'Temp: {temperature:.1f} C Humidity: {humidity:.1f} %')
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(f'Temp: {int(temperature)} C')
lcd.cursor_pos = (1, 0)
lcd.write_string(f'Humidity: {int(humidity)} %')
time.sleep(5)
스크립트 실행 가능하게 하고 실행:
chmod +x temperature.py
./temperature.py
4비트 모드 대안
pins_data 리스트를 4개 GPIO 핀(예: [33, 31, 29, 23])으로 교체하고 LCD 초기화 조정.
요약
이 단계를 따라하면 실시간 온습도 표시하는 완전 기능 LCD 디스플레이 완성. 날씨 관측소, IoT 대시보드, 교육 프로젝트에 완벽.
자세히 보기
LCD 드라이버와 고급 설정에 대한 깊은 통찰은 Adafruit DHT 저장소와 RPLCD 문서 탐색.