Curs 6 - MQTT în Sisteme Embedded: Rețele de Senzori și Aplicații

Acest curs explorează protocolul MQTT și utilizarea acestuia în sistemele embedded pentru rețele de senzori și aplicații IoT.

1. Ce este MQTT?

MQTT (Message Queuing Telemetry Transport) este un protocol de comunicație ușor, bazat pe modelul publish-subscribe. Este utilizat pe scară largă în IoT și sisteme embedded datorită consumului redus de resurse și fiabilității ridicate.

2. Cum Funcționează MQTT?

MQTT folosește un broker pentru a facilita schimbul de mesaje între dispozitive. Dispozitivele pot fi publisher (emit mesaje) sau subscriber (primesc mesaje).

3. Instalarea unui Broker MQTT (Mosquitto)

Mosquitto este un broker MQTT open-source popular. Instalarea pe Linux se face astfel:

sudo apt update && sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto

Testarea conexiunii la broker:

mosquitto_sub -h localhost -t 'senzori/temp'
mosquitto_pub -h localhost -t 'senzori/temp' -m '22.5'

4. Utilizarea MQTT pe ESP32

ESP32 este un microcontroler Wi-Fi/Bluetooth utilizat frecvent pentru aplicații IoT cu MQTT. Codul de mai jos ilustrează conectarea la un broker MQTT:

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "WiFiSSID";
const char* password = "WiFiPassword";
const char* mqttServer = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }
    client.setServer(mqttServer, 1883);
    client.connect("ESP32Client");
    client.publish("senzori/temp", "25.3");
}

void loop() {
    client.loop();
}

5. Utilizarea MQTT pe STM32

STM32 poate comunica prin MQTT folosind un modul ESP8266/ESP32 ca gateway Wi-Fi sau printr-o conexiune Ethernet. Biblioteca Paho MQTT este utilizată pentru implementare.

#include <MQTTClient.h>

MQTTClient client;
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
    // Procesare mesaj primit
}

void setup() {
    MQTTBegin(&client, "broker.hivemq.com", 1883, mqtt_callback);
    MQTTConnect(&client, "STM32Client");
    MQTTPublish(&client, "senzori/umiditate", "60.2");
}

void loop() {
    MQTTLoop(&client);
}

6. Utilizarea MQTT pe Raspberry Pi

Raspberry Pi poate funcționa ca un nod MQTT utilizând Python și biblioteca `paho-mqtt`.

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
    print(f"Received: {msg.topic} -> {msg.payload.decode()}")

client = mqtt.Client()
client.connect("broker.hivemq.com", 1883, 60)
client.subscribe("senzori/temp")
client.on_message = on_message
client.loop_forever()

7. Securizarea MQTT

Pentru a securiza comunicația MQTT, se pot utiliza autentificare și criptare TLS.

mosquitto_passwd -c /etc/mosquitto/passwd user

Configurarea `mosquitto.conf` pentru autentificare:

allow_anonymous false
password_file /etc/mosquitto/passwd

8. Exercițiu Practic - Implementare a unei Rețele de Senzori

Creează o rețea MQTT în care un ESP32 transmite temperatura la un broker Mosquitto instalat pe Raspberry Pi, iar un alt dispozitiv primește datele și le afișează.

Resurse suplimentare: