This is an old revision of the document!


Laboratorul 06: Web Programming and APIs, Data Visualization, si Mesaje MQTT

Scopul Laboratorului:

În acest laborator, studenții vor învăța:

  • Cum să obțină date dintr-un API gratuit fără cheie.
  • Cum să parseze datele JSON primite de la API.
  • Cum să creeze mai multe tipuri de grafice pentru a vizualiza datele, folosind libraria Matplotlib.
  • Cum să trimită și să primească mesaje folosind MQTT pentru comunicația IoT.

Notiuni Teoretice

1. Ce este un API??

Un API (Application Programming Interface) este un set de reguli și protocoale care permite unei aplicații să acceseze date sau funcționalități dintr-o altă aplicație.

JSON (JavaScript Object Notation) JSON este un format de schimb de date simplu și ușor de citit, folosit pentru transmiterea de date structurate.

Matplotlib Matplotlib este o librărie de vizualizare pentru Python, utilizată pentru a crea o varietate de grafice, inclusiv grafice liniare, diagrame de bare și grafice de tip pie.

MQTT MQTT (Message Queuing Telemetry Transport) este un protocol de mesagerie ușor pentru IoT, utilizat pentru a comunica între dispozitive prin topicuri la care se abonează și publică date.

Configurarea Mediului de Lucru

Instalați librăriile necesare cu comanda:

pip install requests matplotlib paho-mqtt

Extragerea Datelor de la Open-Meteo API

Vom folosi API-ul gratuit de la Open-Meteo pentru a obține date despre prognoza meteo. URL-ul API-ului:

https://api.open-meteo.com/v1/forecast?latitude=44.4268&longitude=26.1025&hourly=temperature_2m

meteo.py
import requests
 
url = "https://api.open-meteo.com/v1/forecast?latitude=44.4268&longitude=26.1025&hourly=temperature_2m"
 
response = requests.get(url)
 
if response.status_code == 200:
    data = response.json()
    temperatures = data['hourly']['temperature_2m']
    times = data['hourly']['time']
    for time, temp in zip(times[:10], temperatures[:10]):
        print(f"{time}: {temp}°C")
else:
    print("Eroare la obținerea datelor. Cod status:", response.status_code)

Vizualizarea Datelor

Codul pentru Vizualizare - Tipuri Multiple de Grafice:

import matplotlib.pyplot as plt
 
plt.figure(figsize=(10, 5))
plt.plot(times[:10], temperatures[:10], marker='o', label="Temperatura (°C)")
plt.xticks(rotation=45)
plt.title("Evolutia Temperaturii in Bucuresti")
plt.xlabel("Ora")
plt.ylabel("Temperatura (°C)")
plt.legend()
plt.show()

Trimiterea și Recepționarea Mesajelor „Hello World” folosind MQTT

Pentru a trimite și primi mesaje „Hello World” folosind MQTT, vom folosi `umqtt` pentru publicare pe Raspberry Pi și `paho-mqtt` pentru abonare pe laptop.

Cod pentru Publicare pe Raspberry Pi (umqtt)

import network
import time
from umqtt.simple import MQTTClient
 
ssid = 'Numele_Retelei'
password = 'Parola_Retelei'
mqtt_server = 'IP-ul_Brokerului'
topic = b"test/topic"
client_id = "pico_publisher"
 
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
    time.sleep(1)
 
client = MQTTClient(client_id, mqtt_server)
client.connect()
try:
    while True:
        message = b"Hello World"
        client.publish(topic, message)
        print(f"Mesaj trimis: {message.decode()}")
        time.sleep(10)
finally:
    client.disconnect()

Cod pentru Abonare pe Laptop (paho-mqtt)

from paho.mqtt import client as mqtt_client
 
broker = 'localhost'
port = 1883
topic = "test/topic"
client_id = "python_subscriber"
 
def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            client.subscribe(topic)
    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client
 
def on_message(client, userdata, msg):
    print(f"Mesaj primit pe topicul '{msg.topic}': {msg.payload.decode()}")
 
client = connect_mqtt()
client.on_message = on_message
client.loop_forever()

Interacțiunea cu platforma Nordic Thingy:52

