• Система автоматизации с открытым исходным кодом на базе 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. Ссылка внизу
 
Сверху Снизу