1
0
Files
school-DHT11-sensor/dht11.py

102 lines
3.5 KiB
Python

import time
import adafruit_dht
import board
import RPi.GPIO as GPIO
import http.server
import threading
import json
sensor = adafruit_dht.DHT11(board.D6)
LED_PIN = 21
FAN_PIN = 22
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(FAN_PIN, GPIO.OUT)
sensor_data = {
'tempc': 0.0,
'tempf': 0.0,
'humidity': 0.0,
'led': False,
'fan': False
}
def check_data():
while True:
try:
temperatuur_C = sensor.temperature
temperatuur_F = temperatuur_C * (9/5) + 32
humidity = sensor.humidity
sensor_data['tempc'] = temperatuur_C
sensor_data['tempf'] = temperatuur_F
sensor_data['humidity'] = humidity
except RuntimeError as err:
print(err.args[0])
if temperatuur_C > 20:
GPIO.output(LED_PIN, GPIO.HIGH)
GPIO.output(FAN_PIN, GPIO.HIGH)
sensor_data['led'] = True
sensor_data['fan'] = True
else:
GPIO.output(LED_PIN, GPIO.LOW)
GPIO.output(FAN_PIN, GPIO.LOW)
sensor_data['led'] = False
sensor_data['fan'] = False
class handler_class(http.server.BaseHTTPRequestHandler):
def do_GET (self):
if self.path == '/':
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
website = """
<!DOCTYPE html>
<html>
<head>
<title>IOT DHT11 sensor status</title>
<meta charset="UTF-8">
</head>
<body>
<h1>IOT DHT11 Sensor Status</h1>
<p>Temp_C = <span id="tempc">--</span>C</p>
<p>Temp_F = <span id="tempf">--</span>F</p>
<p>humidity = <span id="humid">--</span>%</p>
<p>LED = <span id="led">UIT</span></p>
<p>FAN = <span id="fan">UIT</span></p>
<script>
setInterval(() => {
fetch('/data')
.then(res => res.json())
.then(data => {
document.getElementById('tempc').textContent = data.tempc.toFixed(1);
document.getElementById('tempf').textContent = data.tempf.toFixed(1);
document.getElementById('humid').textContent = data.humidity.toFixed(1);
document.getElementById('led').textContent = data.led ? 'AAN' : 'UIT';
document.getElementById('fan').textContent = data.fan ? 'AAN' : 'UIT';
});
}, 1000);
</script>
</body>
</html>
"""
self.wfile.write(website.encode())
elif self.path == '/data':
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(sensor_data).encode())
def web_server():
web_binding = ('', 8000)
server = http.server.HTTPServer(web_binding, handler_class)
print ("server draait op port 8000")
server.serve_forever()
if __name__ == '__main__':
threading.Thread(target=web_server, daemon=True).start()
threading.Thread(target=check_data, daemon=True).start()
while True:
time.sleep(1)