MQTT e callback su messaggio ricevuto

Ciao a tutti,

sto cercando di implementare MQTT con la seguente libreria: GitHub - arduino-libraries/ArduinoMqttClient: ArduinoMqttClient Library for Arduino

Con l'esempio "Naive" di github, tutto funziona. Sto provando ad incapsulare il "canale" MQTT in una classe:

class ALE_MQTTHA
{
private:
	char* mqttTopic;

	WiFiClient* wifiClient;
	MqttClient* mqttClient;
public:

	ALE_MQTTHA() = default;
	void subscribeToTopic(char* _topic);
	void unsubscribeToTopic(char* _topic);
	void aliveLoop();
	void onMqttMessage(int messageSize);
	void sendMessage(char* _message);
}

Ho un problema di compilazione nel metodo SubscribeToTopic:


void ALE_MQTTHA::subscribeToTopic(char* _topic)
{
	mqttClient->subscribe(_topic);
        mqttClient->onMessage(this->onMqttMessage); //ERRORE
}

L' errore è:
ALE_MQTTHA.cpp: In member function void ALE_MQTTHA::subscribeToTopic(char*)
ALE_MQTTHA.cpp: 12:46: error: invalid use of non-static member function 'void ALE_MQTTHA::onMqttMessage(int)
mqttClient->onMessage(this->onMqttMessage)

In pratica sembra aspettarsi un puntatore a funzione statico (cosa che nell' esempio su github non è) e non facente parte della classe ALE_MQTTHA.

Se dichiaro il metodo onMessage come statico funziona, il problema è però che all' interno di quel metodo non ho più ovviamente il riferimento a this e quindi this->mqttClient e mi è quindi impossibile recuperare il messaggio.

Cosa mi sto perdendo?

Nessuno? Scusate la domanda fin troppo specifica :slight_smile:

prova a dare un'occhiata a QUESTO

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.