Drone-Code/main.py

79 lines
2.4 KiB
Python

# These two modules allow us to run a web server.
from contextlib import nullcontext
from flask import Flask, render_template
from flask_socketio import SocketIO
from tfluna import TFLuna
from bmp180 import BMP180
from mpu6050 import mpu6050
import random
# Here, we create the neccesary base app. You don't need to worry about this.
app = Flask(__name__)
socketio = SocketIO(app)
# Sensor initialization
bmp = BMP180()
mpu = mpu6050(0x68)
tfluna = TFLuna()
tfluna.open()
tfluna.set_samp_rate(10)
# tfl Class to format the getters like the other sensors.
class tfl:
@staticmethod
def get_distance():
return tfluna.read()[0]
@staticmethod
def get_strength():
return tfluna.read()[1]
@staticmethod
def get_temperature():
return tfluna.read()[2]
# All the sensor data getters, for reference
# bmp.get_temperature()
# bmp.get_pressure()
# bmp.get_altitude()
# mpu.get_accel_data()
# mpu.get_gyro_data()
# tfl.get_distance()
# tfl.get_strength()
# tfl.get_temperature()
# When someone requests the root page from our web server, we return 'index.html'.
@app.route('/')
def index():
return render_template('index.html')
# This function runs in the background to transmit data to connected clients.
def background_thread():
while True:
socketio.sleep(0.5)
socketio.emit(
'update_data',
{
'randomNumber': random.randint(1, 100), # Keeping this here to make sure the page is being updated
'bmpTemp': bmp.get_temperature(),
'bmpPressure': bmp.get_pressure(),
'bmpAltitude': bmp.get_altitude(),
'mpuAccel': mpu.get_accel_data(),
'mpuGyro': mpu.get_gyro_data(),
'tflDistance': tfl.get_distance(),
'tflStrength': tfl.get_strength(),
'tflTemp': tfl.get_temperature(),
}
)
# This function runs when someone connects to the server - and all we do is start the background thread to update the data.
@socketio.on('connect')
def handle_connect():
print('Client connected')
socketio.start_background_task(target=background_thread)
# This function is called
def main():
# These specific arguments are required to make sure the webserver is hosted in a consistent spot, so don't change them unless you know what you're doing.
socketio.run(app, host='0.0.0.0', port=8080, allow_unsafe_werkzeug=True)
if __name__ == '__main__':
main()