라즈베리 파이 4 웹 기반 실시간 온습도 모니터링
이 프로젝트에서 라즈베리 파이 4가 가벼운 Bottle 웹 서버 호스팅, Adafruit DHT11 온습도 센서 데이터 읽어 실시간 반환. 보드 장착 RGB LED가 요청마다 고유 색상 점등으로 서버 동작 즉각 시각 피드백.
작동 방식
https://pi‑주소:6789/ 접속해 루트 경로 트리거. 페이지 로드 중 적색 LED 점등
- 페이지 로드 후 3개 버튼 중 하나 눌러:
- 파랑 – 현재 습도 표시, LED 파랑
- 초록 – 현재 온도 표시, LED 초록
- 빨강(정지) – 표시 초기화, LED 빨강 리셋, 연속 업데이트 중지
- 각 버튼 초당 GET 요청 전송, 정지 버튼 누르거나 브라우저 닫을 때까지 지속
Ctrl+C로 서버 중지 시 모든 LED 끄고 GPIO 핀 정리
하드웨어 회로도
서버 코드
from bottle import route, run, template, request
import RPi.GPIO as GPIO
import Adafruit_DHT
# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
# 센서 설정 – DHT11 GPIO 25 연결
sensor_type = Adafruit_DHT.DHT11
sensor_pin = 25
GPIO.setup(sensor_pin, GPIO.IN)
# RGB LED 핀
GPIO.setup(14, GPIO.OUT) # Red
GPIO.setup(15, GPIO.OUT) # Green
GPIO.setup(18, GPIO.OUT) # Blue
# 모든 LED 끄기 헬퍼
def set_leds_off():
GPIO.output(14, GPIO.LOW)
GPIO.output(15, GPIO.LOW)
GPIO.output(18, GPIO.LOW)
# 라우트
@route('/')
def index():
set_leds_off()
GPIO.output(14, GPIO.HIGH)
return template('index.html')
@route('/humidity')
def humidity():
set_leds_off()
GPIO.output(18, GPIO.HIGH)
humidity, temperature = Adafruit_DHT.read(sensor_type, sensor_pin)
return {'humidity': humidity}
@route('/temperature')
def temperature_route():
set_leds_off()
GPIO.output(15, GPIO.HIGH)
humidity, temperature = Adafruit_DHT.read(sensor_type, sensor_pin)
return {'temperature': temperature}
@route('/stop')
def stop():
set_leds_off()
GPIO.output(14, GPIO.HIGH)
return {'stop': 'No further updates.'}
# Bottle 서버 시작
run(host='0.0.0.0', port='6789')
# 종료 시 정리
set_leds_off()
GPIO.cleanup()
출처: 웹에서 습도/온도 가져오기