• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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.
Как это можно исправить?
 
Сверху Снизу