This shows you the differences between two versions of the page.
priot:laboratoare:06 [2024/11/13 14:06] cristian.contasel [Scopul Laboratorului:] |
priot:laboratoare:06 [2024/11/19 02:49] (current) alexandru.bala [Exemplu de cod pentru Abonare pe Laptop utilizând paho-mqtt] |
||
---|---|---|---|
Line 10: | Line 10: | ||
- | ====Notiuni Teoretice==== | + | ===== Notiuni Teoretice===== |
- | 1. Ce este un API?? | + | === 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. | 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) | + | === 2. JSON (JavaScript Object Notation) === |
JSON este un format de schimb de date simplu și ușor de citit, folosit pentru transmiterea de date structurate. | JSON este un format de schimb de date simplu și ușor de citit, folosit pentru transmiterea de date structurate. | ||
- | Matplotlib | + | === 3. 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. | 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 | + | === 4. 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. | 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==== | + | ===== Configurarea Mediului de Lucru ===== |
- | Instalați librăriile necesare cu comanda: | + | Plecând de la configurarea pentru laboratorul precendent va fi necesară adăugarea unor noi librării: |
+ | * matplotlib | ||
+ | * paho-mqtt | ||
- | pip install requests matplotlib paho-mqtt | + | Ambele librării vor fi necesare pentru crearea subscriber-ului. Pentru simplitate recomandăm utilizarea Python pentru crearea acestuia. |
+ | Scopul subscriber-ului în cadrul acestui laborator va fi de a crea o agregare vizuală a datelor. | ||
+ | ==== Instalarea librăriilor Python==== | ||
+ | Instalați librăriile necesare cu ajutorul comenzii: | ||
+ | <code bash >pip install requests matplotlib paho-mqtt</code> | ||
- | ====Extragerea Datelor de la Open-Meteo API==== | + | |
+ | |||
+ | ===== Extragerea Datelor de la Open-Meteo API ===== | ||
Vom folosi API-ul gratuit de la Open-Meteo pentru a obține date despre prognoza meteo. | Vom folosi API-ul gratuit de la Open-Meteo pentru a obține date despre prognoza meteo. | ||
URL-ul API-ului: | URL-ul API-ului: | ||
Line 43: | Line 51: | ||
https://api.open-meteo.com/v1/forecast?latitude=44.4268&longitude=26.1025&hourly=temperature_2m | https://api.open-meteo.com/v1/forecast?latitude=44.4268&longitude=26.1025&hourly=temperature_2m | ||
- | <code lang meteo.py> | + | <code python meteo.py> |
import requests | import requests | ||
Line 61: | Line 69: | ||
</code> | </code> | ||
- | ====Vizualizarea Datelor==== | + | ===== Vizualizarea Datelor ===== |
Codul pentru Vizualizare - Tipuri Multiple de Grafice: | Codul pentru Vizualizare - Tipuri Multiple de Grafice: | ||
- | <code view_data.py> | + | <code python view_data.py> |
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
Line 79: | Line 87: | ||
</code> | </code> | ||
- | ====Trimiterea și Recepționarea Mesajelor „Hello World” folosind MQTT==== | + | ===== 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. | 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)=== | + | |
- | <code hello.py> | + | ==== Exemplu de cod pentru Publicare pe Raspberry Pi utilizând umqtt ==== |
+ | <code python hello.py> | ||
import network | import network | ||
import time | import time | ||
Line 91: | Line 100: | ||
password = 'Parola_Retelei' | password = 'Parola_Retelei' | ||
mqtt_server = 'IP-ul_Brokerului' | mqtt_server = 'IP-ul_Brokerului' | ||
- | topic = b"test/topic" | + | topic = "test/topic" |
client_id = "pico_publisher" | client_id = "pico_publisher" | ||
Line 113: | Line 122: | ||
</code> | </code> | ||
- | ===Cod pentru Abonare pe Laptop (paho-mqtt)=== | + | ==== Exemplu de cod pentru Abonare pe Laptop utilizând paho-mqtt ==== |
- | <code subscribe.py> | + | <code python subscribe.py> |
from paho.mqtt import client as mqtt_client | from paho.mqtt import client as mqtt_client | ||
Line 139: | Line 148: | ||
</code> | </code> | ||
- | ====Interacțiunea cu platforma Nordic Thingy:52==== | + | <note>In case you experience issues with Paho MQTT Client Callback Version, try the following approach: |
+ | <code> | ||
+ | client = mqtt_client.Client(client_id = client_id, callback_api_version = mqtt_client.CallbackAPIVersion.VERSION1) | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ===== Comunicații BLE - platforma Nordic Thingy:52 ====== | ||
Acest ghid vă oferă un punct de pornire pentru conectarea și utilizarea dispozitivului Nordic Thingy:52. | Acest ghid vă oferă un punct de pornire pentru conectarea și utilizarea dispozitivului Nordic Thingy:52. | ||
Line 149: | Line 164: | ||
Instrucțiunile de mai jos acoperă configurarea BLE și utilizarea uneltelor software de la Nordic. | Instrucțiunile de mai jos acoperă configurarea BLE și utilizarea uneltelor software de la Nordic. | ||
- | ===Cerințe:=== | + | == Echipamente necesare: == |
* Dispozitiv **Nordic Thingy:52** | * Dispozitiv **Nordic Thingy:52** | ||
* **Smartphone sau computer** cu suport Bluetooth | * **Smartphone sau computer** cu suport Bluetooth | ||
* **Aplicația nRF Connect** (disponibilă pentru iOS, Android, Windows, MacOS și Linux) | * **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) | + | * **SDK Nordic Thingy:52** (opțional, utilizat pentru programarea în mod custom a dispozitivului) - nu este în scopul laboratorului |
- | + | ||
- | ===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=== | + | == Etape: == |
+ | == 1. Porniți Thingy:52 == | ||
- | Descărcați și instalați aplicația nRF Connect pe smartphone ([[https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en|nRF-Connect-for-Android]] or [[https://apps.apple.com/us/app/nrf-connect-for-mobile/id1054362403|nRF-Connect-for-iPhone]]) sau computer ([[https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-Desktop|nRF-Connect-for-Desktop]]).\\ | + | <note tip>Apăsați butonul de pornire de pe Thingy:52.\\ |
- | Deschideți aplicația și asigurați-vă că Bluetooth-ul este activat.\\ | + | LED-ul ar trebui să înceapă să clipească, indicând că dispozitivul este gata de conectare prin BLE.</note> |
- | Î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=== | + | == 2. Conectarea la dispozitiv == |
+ | <note tip> | ||
+ | - Descărcați și instalați aplicația nRF Connect: | ||
+ | * pentru smartphone - [[https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en|nRF-Connect-for-Android]] or [[https://apps.apple.com/us/app/nrf-connect-for-mobile/id1054362403|nRF-Connect-for-iPhone]]) | ||
+ | * pentru computer ([[https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-Desktop|nRF-Connect-for-Desktop]]).\\ | ||
+ | - Deschideți aplicația și asigurați-vă că Bluetooth-ul este activat și aplicația are acordate permisiunile necesare utilizării Bluetooth.\\ | ||
+ | - În aplicația **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.\\ | ||
+ | </note> | ||
+ | == 3. 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. | + | Odată ce Thingy:52 este conectat, puteți începe să accesați senzorii și funcțiile sale prin aplicația nRF Connect sau dezvoltând o aplicație proprie capabilă să comunice prin BLE. |
* **Senzorii de Mediu**: | * **Senzorii de Mediu**: | ||
Line 186: | Line 205: | ||
- | ===Opriți Thingy:52=== | + | == 4. 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. | 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==== | + | ===== Exercitii ===== |
- | Exercitiile aceastea se ruleaza pe Raspberry Pi Pico, intr-un setup similar cu ce am avut si laboratoarele trecute | + | <note warning>**Nu incercati exercitiile pe Thingy:52**</note> |
- | <note important>Nu incercati exercitiile pe Thingy:52</note> | ||
- | ===Exercitiu 1:=== | + | <note>**Task 0:** Exercitiile de mai jos se bazează pe implementarea bazată pe Raspberry Pi Pico. Setup-ul este similar celui din laboratorul precedent. |
- | Configurați un topic nou, cum ar fi `senzori/temperatura`, și modificați codul pentru a trimite valori de temperatură. | + | * //Etapa 1// - porniți Mosquitto cu configurarea realizata anterior: |
- | ===Exercitiu 2:=== | + | <code bash>mosquitto -v -c "C:\Program Files\mosquitto\mosquitto.conf" </code> |
- | Testați trimiterea și recepția datelor prin MQTT. | + | * //Etapa 2// - rulați pe Raspberry Pi Pico codul **hello.py** |
- | ===Exercitiu 3:=== | + | * //Etapa 3// - rulați pe computer utilizând Python codul **subscribe.py** |
- | Vizualizați datele primite de la senzor într-un grafic folosind Matplotlib. | + | </note> |
+ | <note>**Task 1:** | ||
+ | Configurați un topic nou, cum ar fi `senzori/temperatura`, și modificați codul de Raspberry Pi Pico pentru a trimite valori preluate de la senzorul temperatură. | ||
+ | </note> | ||
+ | <note>**Task 2:** | ||
+ | Testați trimiterea și recepția datelor prin MQTT folosind utilitarul **mosquitto_sub** | ||
+ | </note> | ||
+ | <note>**Task 3:** | ||
+ | Modificați codul de subscriber prezentat în cadrul **subscribe.py** pentru a vizualiza datele primite de la Raspberry Pi Pico într-un grafic folosind librăria Matplotlib.</note> |