from dht import DHT22
from time import sleep
from machine import Pin
import ujson # Używamy ujson, aby zmniejszyć rozmiar JSON
import socket
# Inicjalizacja czujnika DHT22
dht = DHT22(Pin(21))
# Inicjalizacja czujnika PIR
pir = Pin(22, Pin.IN)
# Inicjalizacja diod LED do alarmu
led_temp = Pin(16, Pin.OUT)
led_movement = Pin(17, Pin.OUT)
# Funkcja do pobierania danych z czujnika i zwracania ich jako słownik
def get_sensor_data():
dht.measure()
temperatura = dht.temperature()
wilgotnosc = dht.humidity()
ruch_wykryty = pir.value() # 1 jeśli ruch jest wykryty, 0 w przeciwnym razie
# Sprawdzanie, czy temperatura przekroczyła limit lub czy wykryto ruch
if temperatura > 30:
led_temp.on() # Włączenie czerwonej diody LED
else:
led_temp.off() # Wyłączenie czerwonej diody LED
if ruch_wykryty:
led_movement.on() # Włączenie żółtej diody LED
else:
led_movement.off() # Wyłączenie żółtej diody LED
dane = {
"temperatura": temperatura,
"wilgotnosc": wilgotnosc,
"ruch_wykryty": ruch_wykryty
}
return dane
# Funkcja do inicjalizacji serwera HTTP
def start_server():
# Konfiguracja gniazda sieciowego
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print("Serwer uruchomiony na porcie 80")
while True:
# Akceptacja nowego połączenia
cl, addr = s.accept()
request = cl.recv(1024)
request = str(request)
# Tworzenie odpowiedzi JSON
dane_czujnika = get_sensor_data()
response = ujson.dumps(dane_czujnika)
# Przygotowanie nagłówków HTTP
cl.send("HTTP/1.1 200 OK\r\n")
cl.send("Content-Type: application/json\r\n")
cl.send("Connection: close\r\n\r\n")
cl.sendall(response)
# Zamknięcie połączenia z klientem
cl.close()
sleep(2)
# Funkcja do generowania interfejsu HTML dla danych czujników
def generate_html():
dane_czujnika = get_sensor_data()
html = f"""
<html>
<head>
<title>Dane Czujników</title>
<meta http-equiv="refresh" content="2"> <!-- Odświeżaj co 2 sekundy -->
</head>
<body>
<h1>Dane Czujników</h1>
<p>Temperatura: {dane_czujnika['temperatura']}°C</p>
<p>Wilgotność: {dane_czujnika['wilgotnosc']}%</p>
<p>Ruch wykryty: {'Tak' if dane_czujnika['ruch_wykryty'] else 'Nie'}</p>
</body>
</html>
"""
return html
# Funkcja do uruchomienia serwera WWW z interfejsem
def start_web_server():
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print("Serwer WWW uruchomiony na porcie 80")
while True:
cl, addr = s.accept()
request = cl.recv(1024)
request = str(request)
response = generate_html()
cl.send("HTTP/1.1 200 OK\r\n")
cl.send("Content-Type: text/html\r\n")
cl.send("Connection: close\r\n\r\n")
cl.sendall(response)
cl.close()
sleep(2)
# Uruchomienie serwera
start_web_server()