У вас, похоже, проблема с висящим указателем.
Вы создаете объект клиента в стеке:
PubSubClient client(espClient);
затем обратитесь к нему:
this->client = & client;
Однако после выхода из функции SimpleMQTT::begin()
, client
удаляется вместе с остальным стеком функции.
Вместо этого вы должны создать клиентский объект в куче.
Измените код на:
void SimpleMQTT::begin() {
Serial.println("setserver");
WiFiClient* espClient = new WiFiClient();
PubSubClient* client = new PubSubClient(espClient); // Allocate an object on the heap
client.setServer(this->serverAddress, this->port);
while(!client->connected()) {
if (client->connect(this->deviceName)) {
Serial.println("connected to mqtt");
client->publish("connecting", "connected");
} else {
Serial.println("failed to connect");
}
}
this->client = client;
this->client->publish("connecting","conn2");
}
espClient
также должен быть членом вашего класса.
Вот более подробное объяснение движущихся указателей .