• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 бесконечно отправляет сообщение

Spiritwolf

New member
Доброго времени суток, форумчане!

Прошу вашей помощи!
Суть прошивки: отправляю в топик "soc1" сообщение. Если оно получено ESP8266, то модуль отвечает в топике "soc1feedback".
Проблема: отправляю "on", и модуль в ответ спамит "on" (предполагалось, что ответит один раз). Шлю следом "off" - модуль спамит "on" и "off" по очереди. В чем может быть проблема, подскажите, пожалуйста.

Код:
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic());
Serial.print(" => ");
Serial.print(pub.payload_string());

if(payload=="on"){
    digitalWrite(LED_BUILTIN, LOW);
    client.publish("soc1feedback","on");
  };
if(payload=="off"){
    digitalWrite(LED_BUILTIN, HIGH);
    client.publish("soc1feedback","off");
  };
}

void setup(void)
{
  Serial.begin(115200);
  Serial.println();
  Serial.printf("Connecting to %s\n", ssid);     //  "Подключение к "
  WiFi.begin(ssid, pass);

  pinMode(LED_BUILTIN, OUTPUT);
 
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected, IP address: ");       //  "Подключено, IP-адрес: "
  Serial.println(WiFi.localIP());
}

void loop() {

  if (WiFi.status() == WL_CONNECTED) {
    if (!client.connected()) {
      Serial.println("Connecting to MQTT server");
      if (client.connect(MQTT::Connect("").set_auth(mqtt_user, mqtt_pass))) {
        Serial.println("Connected to MQTT server");
  client.set_callback(callback);
  client.subscribe("soc1");
  client.subscribe("soc1feedback");
      } else {
        Serial.println("Could not connect to MQTT server"); 
        delay(500);
      }
    }
    if (client.connected())
      client.loop();
  }
}
 

Алексей.

Active member
Вы в callback(const MQTT:: Publish& pub) несмотря на то что вывов этого callback-а выполнен по тому что получено сообщение для топика soc1feedback выполняете публикацию этого же топика и ловите его ещё раз, это такой пинг бесконечный хотели реализовать?
Лишнюю подписку выполняете client.subscribe("soc1feedback")
 

Spiritwolf

New member
Вы в callback(const MQTT:: Publish& pub) несмотря на то что вывов этого callback-а выполнен по тому что получено сообщение для топика soc1feedback выполняете публикацию этого же топика и ловите его ещё раз, это такой пинг бесконечный хотели реализовать?
Лишнюю подписку выполняете client.subscribe("soc1feedback")
Точно!! Он же сам на себя реагировать начинает. Спасибо большое!
 
Сверху Снизу