• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

esp8266, mqtt, подписка на 7 топиков - зависания

YDen

Member
Здравствуйте.
Подскажите пожалуйста. Есть 2 esp8266 (nodencu), посылают\принимают сообщения mqtt. Были подписаны на 5 топиков, более-менее работали стабильно. Добавил подписку еще на 2 топика - начали стабильно виснуть раз-два в сутки. Причем, на пинг они отвечают, прошивка по http залетает.
Вот код подписки:
Код:
// подключаемся к MQTT серверу
  if (WiFi.status() == WL_CONNECTED)
  {
    if (!mqtt_client.connected())
    {
      Serial.println("Connecting to MQTT server");
      if (mqtt_client.connect(MQTT::Connect("informer_in")
                              .set_auth(mqtt_user, mqtt_pass)))
      {
        Serial.println("Connected to MQTT server");
        mqtt_client.set_callback(callback);
        //подписываемся по топики
        mqtt_client.subscribe("ihouse/climat/t_out");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/climat/t_out/delta");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/climat/t_banya");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/climat/t_banya/delta");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/svet/banya/in");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/climat/pressure/p_atm");
        mqtt_client.loop();
        mqtt_client.subscribe("ihouse/climat/pressure/p_atm_delta");
        mqtt_client.loop();
      }
      else
      {
        Serial.println("Could not connect to MQTT server");
      }
    }

    if (mqtt_client.connected())
    {
      mqtt_client.loop();
      TempSend();
    }
Отправка в топики так же висит. Отправляю в топики сообщения только при изменении величин. На других esp с подобным кодом все нормально (не 7 топиков подписки).

как это можно исправить?

благодарю
 

shavrin777

New member
1 nodemcu это луа прошивка а у тебя просто esp ипользуется с arduino ide
2 если ты отправляешь сообщения в топики, ТО зачем на них подписываешься ????

И сказано в правилах код под спойлер
 

shavrin777

New member
и раз у тебя 7 топиков то не рекомендую отправлять сообщения более 2 раз в секунду
 

YDen

Member
Добрый всем.
На правах ТС отпишусь.
Гугл сказал, что в этой проблеме (зависание при подписке на >5 топиков) виновата библиотека. Скачал, установил другую, 2.6 версия - ее хвалят.
Но не могу понять как получить числовые значения из топика.
Код:
int t_out;
// Функция получения данных от сервера
void callback(char* topic, byte* payload, unsigned int length)
{
  //температура
  if (String(topic) == "ihouse/climat/t_out")
  {
    Serial.println(t_out);
    t_out = payload[0];
  }
}
В монитор шлет всякую ересь из цифр (t_out). В топике сидит 5, в монитор выводит 114.
Как это можно исправить?
 
Сверху Снизу