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

Публикация на cloudmqtt.com постоянный disconnecting

Deonis

New member
Пробую публиковать сообщения на cloudmqtt.com, судя по MqttSpy топики обновляются но в логах cloudmqtt.com постоянно появляется "Socket error on client ...... disconnecting." В консоли платы также регулярно сообщения о потери соединения с MQTT сервером.
Может подскажите что я делаю неверно?
Код:
/*
Подписка к локальному MQTT
вывод на дисплей NEXTION
СофтСериал для дисплея
--- оправляем на другой сервер 
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SoftwareSerial.h>
// =======================================================================
// Конфигурация устройства:
// =======================================================================

const char* ssid = "SSID";   //SSID
const char* password = "Пароль";  //Пароль

#define REPORT_INTERVAL 5 // интервал обмена Клиента

SoftwareSerial swSer(14, 12, false, 95, 10); //14-RX, 12-TX

// Топики для подписи
char* hellotopic = "ESP_0"; //Топик для приветственной инициализации
char* temperature_topic = "garden/hotbed_1/temperature";  //Топик подписки для получения температуры в теплице1
char* humidity_topic = "garden/hotbed_1/humidity";        //Топик подписки для получения влажности в теплице1

//Internet
const char *mqtt_server_1 = "m24.cloudmqtt.com";
const int mqtt_port_1 = 11111; // Порт для подключения к серверу MQTT
const char *mqtt_user_1 = "+++"; // Логи от сервер
const char *mqtt_pass_1 = "+++"; // Пароль от сервера

String clientName;  // Сбор строки информации о клиенте

WiFiClient wclient;
PubSubClient client_1(wclient, mqtt_server_1, mqtt_port_1); //Создание колиента MQTT Internet

// Список возвращаемых данных
String t_hotbed_1;
String h_hotbed_1;

// =======================================================================
// Функция получения данных от сервера
void callback(const MQTT::Publish& pub)
{
 
}//void callback

String macToStr(const uint8_t* mac)
{
  String result;
  for (int i = 0; i < 6; ++i) {
    result += String(mac[i], 16);
    if (i < 5)
      result += ':';
  }
  return result;
}//String macToStr

// =======================================================================
void setup_wifi()
{
  while (WiFi.status() != WL_CONNECTED) { //Если нет подключения к WIFI
    delay(500); //Задержка 50 сек
    //Serial.print(".");
  }
  Serial.println("+");
  Serial.println("WiFi connected"); // Вывод в СОМ информации о подключении к WIFI
  Serial.println("IP address: "); // Вывод в СОМ информации о полученом IP адресе
  Serial.println(WiFi.localIP());  
}// void setup_wifi

// =======================================================================

void reconnect_1()
{
    // подключаемся к MQTT серверу
    if (WiFi.status() == WL_CONNECTED)
    {
       if (!client_1.connected())
       {
        Serial.print("Connecting to ");
        Serial.print(mqtt_server_1);   
        Serial.print(" as ");
        Serial.println(clientName); //Вывод в СОМ собранной информации о клиенте   
               
        if (client_1.connect(MQTT::Connect((char*) clientName.c_str()).set_auth(mqtt_user_1, mqtt_pass_1))) //коннектимся с брокером как клиент
        { 
          Serial.println("Connecting ++++ ");
          client_1.loop();       
                  
           if(client_1.publish(hellotopic, "hello from ESP8266")){
              Serial.println("hellotopic OK");
           }else{
              Serial.println("hellotopic Failed");
           }  
              //Публикуем в топиках
            client_1.publish(humidity_topic, "t_hotbed_1");

            client_1.publish(temperature_topic, "t_hotbed_1");
       
          }
        else {
          Serial.println("MQTT connect failed");
          Serial.println("Will reset and try again...");
          abort();
        }
        }         
    }
}//void reconnect_1

///////////////////////////////////////////////////////

void setup() {
  // Setup console
  Serial.begin(115200);
  swSer.begin(9600);
  delay(10);
  swSer.write(static_cast<uint8_t>(0));
  Serial.println();
  Serial.println();
  WiFi.mode(WIFI_STA);        // режим клиента
  WiFi.begin(ssid, password);
  delay(10); 
  clientName += "esp8266-"; // Сбор строки информации о клиенте
  uint8_t mac[6];
  WiFi.macAddress(mac);  // Получение МАС адреса
  clientName += macToStr(mac); // Добавление МАС адреса клиента в строку о клиенте
  clientName += "-";
  clientName += String(micros() & 0xff, 16);
}//void setup

void loop() {

  if (WiFi.status() != WL_CONNECTED) //если нет подключения к вифи
  {
    Serial.println(" NO WiFI Connect ");
    setup_wifi();
  } 
 
     if (!client_1.connected())
  {
    Serial.println("Cloudmqtt connect lost ");
    reconnect_1();                                         
  }
      client_1.loop();
    delay(3000);
   
//////////////////////////////////////////
  int cnt = REPORT_INTERVAL;

  while (cnt--)
   delay(1000);
}// void loop
 

=AK=

New member
Пробую публиковать сообщения на cloudmqtt.com, судя по MqttSpy топики обновляются но в логах cloudmqtt.com постоянно появляется "Socket error on client ...... disconnecting." В консоли платы также регулярно сообщения о потери соединения с MQTT сервером.
Может подскажите что я делаю неверно?
Чтобы соединение с брокером не было разорвано, клиент должен все время (каждые 5-10 сек) посылать брокеру какие-то сообщения.
 

Deonis

New member
Чтобы соединение с брокером не было разорвано, клиент должен все время (каждые 5-10 сек) посылать брокеру какие-то сообщения.
Спасибо за совет! Но в моем случае, обрыв происходит раньше, практически сразу после публикации...
 

rriissee33

Member
Попробуйте использовать вот эту библиотеку - она у меня очень стабильно работает. Arduino Client for MQTT Примеры на моем гитхабе в файле mqtt.ino. Ссылка внизу
 
Сверху Снизу