Acest ghid vă oferă un punct de pornire pentru conectarea și utilizarea dispozitivului Nordic Thingy:52. Pentru a interacționa cu Nordic Thingy:52, în următoarele rânduri vă prezentam pașii de configurare, conectarea la dispozitiv și accesarea senzorilor și funcțiilor sale.

Nordic Thingy:52 board

Thingy:52 este o platformă de prototipare IoT, echipată cu senzori, actuatori și conectivitate Bluetooth Low Energy (BLE). Instrucțiunile de mai jos acoperă configurarea BLE și utilizarea uneltelor software de la Nordic.

Cerințe:

  • Dispozitiv Nordic Thingy:52
  • Smartphone sau computer cu suport Bluetooth
  • Aplicația nRF Connect (disponibilă pentru iOS, Android, Windows, MacOS și Linux)
  • SDK Nordic Thingy:52 (opțional, când intenționați să programați dispozitivul)

Porniți Thingy:52

Apăsați butonul de pornire de pe Thingy:52.
LED-ul ar trebui să înceapă să clipească, indicând că dispozitivul este gata de conectare prin BLE.

Conectare prin Aplicația nRF Connect

Descărcați și instalați aplicația nRF Connect pe smartphone (nRF-Connect-for-Android or nRF-Connect-for-iPhone) sau computer (nRF-Connect-for-Desktop).
Deschideți aplicația și asigurați-vă că Bluetooth-ul este activat.
În nRF Connect, scanați dispozitivele disponibile.
Thingy:52 ar trebui să apară în listă cu un nume asemănător cu Thingy.
Selectați Thingy:52 pentru a vă conecta. După conectare, veți putea vedea serviciile și caracteristicile acestuia.

Accesarea Senzorilor și Funcțiilor

Odată ce Thingy:52 este conectat, puteți începe să accesați senzorii și funcțiile sale prin aplicația nRF Connect sau programatic prin BLE.

  • Senzorii de Mediu:
    • Accesați date despre temperatură, umiditate, presiune atmosferică și calitatea aerului în cadrul Serviciului de Mediu din aplicație.
  • Senzorii de Mișcare:
    • Thingy:52 include un senzor de mișcare pe 9 axe. Verificați Serviciul de Mișcare pentru a monitoriza datele de la accelerometru, giroscop și compas.
  • Controlul Sunetului și Difuzorului:
    • Puteți reda sunet sau monitoriza datele audio de pe Thingy:52 accesând Serviciul de Sunet.
  • Senzorul de Lumină și Culoare:
    • Senzorul de lumină măsoară intensitatea luminii ambientale și culorile, iar aceste date sunt accesibile prin Serviciul de Lumină.

Acces Programatic

Dacă doriți să personalizați interacțiunea programatic, Nordic Thingy:52 poate fi controlat prin SDK-urile Nordic sau prin API-urile BLE nRF52.

  1. Descărcați SDK-ul Nordic Thingy:52 de pe site-ul Nordic.
  2. Configurați mediul de dezvoltare utilizând IDE-ul recomandat de Nordic, nRF-Connect-for-VS-Code.
  3. Personalizați firmware-ul sau creați aplicații proprii modificând codul din SDK-ul Thingy:52 și încărcându-l pe dispozitiv cu ajutorul unui programator SWD.

Din păcate, momentan nu avem un programator SWD, însă este util să identificați funcționalitățile și complexitatea unui proiect similar cu tema voastră.

Opriți Thingy:52

Pentru a opri Thingy:52, apăsați și țineți apăsat butonul de pornire până când LED-ul se stinge.

Exercitii

Exercitiile aceastea se ruleaza pe Raspberry Pi Pico, intr-un setup similar cu ce am avut si laboratoarele trecute

Nu incercati exercitiile pe Thingy:52

Exercitiu 1:

Configurați un topic nou, cum ar fi `senzori/temperatura`, și modificați codul pentru a trimite valori de temperatură.

Exercitiu 2:

Testați trimiterea și recepția datelor prin MQTT.

Exercitiu 3:

Vizualizați datele primite de la senzor într-un grafic folosind Matplotlib.

priot/laboratoare/06.1731487994.txt.gz · Last modified: 2024/11/13 10:53 by jan.vaduva
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0