Здравствуйте. Подскажите пожалуйста. Есть 2 esp8266 (nodencu), посылают\принимают сообщения mqtt. Были подписаны на 5 топиков, более-менее работали стабильно. Добавил подписку еще на 2 топика - начали стабильно виснуть раз-два в сутки. Причем, на пинг они отвечают, прошивка по http залетает. Вот код подписки: Код (C++): // подключаемся к 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 топиков подписки). как это можно исправить? благодарю
Нет нет да и зависнет, но не 2 раза в день. Виснет именно mqtt. Пинг проходит, скетч по http залетает.
Коллеги, а не проще ли подписаться на одну ветку (например здесь) ""ihouse/climat/#" после чего анализировать пришедшие топики в свитче?
А Вы документацию к библиотеке смотрели? Она здесь! Посмотрите, как выглядит подключение у Вас , и как в докуменации и примерах Помнится, я Вас уже об этом спрашивал здесь. Но вы сказали, что у вас все и так работает. Хозяин барин , но у меня как в документации, и стабильно работает.
Как мне кажется, тут нужно искать компромисс. Наверно нужна одна своя с "#" и плюс те которые нужны. Вопрос сколько топиков будет валиться в подветке и сколько нужно обрабатывать. У меня в целом не больше 6 подписок, проблем нет. Мене почему-то часто нужны единичные топики из разных подветок.
Код (C++): if (!mqtt_client.connected()) { Serial.println("Connecting to MQTT server"); if (mqtt_client.connect(MQTT::Connect("informer_in") .set_auth(mqtt_user, mqtt_pass))) { Я думаю это заведует переподключением.
Попробовал скомпилировать этот Ваш пример, у меня даже компиляция не проходит, ругается именно на MQTT:: У меня нет MQTT.h, но и в Вашем втором примере она убрана. ИМХО Вы пытаетесь использовать две библиотеки mqtt одновременно. Про MQTT.h сказать ничего не могу, PubSubClient работает чрезвычайно стабильно. Сейчас посмотрел, на дачной Leonardo ETH подписываюсь на 9 топиков. Работает с прошлой весны, за это время не было ни одного самопроизвольного зависания или рестарта. Пару раз я обновлял, пару раз питание отключал. Посмотрите примеры, там все очень понятно описано:
Поделитесь плиз своим кодом. Я свой код лепил из нескольких. Скорее всего поэтому такие траблы и идут.
Добрый всем. Переключил на другую библиотеку. Пока фурычит (тьфу тьфу тьфу). Но есть непонятки. Код (C++): // Функция получения данных от сервера void callback(char* topic, byte* payload, unsigned int length) { //-------------------------------------------------------------------------------------- //свет баня 1 if (String(topic) == "ihouse/svet/banya/in") { if ((char)payload[0] == '1') flag_light_banya = true; if ((char)payload[0] == '0') flag_light_banya = false; digitalWrite(outPin2, !flag_light_banya); } //свет баня 2 if (String(topic) == "ihouse/svet/banya/out") { if ((char)payload[0] == '1') flag_light_banya = true; if ((char)payload[0] == '0') flag_light_banya = false; digitalWrite(outPin1, !flag_light_banya); } //свет столб if (String(topic) == "ihouse/svet/stolb") { if ((char)payload[0] == '1') flag_light_stolb = true; if ((char)payload[0] == '0') flag_light_stolb = false; digitalWrite(outPin3, !flag_light_stolb); } } Суть: свет на столбе не зажигается, хотя в топик летит 1. Такое ощущение, что отрабатывает только первый блок - свет баня 1. Где я накосячил? благодарю