• Система автоматизации с открытым исходным кодом на базе 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")
Точно!! Он же сам на себя реагировать начинает. Спасибо большое!
 
Сверху Снизу