Differences

This shows you the differences between two versions of the page.

Link to this comparison view

priot:laboratoare:07 [2024/11/18 15:27]
vlad.radulescu2901
priot:laboratoare:07 [2024/11/18 15:32] (current)
vlad.radulescu2901
Line 1: Line 1:
-===== Laboratorul 07: Web Programming and APIs, Data Visualization,​ si Mesaje MQTT =====+===== Laboratorul 07: Trimiterea de Email-uri Direct de pe Raspberry Pi Pico =====
  
 ===== Scopul Laboratorului:​ ===== ===== Scopul Laboratorului:​ =====
Line 17: Line 17:
     * Gmail oferă un server SMTP gratuit: smtp.gmail.com,​ pe portul 465 (SSL).     * Gmail oferă un server SMTP gratuit: smtp.gmail.com,​ pe portul 465 (SSL).
  
-=== 2. JSON (JavaScript Object Notation) ​=== +==== Configurarea Mediului de Lucru ==== 
-JSON este un format de schimb ​de date simplu șușor de citit, folosit pentru transmiterea de date structurate.+=== Cum să generezi o parolă ​de aplicație Gmail === 
 +    * Accesațcontul Google: https://​myaccount.google.com. 
 +    * Navigați la „Securitate”. 
 +    * Activează autentificarea în doi pași. 
 +    * Generează o parolă ​de aplicație: Selectați aplicația „Mail” și dispozitivul „Alt dispozitiv” (ex. „Raspberry Pi Pico”). 
 +    * Utilizați această parolă în scriptul MicroPython în locul parolei contului principal.
  
- +=== Trimiterea ​de Email-uri ===  
-=== 3. Matplotlib === +Cod complet ​pentru ​trimiterea unui email
-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. +<​code ​send_mail.py>
- +
- +
-=== 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. +
- +
- +
- +
-===== Configurarea Mediului de Lucru ===== +
- +
-Plecând de la configurarea pentru laboratorul precendent va fi necesară adăugarea unor noi librării:​ +
-  * 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 ===== +
-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 +
- +
-<code python 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) +
- +
-</​code>​ +
- +
-===== Vizualizarea Datelor ===== +
- +
-Codul pentru ​Vizualizare - Tipuri Multiple de Grafice: +
- +
-<code python view_data.py>​ +
-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() +
- +
-</​code>​ +
- +
-===== 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. +
- +
-==== Exemplu de cod pentru Publicare pe Raspberry Pi utilizând umqtt ==== +
-<​code ​python hello.py>+
 import network import network
 +import usocket as socket
 +import ssl
 +import ubinascii
 import time import time
-from umqtt.simple import MQTTClient 
  
-ssid = '​Numele_Retelei'​ +SSID = '​Numele_Retelei'​ 
-password ​= '​Parola_Retelei'​ +PASSWORD ​= '​Parola_Retelei'​ 
-mqtt_server ​'​IP-ul_Brokerului'​ +SMTP_SERVER ​"​smtp.gmail.com"​ 
-topic = "test/topic+SMTP_PORT = 465 
-client_id ​= "pico_publisher"+EMAIL_ADDRESS = "​email_tau@gmail.com"​ 
 +EMAIL_PASSWORD ​= "parola_ta_aplicatie
 +RECIPIENT ​= "destinatar@gmail.com"
  
