MQTT funzione di callback

Un saluto a tutto il forum di Arduino.

Sono nuovo di questo forum e volevo esporre il mio problema sulla funzione di callback del protocollo MQTT. Il mio scopo è quello di inviare un messaggio al broker e, tramite la funzione di callback, vorrei assegnare il contenuto del payload ad un'altra variabile per farci che voglio. Eseguendo il codice, dopo aver effettuato le connessioni, provo ad inviare un messaggio sul broker ma dal monitor seriale mi accorgo che la funzione di callback non viene mai chiamata.
Mi piacerebbe capire come funziona esattamente questa funzione, visto che negli sketch per accendere e spegnere il led va tutto bene.

Grazie

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

#define NAME "var/name"
#define LASTNAME "var/lastname"
const char* mqttServer = "......";
const char* ssid = ".....";
const char* password = ".........";
char myname[30];
char lastname[30];
String MsgIn;
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
   delay(1000);
   Serial.begin(115200);
   WiFi.begin(ssid,password);

  
  client.setServer(mqttServer, 1883);
  client.setCallback(callback);



}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }

  
  client.loop();
  client.subscribe(NAME);
  client.subscribe(LASTNAME);
}



void callback(char* topic, byte* payload, unsigned int length)
{
  MsgIn="";
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++)
  {
    MsgIn = MsgIn + ((char)payload[i]);
  }
  Serial.print(MsgIn);
  if (topic == NAME)
  {  
    for(int i=0;i<MsgIn.length();i++)
    {
      myname[i]=MsgIn[i];
    }
    Serial.println(myname);
  }

  if (topic == LASTNAME)
  {
    for(int i=0;i<MsgIn.length();i++)
    {
      lastname[i]=MsgIn[i];
    }
    Serial.println(lastname);  
  }
  
}



  

void reconnect() 
{
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("esp")) {
      Serial.println("connected");
      client.subscribe(NAME);
      client.subscribe(LASTNAME);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink: