Я работаю над погодным веб-приложением, которое будет использовать данные, собранные с датчика Raspberry Pi BME680, помещать их в базу данных и продвигать дальше к веб-панели.Вот вопросы, которые у меня есть: 1. Основываясь на приведенном ниже коде, разумнее ли одновременно передавать данные на приборную панель и в базу данных с датчика или получать данные в базу данных с датчика, а затем из базы данных далее ввеб-панель?2. Исходя из двух приведенных ниже кодов, возможно ли объединить их в одно приложение для колб?
До сих пор мне удалось создать код, который будет собирать данные с датчика и передавать их в базу данных.У меня также есть приложение фляги, которое будет извлекать данные из базы данных и выдвигать последнее значение на панель инструментов.Я пытаюсь объединить код сбора данных с приложением колбы и заставить его каждую секунду отправлять данные на веб-панель управления.
Вот код для сбора данных из датчика в базу данных
# Import Dependencies
import sqlite3
import time
import board
from busio import I2C
import adafruit_bme680
import datetime
# Create library object using our Bus I2C port
i2c = I2C(board.SCL, board.SDA)
bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug=False)
# change this to match the location's pressure (hPa) at sea level
bme680.sea_level_pressure = 1013.25
# Define database name to which data will be stored
dbname = 'Sensors.db'
# Using while loop capture the data in variables and store it in database
while True:
# Create the now variable to capture the current moment
now = datetime.datetime.now()
TEMPERATURE = round(bme680.temperature,1)
GAS = round(bme680.gas,1)
HUMIDITY = round(bme680.humidity,1)
PRESSURE = round(bme680.pressure,1)
ALTITUDE = round(bme680.altitude,1)
TIME_STAMP =(now)
conn = sqlite3.connect(dbname)
curs = conn.cursor()
curs.execute("INSERT INTO BME_DATA (TIME_STAMP, TEMPERATURE, GAS,
HUMIDITY, PRESSURE, ALTITUDE) values(?,?,?,?,?,?)",(TIME_STAMP,
TEMPERATURE, GAS, HUMIDITY, PRESSURE, ALTITUDE))
conn.commit()
# Test by printing data from table BME_DATA
#for row in curs.execute("SELECT * FROM BME_DATA"):
#print (row)
conn.close()
time.sleep(1)
А вот код для приложения фляги, которое будет принимать данные из базы данных:
from flask import Flask, render_template, request
app = Flask(__name__)
import sqlite3
# Retrieve data from database
def getData():
conn=sqlite3.connect('../Sensors.db')
curs=conn.cursor()
for row in curs.execute("SELECT * FROM BME_DATA ORDER BY TIME_STAMP
DESC LIMIT 1"):
Time = str(row[1])
Temperature = row[2]
Gas = row[3]
Humidity = row[4]
Pressure = row[5]
Altitude = row[6]
conn.close()
return Time, Temperature, Gas, Humidity, Pressure, Altitude
# main route
@app.route("/")
def index():
Time, Temperature, Gas, Humidity, Pressure, Altitude = getData()
templateData ={'Time': Time,
'Temperature': Temperature,
'Gas': Gas,
'Humidity': Humidity,
'Pressure': Pressure,
'Altitude': Altitude}
return render_template('index.html', **templateData)
if __name__ == "__main__":
app.run(debug=False)
Итак, чтобы запустить это, мне нужно запустить оба кода одновременно, и то, что я получаю на странице, является последним чтением.значений датчиков на данный момент страница открыта.Чтобы получить обновление, мне нужно нажать кнопку и вызвать запрос в колбе.Итак, как мне объединить эти два, чтобы создать одно колб-приложение, которое будет собирать данные, а также непрерывно отправлять данные на панель инструментов?
Я исследовал это, и я думаю, что для этого должна использоваться библиотека socketio.