====== 6. Synchronní komunikace ======
===== Cíle cvičení =====
* propojení aplikace v prostředí Flask se zařízením připojeným po rozhraní UART
* plánování synchronních úloh v prostředí Flask
* serializace dat a ukládání dat do databáze
* vykreslování dat ve webové aplikaci
==== Plánování úloh ====
Pro pravidelné opakované spouštění úloh lze v prostředí Flask využít např. [[https://pypi.org/project/APScheduler/|APScheduler]].
pip install Flask-APScheduler
Příklady: [[https://viniciuschiele.github.io/flask-apscheduler/rst/examples.html]]
Pro běh na pozadí lze dále využít třídu [[https://apscheduler.readthedocs.io/en/latest/modules/schedulers/background.html|BackgroundScheduler()]]
import time
import atexit
from flask import Flask, request, render_template
app = Flask(__name__)
from apscheduler.schedulers.background import BackgroundScheduler
def print_date_time():
print(time.strftime("%A, %d. %B %Y %I:%M:%S %p"))
scheduler = BackgroundScheduler()
scheduler.add_job(func=print_date_time, trigger="interval", seconds=60)
scheduler.start()
# Shut down the scheduler when exiting the app
atexit.register(lambda: scheduler.shutdown())
if __name__ == '__main__':
app.run(debug=True, use_reloader=False)
==== Serializace dat ====
Na straně příjemce (PC) bude pravděpodobně třeba instalovat modul ''ujson''
pip install ujson
Na straně RPi Pico není třeba instalovat nic, modul ''ujson'' je součástí jádra MicroPythonu.
Seznam všech dostupných modulů na Pico lze získat
help('modules')
Na straně RPi Pico se pak může kód rozšířit např. takhle:
data = {'led': led.value()}
print(ujson.dumps(data), end='\n')
Na kód dekodéru na straně serveru může vypadat následově:
ret = ser.readline().decode()
led = ujson.loads(ret)['led']