Poniższy projekt pozwala zbudować miniaturową stację meteorologiczną mierzącą w czasie rzeczywistym temperaturę, ciśnienie i wilgotność powietrza,
- Płytka ESP8266 z zainstalowanym firmweare'em Micropython
- Moduł pomiaru ciśnienia i temperatury BME280
- Moduł pomiaru wilgotności DHT11
- Płytka prototypowa
- Przewody
- Komputer z oprogramowaniem Thonny
- Kabel microUSB do podłączenia płytki
- Dostęp do sieci WiFi
Projekt wykorzystuję możliwości WiFi płytki ESP8266 do publikowania w czasie rzeczywistym, na lokalnym serwerze, wyników pomiaru ciśnienia i temperatury modułem BME280 oraz pomiaru wilgotności modułem DHT11. Są to podstawowe trzy parametry meteorologiczne powietrza, dzięki którym można analizować pogodę, sprawność klimatyzacji lub badać niektóre zjawiska termodynamiczne.
Instrukcja
1. Połączyć układ zgodnie z opisem
2. Sprawdzić poprawność połączenia
3. Połączyć płytkę ESP8266 do komputera za pomocą kabla USB
4. Pobrać na komputer lub przepisać pliki programu: boot.py, main.py, weather.py
5. Pobrać i rozpakować bibliotekę bme280.zip
6. Umieścić wszystkie 3 pliki i rozpakowaną bibliotekę (z roszerzeniem .py) w jednym folderze
7. Otworzyć wszystkie 4 pliki w programie Thonny
8. W pliku main.py ustawić zmienne NAZWA_SIECI i HASLO na nazwę i hasło sieci WiFi do której mają być nadawane pomiary
9. Zgrać pliki bme280.py, weather.py do pamięci płytki
10. Wybrać interpreter płytki ESP8266 w ustawieniach i uruchomić na niej program main.py
11. W konsoli powinien pojawić się adres IP, postaci **192.168.0.XX**
12. Otworzyć przeglądarkę internetową na dowolnym urządzeniu podłączonym do tej samej sieci WiFi i w pasku adresu wpisać zapisany adres IP płytki. Powinna wyświetlić się prosta strona HTML z odczytami czujników. Wartości aktualizowane są po każdym odświeżeniu strony.
13. Stację można uruchomić również w trybie samodzielnym. W tym celu należy zgrać pliki boot.py, main.py, weather.py, razem z biblioteką bme280.py do pamięci płytki ESP8266 (poprzez *Zapisz jako...*), wtedy skrypt uruchamiający automatycznie rozpocznie wykonywanie programu main.py przy każdym zasileniu, np. z PowerBank'a lub zasilacza sieciowego USB. Tak uruchomiona płytka powinna dalej nadawać swoje odczyty po WiFi, na ten sam adres IP.
# weather.py
from machine import Pin, I2C
from dht import DHT11
from bme280 import BME280
dht = DHT11(Pin(14, Pin.PULL_UP)) # czujnik wilgoci
bus = I2C(scl = Pin(5), sda = Pin(4), freq = 10000)
# czujnik ciśnienia i temperatury
# sprawdź połączenie I2C
try:
bmp = BME280(i2c = bus)
except OSError:
print("Brak połączenia z czujnikiem ciśnienia!")
def measure():
try:
dht.measure()
except OSError:
print("Błąd pomiaru wilgotności!")
else:
#print(f"DHT:{dht.temperature()}C {dht.humidity()}%")
wilg = dht.humidity() #% względnej
try:
bmp = BME280(i2c = bus)
except OSError:
print("Błąd pomiaru ciśnienia i temperatury!")
else:
#print(f"BMP:{bmp.temperature} {bmp.pressure}")
temp = bmp.temperature
cisn = bmp.pressure
print(f"wilgotność: {wilg}%")
print(f"temperatura: {temp}")
print(f"ciśnienie: {cisn}")
print("")
return (wilg, temp, cisn)
# main.py
html = """<!DOCTYPE html>
<html>
<head><title>Stacja Meteorologiczna</title></head>
<body>
<h1> Stacja Meteorologiczna </h1>
<p> Temperatura: {} </p>
<p> Cisnienie: {} </p>
<p> Wilgotnosc: {}% </p>
</body>
</html>
"""
NAZWA_SIECI = 'DLINK'
HASLO = '12345678'
import network
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(NAZWA_SIECI, HASLO)
print('Connected to: ', wifi.ifconfig()[0])
import socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
try:
s.bind(addr)
except OSError as err:
print("Błąd sieci. Wyłącz i spróbuj ponownie")
raise err
s.listen(1)
import weather
while True:
w, t, c = weather.measure()
content = html.format(t, c, w)
conn,addr = s.accept()
conn.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
conn.send(content)
conn.close()