Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Общие вопросы по esp8266", создана пользователем Deonis, 3 июн 2019.

  1. Deonis

    Deonis Новичок

    Сообщения:
    21
    Симпатии:
    0
    Пробую публиковать сообщения на cloudmqtt.com, судя по MqttSpy топики обновляются но в логах cloudmqtt.com постоянно появляется "Socket error on client ...... disconnecting." В консоли платы также регулярно сообщения о потери соединения с MQTT сервером.
    Может подскажите что я делаю неверно?
    Код (Text):
    1. /*
    2. Подписка к локальному MQTT
    3. вывод на дисплей NEXTION
    4. СофтСериал для дисплея
    5. --- оправляем на другой сервер
    6. */
    7. #include <ESP8266WiFi.h>
    8. #include <PubSubClient.h>
    9. #include <SoftwareSerial.h>
    10. // =======================================================================
    11. // Конфигурация устройства:
    12. // =======================================================================
    13.  
    14. const char* ssid = "SSID";   //SSID
    15. const char* password = "Пароль";  //Пароль
    16.  
    17. #define REPORT_INTERVAL 5 // интервал обмена Клиента
    18.  
    19. SoftwareSerial swSer(14, 12, false, 95, 10); //14-RX, 12-TX
    20.  
    21. // Топики для подписи
    22. char* hellotopic = "ESP_0"; //Топик для приветственной инициализации
    23. char* temperature_topic = "garden/hotbed_1/temperature";  //Топик подписки для получения температуры в теплице1
    24. char* humidity_topic = "garden/hotbed_1/humidity";        //Топик подписки для получения влажности в теплице1
    25.  
    26. //Internet
    27. const char *mqtt_server_1 = "m24.cloudmqtt.com";
    28. const int mqtt_port_1 = 11111; // Порт для подключения к серверу MQTT
    29. const char *mqtt_user_1 = "+++"; // Логи от сервер
    30. const char *mqtt_pass_1 = "+++"; // Пароль от сервера
    31.  
    32. String clientName;  // Сбор строки информации о клиенте
    33.  
    34. WiFiClient wclient;
    35. PubSubClient client_1(wclient, mqtt_server_1, mqtt_port_1); //Создание колиента MQTT Internet
    36.  
    37. // Список возвращаемых данных
    38. String t_hotbed_1;
    39. String h_hotbed_1;
    40.  
    41. // =======================================================================
    42. // Функция получения данных от сервера
    43. void callback(const MQTT::Publish& pub)
    44. {
    45.  
    46. }//void callback
    47.  
    48. String macToStr(const uint8_t* mac)
    49. {
    50.   String result;
    51.   for (int i = 0; i < 6; ++i) {
    52.     result += String(mac[i], 16);
    53.     if (i < 5)
    54.       result += ':';
    55.   }
    56.   return result;
    57. }//String macToStr
    58.  
    59. // =======================================================================
    60. void setup_wifi()
    61. {
    62.   while (WiFi.status() != WL_CONNECTED) { //Если нет подключения к WIFI
    63.     delay(500); //Задержка 50 сек
    64.     //Serial.print(".");
    65.   }
    66.   Serial.println("+");
    67.   Serial.println("WiFi connected"); // Вывод в СОМ информации о подключении к WIFI
    68.   Serial.println("IP address: "); // Вывод в СОМ информации о полученом IP адресе
    69.   Serial.println(WiFi.localIP());  
    70. }// void setup_wifi
    71.  
    72. // =======================================================================
    73.  
    74. void reconnect_1()
    75. {
    76.     // подключаемся к MQTT серверу
    77.     if (WiFi.status() == WL_CONNECTED)
    78.     {
    79.        if (!client_1.connected())
    80.        {
    81.         Serial.print("Connecting to ");
    82.         Serial.print(mqtt_server_1);  
    83.         Serial.print(" as ");
    84.         Serial.println(clientName); //Вывод в СОМ собранной информации о клиенте  
    85.                
    86.         if (client_1.connect(MQTT::Connect((char*) clientName.c_str()).set_auth(mqtt_user_1, mqtt_pass_1))) //коннектимся с брокером как клиент
    87.         {
    88.           Serial.println("Connecting ++++ ");
    89.           client_1.loop();      
    90.                  
    91.            if(client_1.publish(hellotopic, "hello from ESP8266")){
    92.               Serial.println("hellotopic OK");
    93.            }else{
    94.               Serial.println("hellotopic Failed");
    95.            }  
    96.               //Публикуем в топиках
    97.             client_1.publish(humidity_topic, "t_hotbed_1");
    98.  
    99.             client_1.publish(temperature_topic, "t_hotbed_1");
    100.        
    101.           }
    102.         else {
    103.           Serial.println("MQTT connect failed");
    104.           Serial.println("Will reset and try again...");
    105.           abort();
    106.         }
    107.         }        
    108.     }
    109. }//void reconnect_1
    110.  
    111. ///////////////////////////////////////////////////////
    112.  
    113. void setup() {
    114.   // Setup console
    115.   Serial.begin(115200);
    116.   swSer.begin(9600);
    117.   delay(10);
    118.   swSer.write(static_cast<uint8_t>(0));
    119.   Serial.println();
    120.   Serial.println();
    121.   WiFi.mode(WIFI_STA);        // режим клиента
    122.   WiFi.begin(ssid, password);
    123.   delay(10);
    124.   clientName += "esp8266-"; // Сбор строки информации о клиенте
    125.   uint8_t mac[6];
    126.   WiFi.macAddress(mac);  // Получение МАС адреса
    127.   clientName += macToStr(mac); // Добавление МАС адреса клиента в строку о клиенте
    128.   clientName += "-";
    129.   clientName += String(micros() & 0xff, 16);
    130. }//void setup
    131.  
    132. void loop() {
    133.  
    134.   if (WiFi.status() != WL_CONNECTED) //если нет подключения к вифи
    135.   {
    136.     Serial.println(" NO WiFI Connect ");
    137.     setup_wifi();
    138.   }
    139.  
    140.      if (!client_1.connected())
    141.   {
    142.     Serial.println("Cloudmqtt connect lost ");
    143.     reconnect_1();                                        
    144.   }
    145.       client_1.loop();
    146.     delay(3000);
    147.    
    148. //////////////////////////////////////////
    149.   int cnt = REPORT_INTERVAL;
    150.  
    151.   while (cnt--)
    152.    delay(1000);
    153. }// void loop
    154.  
     
  2. =AK=

    =AK= Гуру

    Сообщения:
    1.194
    Симпатии:
    100
    Чтобы соединение с брокером не было разорвано, клиент должен все время (каждые 5-10 сек) посылать брокеру какие-то сообщения.
     
  3. Deonis

    Deonis Новичок

    Сообщения:
    21
    Симпатии:
    0
    Спасибо за совет! Но в моем случае, обрыв происходит раньше, практически сразу после публикации...
     
  4. rriissee33

    rriissee33 Новичок

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

Поделиться этой страницей