Komercijalne vremenske stanice često su skupe i zatvorene. S Raspberry Pi-em, DHT22 i BMP280 možete čitati temperaturu, vlažnost i tlak, spremati očitavanja i prikazati ih lokalno. Ovaj projekt pokriva spajanje, Python skriptu, SQLite i minimalni Flask endpoint.
Materijali
- Raspberry Pi (3B+ ili noviji)
- DHT22 (temperatura i vlažnost), oko 50 kn
- BMP280 (tlak), oko 30 kn
- Ženska-ženska spojna žica, breadboard (opcionalno)
- MicroSD (8GB+), napajanje za Pi
Senzori i sitniš: grubo 300–500 kn bez Pi-a. Cijene variraju.
Shema spajanja
DHT22
DHT22 | Raspberry Pi
---------|---------------
VCC (+) | Pin 1 (3.3V)
DATA | Pin 7 (GPIO 4)
NC | (ne spajaj)
GND (-) | Pin 6 (Ground)
BMP280 (I2C)
BMP280 | Raspberry Pi
---------|---------------
VCC | Pin 1 (3.3V)
GND | Pin 9 (Ground)
SCL | Pin 5 (GPIO 3 - SCL)
SDA | Pin 3 (GPIO 2 - SDA)
Provjerite datasheet vašeg modula; raspored pinova nije uvijek isti. Polaritet mora biti točan.
Priprema Pi-a
sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-dev git -y
pip3 install adafruit-circuitpython-dht
pip3 install adafruit-circuitpython-bmp280
pip3 install RPi.GPIO
Za BMP280 omogućite I2C: sudo raspi-config → Interface Options → I2C → Yes, zatim sudo reboot.
Python: očitavanje senzora
#!/usr/bin/env python3
import time
import board
import adafruit_dht
import busio
import adafruit_bmp280
from datetime import datetime
dht_sensor = adafruit_dht.DHT22(board.D4)
i2c = busio.I2C(board.SCL, board.SDA)
bmp_sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
bmp_sensor.sea_level_pressure = 1013.25
print("Vremenska stanica - Ctrl+C za izlaz")
while True:
try:
temperature = dht_sensor.temperature
humidity = dht_sensor.humidity
pressure = bmp_sensor.pressure
altitude = bmp_sensor.altitude
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"\n{timestamp}")
print(f"Temperatura: {temperature:.1f}°C")
print(f"Vlažnost: {humidity:.1f}%")
print(f"Tlak: {pressure:.2f} hPa")
print(f"Nadmorska visina: {altitude:.2f} m")
time.sleep(5)
except RuntimeError as e:
# DHT povremeno baca grešku; to je normalno
print(f"Greška: {e}")
time.sleep(2)
continue
except KeyboardInterrupt:
print("\nZaustavljanje...")
break
dht_sensor.exit()
python3 weather_station.py
Ako je spajanje ispravno, ispis se osvježava svakih 5 sekundi. DHT greške su česte; skripta ih hvata i nastavlja.
SQLite za povijest
import sqlite3
conn = sqlite3.connect("weather_data.db")
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS readings
(timestamp TEXT, temperature REAL, humidity REAL,
pressure REAL, altitude REAL)""")
c.execute(
"INSERT INTO readings VALUES (?, ?, ?, ?, ?)",
(timestamp, temperature, humidity, pressure, altitude),
)
conn.commit()
conn.close()
Ubacite INSERT u petlju nakon uspješnog očitavanja.
Minimalni Flask prikaz
pip3 install flask
from flask import Flask, render_template
import sqlite3
app = Flask(__name__)
@app.route("/")
def index():
conn = sqlite3.connect("weather_data.db")
c = conn.cursor()
c.execute("SELECT * FROM readings ORDER BY timestamp DESC LIMIT 1")
latest = c.fetchone()
conn.close()
return render_template("index.html", data=latest)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
Lokalno: http://raspberrypi.local:5000. Ne izlažite Flask na internet bez reverse proxyja i autentikacije.
systemd
sudo nano /etc/systemd/system/weather-station.service
[Unit]
Description=Weather Station Service
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/weather-station
ExecStart=/usr/bin/python3 /home/pi/weather-station/weather_station.py
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now weather-station.service
Dalje
- 16×2 LCD za lokalni prikaz
- Grafana za grafove (često preko Dockera)
- Notifikacije na ekstremne vrijednosti
- Vanjski senzori (kiša, vjetar) u odgovarajućem kućištu
Zaključak
Imate očitavanje + povijest + jednostavan web sloj. DHT22 tipično ima ±0.5°C / ±2–5% RH; dovoljno za kuću. Pi s dva senzora troši grubo nekoliko wata. Vanjska montaža traži zaštitu od kiše i sunca.
Povezano: Raspberry Pi kao home server, Home Assistant na Pi-u.