Pemantauan Suhu dan Kelembaban Real-Time melalui Web pada Raspberry Pi 4
Dalam proyek ini, Raspberry Pi 4 menjadi host untuk web server Bottle ringan yang membaca data dari sensor suhu-kelembaban Adafruit DHT11 dan mengembalikan nilai-nilai tersebut secara real-time. LED RGB yang dipasang pada papan menyala dengan warna yang berbeda untuk setiap permintaan, memberikan umpan balik visual instan bahwa server berfungsi.
Cara kerjanya
Navigasi ke https://pi‑address:6789/ untuk memicu root route. LED merah menyala saat halaman dimuat.
Setelah halaman dimuat, Anda dapat menekan salah satu dari tiga tombol:
Biru – menampilkan kelembaban saat ini dan menyala LED biru.
Hijau – menampilkan suhu saat ini dan menyala LED hijau.
Merah (Stop) – membersihkan layar, mereset LED menjadi merah, dan menghentikan pembaruan berkelanjutan.
Setiap tombol mengirim permintaan GET setiap detik sampai tombol stop ditekan atau jendela browser ditutup.
Menghentikan server dengan Ctrl+C mematikan semua LED dan membersihkan pin GPIO.
Skematika perangkat keras
Kode server
from bottle import route, run, template, request import RPi.GPIO as GPIO import Adafruit_DHT # Configure GPIO mode GPIO.setmode(GPIO.BCM) # Sensor configuration – DHT11 connected to GPIO 25 sensor_type = Adafruit_DHT.DHT11 sensor_pin = 25 GPIO.setup(sensor_pin, GPIO.IN) # RGB LED pins GPIO.setup(14, GPIO.OUT) # Red GPIO.setup(15, GPIO.OUT) # Green GPIO.setup(18, GPIO.OUT) # Blue # Helper to turn all LEDs off def set_leds_off(): GPIO.output(14, GPIO.LOW) GPIO.output(15, GPIO.LOW) GPIO.output(18, GPIO.LOW) # Routes @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.'} # Start the Bottle server run(host='0.0.0.0', port='6789') # Clean up on exit set_leds_off() GPIO.cleanup()