Station météo Raspberry Pi Zero avec BME280, DS18B20 et TSL2561
Station météo Raspberry Pi Zero avec BME280, DS18B20 et TSL2561
Ce projet montre comment créer une station météo basée sur Raspberry Pi Zero capable de collecter des données environnementales et de les envoyer vers une API distante.
Le système lit plusieurs capteurs et affiche les valeurs en temps réel sur un écran OLED.
Les mesures collectées :
- température
- humidité
- pression atmosphérique
- luminosité ambiante (lux)
- niveau infrarouge
Ce projet est idéal pour l’expérimentation IoT, la domotique ou l’enregistrement de données environnementales.
Matériel utilisé
Carte principale
- Raspberry Pi Zero ou Raspberry Pi Zero W
- Système Linux
- support du bus I2C
Capteurs
- BME280 capteur environnemental :
- température
- humidité
- pression atmosphérique
- DS18B20 capteur de température numérique (bus 1-wire)
- TSL2561 capteur de luminosité :
- lumière visible
- lumière infrarouge
- mesure en lux
Affichage
- écran OLED 128x64
- contrôleur SSD1306
- communication I2C
Architecture du système
Le Raspberry Pi Zero lit les données des capteurs via les interfaces I2C et 1-wire. Les mesures sont affichées sur un écran OLED puis envoyées vers une API HTTP.
- lecture de la température via le capteur DS18B20
- lecture de l’humidité et de la pression via le BME280
- lecture de la luminosité via le TSL2561
- affichage des mesures sur l’écran OLED
- envoi des données vers une API REST
- nouvelle mesure toutes les 30 secondes
Activation du capteur 1-wire DS18B20
Le capteur DS18B20 nécessite l’activation du bus 1-wire sous Linux :
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
La température est ensuite accessible via un fichier système Linux.
Code Python
from PIL import ImageFont
from PIL import ImageDraw
from PIL import Image
from BME280 import *
import SSD1306 as Adafruit_SSD1306
import os
import glob
import time
import requests
import smbus
import tsl2561
import PostHTTP
apiKey = 'API_KEY'
url = 'https://api.ms-only.net/meteo/'
RST = None
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
disp.begin()
disp.clear()
disp.display()
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
draw.rectangle((0,0,width,height), outline=0, fill=0)
font = ImageFont.load_default()
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return str(temp_c)
sensor = BME280()
bus = smbus.SMBus(1)
sensorLux = tsl2561.Tsl2561(bus)
while True:
draw.rectangle((0,0,width,height), outline=0, fill=0)
temp_ds18b20 = read_temp()
temp_bme280 = round(sensor.read_temperature(), 2)
pressure = round(sensor.read_pressure()/100, 2)
humidity = round(sensor.read_humidity(), 2)
lux_full, lux_ir = sensorLux.lux
lux_full = round(lux_full,2)
lux_ir = round(lux_ir,2)
draw.text((0,0),"Temp: " + str(temp_bme280) + " C", font=font, fill=255)
draw.text((0,10),"Hum: " + str(humidity) + " %", font=font, fill=255)
draw.text((0,20),"Press: " + str(pressure) + " hPa", font=font, fill=255)
draw.text((0,30),"Lux: " + str(lux_full), font=font, fill=255)
draw.text((0,40),"IR: " + str(lux_ir), font=font, fill=255)
disp.image(image)
disp.display()
headers = {
'Content-Type': 'application/json'
}
payload = PostHTTP.POSTHTTP.send(
apiKey,
str(temp_bme280),
str(pressure),
str(humidity),
str(lux_full),
str(lux_ir),
"0"
)
response = requests.post(
url,
data=payload,
headers=headers
)
time.sleep(30)
Exemple de données envoyées à l’API
{
"temperature": 21.5,
"pressure": 1013,
"humidity": 45,
"lux": 320,
"infrared": 120
}
Améliorations possibles
- ajouter capteur de vent
- ajouter capteur de pluie
- stockage en base de données
- tableau de bord web
- intégration MQTT
- visualisation Grafana
- boîtier extérieur étanche
Conclusion
Cette station météo Raspberry Pi Zero montre comment combiner plusieurs capteurs environnementaux dans un système IoT compact.
Le projet peut facilement évoluer vers une plateforme complète de monitoring météo connectée au cloud.
Auteur de l'article
jensepas