2022-01-02 00:40:42 +02:00
|
|
|
from flask import Flask
|
2022-01-02 02:29:31 +02:00
|
|
|
import RPi.GPIO as gpio
|
|
|
|
from time import sleep
|
|
|
|
import subprocess
|
2022-01-02 03:27:13 +02:00
|
|
|
import picamera
|
|
|
|
import pyshine as ps # pip3 install pyshine==0.0.9
|
2022-01-02 00:40:42 +02:00
|
|
|
|
2022-01-02 03:27:13 +02:00
|
|
|
# Camera server
|
|
|
|
def camera():
|
|
|
|
HTML="""
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>PyShine Live Streaming</title>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<center><h1> PyShine Live Streaming using OpenCV </h1></center>
|
|
|
|
<center><img src="stream.mjpg" width='640' height='480' autoplay></center>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
"""
|
|
|
|
|
|
|
|
StreamProps = ps.StreamProps
|
|
|
|
StreamProps.set_Page(StreamProps,HTML)
|
|
|
|
address = ('0.0.0.0',9000) # Enter your IP address
|
|
|
|
StreamProps.set_Mode(StreamProps,'picamera')
|
|
|
|
with picamera.PiCamera(resolution='640x480', framerate=30) as camera:
|
|
|
|
output = ps.StreamOut()
|
|
|
|
StreamProps.set_Output(StreamProps,output)
|
|
|
|
camera.rotation = 90
|
|
|
|
camera.start_recording(output, format='mjpeg')
|
|
|
|
try:
|
|
|
|
server = ps.Streamer(address, StreamProps)
|
|
|
|
print('Camera serving started at','http://'+address[0]+':'+str(address[1]))
|
|
|
|
server.serve_forever()
|
|
|
|
finally:
|
|
|
|
camera.stop_recording()
|
|
|
|
|
2022-01-02 02:29:31 +02:00
|
|
|
# MQ-135 gas sensor
|
|
|
|
def stinker():
|
|
|
|
gpio.setmode(gpio.BCM)
|
|
|
|
gpio.setup(4, gpio.IN)
|
|
|
|
|
|
|
|
try:
|
|
|
|
if gpio.input(4):
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
return True
|
|
|
|
sleep(2)
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
print("\n")
|
|
|
|
|
|
|
|
finally:
|
|
|
|
print("clean")
|
|
|
|
gpio.cleanup()
|
|
|
|
|
|
|
|
# BME280 Humidity, Temperature, Pressure sensor
|
|
|
|
def HTP():
|
|
|
|
string = subprocess.check_output(["./HTP"]).decode(encoding='UTF-8',errors='strict')
|
|
|
|
string = string.split("temperature:")[1]
|
|
|
|
temperature = string.split(" pressure:")[0].replace("*C", "C")
|
|
|
|
string = string.split(" pressure:")[1]
|
|
|
|
pressure = string.split(" humidity:")[0]
|
|
|
|
humidity = string.split(" humidity:")[1].replace("\r\n", "")
|
|
|
|
result = {
|
|
|
|
"temperature":temperature,
|
|
|
|
"pressure":pressure,
|
|
|
|
"humidity":humidity}
|
|
|
|
# for i in string:
|
|
|
|
# if i.isdigit():
|
|
|
|
# result.append(i)
|
|
|
|
|
|
|
|
return result
|
|
|
|
# Flask server
|
2022-01-02 00:40:42 +02:00
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
|
|
@app.route("/")
|
|
|
|
def hello_world():
|
2022-01-02 02:29:31 +02:00
|
|
|
return f"<p>{HTP()}</p>"
|
2022-01-02 00:40:42 +02:00
|
|
|
|
|
|
|
if __name__=="__main__":
|
2022-01-02 02:29:31 +02:00
|
|
|
app.run(host='0.0.0.0')
|