MQTT
- molte board utilizzano TCP UDP
- altri protocolli possono essere utilizzati per il trasferimento di dati
- protocollo per lo scambio di dati molto semplice
- si basa su pattern Object Oriented Publisher Subscriber

- un subscriber è sottoscritto a dei topic, il broker invia i dati a solo i riceventi abbonati al determinato topic
- ogni messaggio contieen
Iscrizioni a topic e publish
- è possibile collegarsi a dei topic tramite le wildcard
- publish permette di inviare un messaggio associato ad un toipic. Il broker analizza il ropic e gira il messaggio ai nodi il cui subtopic corrisponde
Broker MQTT
- qualunque sistema può essere broker MQTT
- anche un raspberry o un pc di casa
ESPHome
- permette di scrivere codice senza scrivere codice
Esercizio Board MQTT
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
//#include <PubSubClientTools.h>
const String ssid = "at-cell";
const String pass = "temporanea789";
#define MQTT_SERVER "mqtt.atrent.it"
WiFiClient espClient;
PubSubClient client(MQTT_SERVER, 1883, espClient);
//PubSubClientTools mqtt(client);
void setupWifi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid.c_str(), pass.c_str());
Serial.print("Connecting...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void setupMQTT() {
// Connect to MQTT
Serial.print("Connecting to MQTT: "+String(MQTT_SERVER)+" ... ");
if (client.connect("analogreader")) {
Serial.println("MQTT connected");
/*
mqtt.subscribe("SistEmbed/plummin/imposta", blink);
mqtt.subscribe("#", monitor);
mqtt.subscribe("SistEmbed/fdossena/bright", luminosita);
*/
} else {
Serial.println("Failed, rc="+client.state());
}
}
void setup() {
Serial.begin(115200);
setupWifi();
setupMQTT();
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
// invio MQTT message
client.publish("SistEmbed/analogread/atrent-value", String(sensorValue).c_str()); // forse c'è un giro più semplice... (es. PubSubClientTools)
Serial.println("Failed? "+client.state());
delay(1000);
}