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?