====== 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']