Пробую публиковать сообщения на 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