-wlan network.WLAN(network.STA_IF) +MESSAGE ​"""​From:​ %s 
-wlan.active(True) +To%s 
-wlan.connect(ssid,​ password) +Subject: Hello from Raspberry Pi Pico
-while not wlan.isconnected()+
-    ​time.sleep(1)+
  
-client = MQTTClient(client_id,​ mqtt_server) +Hello World! 
-client.connect() +""​" % (EMAIL_ADDRESS,​ RECIPIENT)
-try: +
-    while True: +
-        message = b"Hello World" +
-        ​client.publish(topic,​ message) +
-        print(f"Mesaj trimis: {message.decode()}"+
-        time.sleep(10) +
-finally: +
-    client.disconnect()+
  
-</​code>​+def connect_wifi():​ 
 +    wlan = network.WLAN(network.STA_IF) 
 +    wlan.active(True) 
 +    wlan.connect(SSID,​ PASSWORD) 
 +    while not wlan.isconnected():​ 
 +        print("​Conectare la Wi-Fi..."​) 
 +        time.sleep(1) 
 +    print("​Conectat la Wi-Fi:",​ wlan.ifconfig())
  
-==== Exemplu de cod pentru Abonare pe Laptop utilizând paho-mqtt ===+def send_email():​ 
-<code python subscribe.py> +    addr socket.getaddrinfo(SMTP_SERVER,​ SMTP_PORT)[0][-1] 
-from paho.mqtt import client as mqtt_client+    sock socket.socket() 
 +    sock.connect(addr) 
 +    sock = ssl.wrap_socket(sock) 
 +    print("​Conexiune la serverul SMTP realizată"​)
  
-broker ​'​localhost'​ +    def send_command(command,​ expect_response=True): 
-port = 1883 +        ​print(f">>>​ {command.strip()}"​) 
-topic = "test/topic+        ​sock.write(command.encode('​utf-8'​) + b"\r\n") 
-client_id ​= "python_subscriber"+        if expect_response:​ 
 +            response ​sock.readline().decode('​utf-8'​).strip() 
 +            print(f"<<<​ {response}"
 +            return response
  
-def connect_mqtt()+    try
-    def on_connect(client, userdata, flags, rc): +        ​send_command("HELO RaspberryPi"​
-        ​if rc == 0: +        ​send_command("​AUTH LOGIN"​) 
-            ​client.subscribe(topic+        ​send_command(ubinascii.b2a_base64(EMAIL_ADDRESS.encode('​utf-8'​)).decode('​utf-8'​).strip()
-    ​client = mqtt_client.Client(client_id+        ​send_command(ubinascii.b2a_base64(EMAIL_PASSWORD.encode('​utf-8'​)).decode('​utf-8'​).strip()
-    ​client.on_connect ​on_connect +        ​send_command(f"​MAIL FROM:<​{EMAIL_ADDRESS}>"​) 
-    ​client.connect(broker, port+        send_command(f"​RCPT TO:<​{RECIPIENT}>"​) 
-    ​return client+        send_command("​DATA"​) 
 +        send_command(MESSAGE + "\r\n.") 
 +        send_command("​QUIT",​ expect_response=False) 
 +        print("​Email trimis cu succes!"​) 
 +    ​except Exception as e: 
 +        print(f"​Eroare la trimiterea email-ului: {e}"
 +    ​finally: 
 +        sock.close()
  
-def on_message(client, userdata, msg): +connect_wifi() 
-    print(f"​Mesaj primit pe topicul '​{msg.topic}':​ {msg.payload.decode()}"​)+send_email()
  
-client = connect_mqtt() 
-client.on_message = on_message 
-client.loop_forever() 
 </​code>​ </​code>​
  
-<​note>​In case you experience issues with Paho MQTT Client Callback Version, try the following approach: +==== Exercitii ​==== 
-<​code>​ +TaskCreați un sistem care
-client ​mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1) +    * Măsoară temperaturepresiunea atmosferică si luminozitatea folosind ​senzori ​conectați la Raspberry Pi Pico
-</​code>​ +    Trimite un email de notificare dacă: 
-</​note>​ +        Temperatura depășește 30°C
- +        Presiunea ​atmosferică ​depășește 1 atmosferă. 
-===== Comunicații BLE - platforma Nordic Thingy:52 ======  +        Daca luminozitatea atinge pragul maxim.
- +
-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 șaccesarea senzorilor și funcțiilor sale.  +
- +
-{{ :priot:​laboratoare:​thingy_board_product.png?​nolink&​500 |Nordic Thingy:52 board}} +
- +
-Thingy:52 este o platformă de prototipare IoTechipată cu senzori, actuatori și conectivitate Bluetooth Low Energy (BLE).  +
-Instrucțiunile de mai jos acoperă configurarea BLE șutilizarea uneltelor software de la Nordic+
- +
-== Echipamente necesare: == +
- +
-  ​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, utilizat pentru programarea în mod custom a dispozitivului) - nu este în scopul laboratorului +
- +
-== Etape: == +
-== 1. Porniți Thingy:52 == +
- +
-<note tip>​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.</​note>​ +
- +
-== 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 dezvoltând o aplicație proprie capabilă să comunice 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ă**+
- +
-<note important>​Funcționalitatea lui Thingy poate fi configurată wireless printr-un API Bluetooth.  +
-Acest lucru face posibilă crearea de **demonstrații și prototipuri fără a programa efectiv Nordic Thingy:52** în sine, ci doar prin dezvoltarea aplicației sau soluției cloudPe măsură ce sunt lansate noi versiuni ale firmware-ului,​ Thingy poate fi actualizat wireless folosind aplicațiile furnizate. Utilizatorii avansați pot folosi Thingy ca kit de dezvoltare prin construirea propriului firmware și încărcarea acestuia pe placa de bază.</​note>​ +
- +
- +
-== 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. +
- +
- +
-===== Exercitii ===== +
-<note warning>​**Nu incercati exercitiile pe Thingy:​52**</​note>​+
  
  
-<​note>​**Task 0:** Exercitiile de mai jos se bazează pe implementarea bazată pe Raspberry Pi Pico. Setup-ul este similar celui din laboratorul precedent. 
-  * //Etapa 1// - porniți Mosquitto cu configurarea realizata anterior: 
-   <​code bash>​mosquitto -v -c "​C:​\Program Files\mosquitto\mosquitto.conf"​ </​code>​ 
-  * //Etapa 2// - rulați pe Raspberry Pi Pico codul **hello.py** 
-  * //Etapa 3// - rulați pe computer utilizând Python codul **subscribe.py** 
-</​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>​ 
priot/laboratoare/07.1731936478.txt.gz · Last modified: 2024/11/18 15:27 by vlad.radulescu2901
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