Laboratorul 05: Transmiterea Datelor Senzoriale prin MQTT pe Raspberry Pi Pico

Obiective:

Acest laborator introduce utilizarea protocolului MQTT pentru a transmite date de la un Raspberry Pi Pico catre un broker MQTT configurat pe un laptop. Veti invata cum sa configurati un broker MQTT pe Windows, sa trimiteti un mesaj simplu folosind MQTT si veti finaliza laboratorul cu doua taskuri:

  • Transmiterea de date senzoriale (temperatura si lumina) de pe Pico catre brokerul MQTT.
  • Capturarea pachetelor MQTT cu Wireshark pentru a vizualiza comunicatia MQTT intre Pico si broker.

Partea I: Introducere teoretica

1. Ce este MQTT?

MQTT (Message Queuing Telemetry Transport) este un protocol de comunicatie simplu si eficient, folosit in principal in aplicatiile Internet of Things (IoT) pentru a transmite mesaje intre dispozitive si servere. Protocolul MQTT este bazat pe un model publish-subscribe (publicare-abonare), unde un broker (server) gestioneaza mesajele intre clientul care publica si clientul care se aboneaza la un anumit canal de comunicatie, numit topic.

Componentele principale ale MQTT:

  • Broker MQTT: Serverul care primeste si transmite mesaje intre clienti. In acest caz, laptopul cu Mosquitto va actiona ca server.
  • Client MQTT: Un dispozitiv care poate fie sa publice, fie sa se aboneze la mesaje pe un anumit topic. Raspberry Pi Pico va fi clientul care publica mesajele cu datele senzorilor.
  • Topic: Canalul de comunicatie, identificat printr-un string (de exemplu, senzori/temperatura). Clientii abonati la un topic vor primi mesajele publicate pe acel topic

Fluxul de Conexiune MQTT:

  • Clientul (Raspberry Pi Pico) se conecteaza la broker.
  • Pico publica mesaje (date de la senzori) catre un topic specific.
  • Brokerul MQTT primeste mesajul si il transmite tuturor abonatilor acelui topic.

Partea II: Configurarea Brokerului Mosquitto pe Windows

Instalarea si configurarea VS Code cu extensia MicroPico

Pas 1: Instalare Mosquitto

  • Descarca Mosquitto de pe pagina oficiala Mosquitto: https://mosquitto.org/download/.
  • Instaleaza Mosquitto pe laptopul cu Windows, bifand optiunea de a adauga Mosquitto la PATH pentru a putea folosi comenzile mosquitto din Command Prompt.

Pas 2: Configurare Mosquitto pentru a permite conexiuni externe

  • Deschide fisierul de configurare mosquitto.conf, care se gaseste de obicei in C:\Program Files\mosquitto.
  • Daca fisierul nu exista, creeaza un fisier text nou in acest folder si redenumeste-l mosquitto.conf.
  • Adauga urmatoarele linii in fisier pentru a permite conexiunile de la alte dispozitive din retea:
    • listener 1883 - permite conexiuni pe portul standard MQTT fara SSL.
    • allow_anonymous true - permite tuturor clientilor sa se conecteze fara autentificare.
  • Salveaza fisierul mosquitto.conf.

Pas 3: Porneste Mosquitto

  • Deschide un Command Prompt.
  • Ruleaza comanda pentru a porni Mosquitto cu configurarea realizata: mosquitto -v -c “C:\Program Files\mosquitto\mosquitto.conf”
  • Optiunea -v activeaza modul detaliat (verbose), astfel incat sa vezi detalii despre conexiunile si mesajele primite.

Partea III: Configurarea Codului pe Raspberry Pi Pico pentru a Trimite un Mesaj Simplu

In acest exemplu, vei scrie un program pe Raspberry Pi Pico care se conecteaza la Wi-Fi si trimite un mesaj simplu („Hello World”) catre brokerul MQTT.

a) Instalarea MicroPython pe Raspberry Pi Pico

b) Pregatirea bibliotecii umqtt.simple pe Pico

  • Descarca fisierul simple.py din repository-ul micropython-lib.
  • Salveaza acest fisier in structura umqtt/simple.py pe Pico (folosind VS Code sau Thonny).

c) Codul de conectare la broker si publicare a unui mesaj

Codul de mai jos configureaza conexiunea si trimite un mesaj de test pe topicul test/topic.

send_msg.py
import network
import time
import umqtt.simple as mqtt
 
# Seteaza detaliile retelei Wi-Fi
ssid = 'numele_wifi'
password = 'parola_wifi'
 
# Conectare la Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
 
while not wlan.isconnected():
    print("Conectare la retea...")
    time.sleep(1)
 
print("Conectat la retea:", wlan.ifconfig())
 
# Configurare client MQTT
mqtt_server = 'IP-ul_laptopului'  # Inlocuieste cu IP-ul laptopului
client_id = 'pico_test'
topic = 'test/topic'
 
# Initializeaza clientul MQTT si se conecteaza la broker
client = mqtt.MQTTClient(client_id, mqtt_server, port=1883)
 
try:
    client.connect()
    print("Conectat la broker MQTT")
 
    # Trimite un mesaj simplu
    message = "Hello World"
    client.publish(topic, message)
    print(f"Mesaj trimis: {message}")
 
    # Deconecteaza-te
    client.disconnect()
 
except Exception as e:
    print("Eroare de conectare:", e)

c) Explicatii despre Cod

  • Codul initializeaza si conecteaza Pico la retea, configureaza clientul MQTT, si trimite mesajul „Hello World” pe topicul test/topic.
  • Topicul test/topic poate fi modificat daca doresti sa utilizezi un alt nume descriptiv.
  • client_id trebuie sa fie unic pentru fiecare dispozitiv client in retea.

Partea IV: Testarea Mesajului de Test pe Laptop

Pasi:

  • Deschide un nou terminal pe laptop.
  • Ruleaza comanda de mai jos pentru a asculta mesajele pe topicul test/topic: mosquitto_sub -h localhost -t 'test/topic'
  • Daca setup-ul este corect, ar trebui sa vezi mesajul „Hello World” afisat in terminal atunci cand codul de pe Pico ruleaza corect.

Exercitii

Exercitiu 1: Transmiterea de Date de la Senzori

Configurati Raspberry Pi Pico sa citeasca date de la un senzor de temperatura si unul de lumina si sa publice aceste date pe doua topicuri MQTT separate.

Exercitiu 2: Analiza Pachetelor MQTT cu Wireshark

Utilizati Wireshark pentru a monitoriza traficul MQTT intre Raspberry Pi Pico si brokerul Mosquitto de pe laptop, pentru a vizualiza structura si tipul pachetelor MQTT transmise. Identificati unde in interiorul pachetului sunt transmise datele revelante.

Interpretarea Pachetelor MQTT in Wireshark:

- CONNECT: Pachetul de conectare de la Pico catre broker.

- PUBLISH: Pachetul care contine mesajul publicat pe un topic specific.

- DISCONNECT: Pachetul de deconectare, trimis cand conexiunea este inchisa.

priot/laboratoare/05.txt · Last modified: 2024/11/12 14:29 by alexandru.bala
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