Работа с MQTT из ESP8266

#include <ArduinoMqttClient.h>
#include <ESP8266WiFi.h>
 
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
 
const char *ssid = "wifi-sid";
const char *password = "wifi_passwd";
 
const char broker[] = "100.64.88.200";
int port = 1883;
 
void connectWiFi() {
  Serial.print("Connecting to WiFi...");
  WiFi.begin(ssid, password);
  unsigned long startAttemptTime = millis();
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (millis() - startAttemptTime > 20000) {  // Таймаут 20 сек
      Serial.println("Failed to connect to WiFi");
      return;
    }
  }
}
 
void connectMQTT() {
  Serial.print("Connecting to MQTT...");
  unsigned long startAttemptTime = millis();
  mqttClient.setUsernamePassword("user", "passwd");
  while (!mqttClient.connect(broker, port)) {
    delay(1000);
    Serial.print(".");
    if (millis() - startAttemptTime > 20000) {  // Таймаут 20 сек
      Serial.println("Failed to connect to MQTT");
      return;
    }
  }
 
  Serial.println("Connected to MQTT!");
  mqttClient.subscribe("sensor/AM2302/temp");
  mqttClient.subscribe("sensor/AM2302/hum");
}
 
void setup() {
  connectWiFi();
  connectMQTT();
}
 
void loop() {
  int messageSize = mqttClient.parseMessage();
  if (messageSize) {
    String message = "";
    String topic = mqttClient.messageTopic();
 
    while (mqttClient.available()) {
      char c = (char)mqttClient.read();
      message += c;
    }
 
    Serial.print("Received: ");
    Serial.print(topic);
    Serial.print(" -> ");
    Serial.println(message);
 
    // Конвертация строки в число
    float tempValue = message.toFloat();
    // Обновление данных по соответствующему датчику
    if (topic == "sensor/AM2302/temp") {
      temp_AM2302 = tempValue;
    } else if (topic == "sensor/AM2302/hum") {
      hum_AM2302 = tempValue;
    }
  }
}