mqtt нужна помощь

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Сб ноя 25, 2017 11:06 am

В то же время не понятно, видел как на WiFi-IOT по mqtt Еспишка шлет чуть ли не 12 пакетов данных в мажордом и уровень сигнала вафли и напряжение питания и прочью лабуду :(
ничо уже не понимаю

антивир по вашей ссылке ругается
Logrus писал(а):https://it4it.club/topic/55-meteostanci ... it4itclub/
первый пост, первый абзац (под фото)
PI2 + MQTT + 5 ESP8266 + Atmega16
scorp49
Сообщения: 73
Зарегистрирован: Ср дек 21, 2016 5:45 pm
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: mqtt нужна помощь

Сообщение scorp49 » Пн ноя 27, 2017 11:50 am

Попробуй в место этого
client.subscribe(relays_topic1); //подписываемся на топик
client.subscribe(relays_topic2); //подписываемся на топик
client.subscribe(relays_topic3); //подписываемся на топик
client.subscribe(relays_topic4); //подписываемся на топик
client.subscribe(relays_topic5); //подписываемся на топик
client.subscribe(relays_topic6);

написать
client.subscribe("ESP01/#"); //подписываемся на топики

у меня такая же проблема была. Так всё заработало.
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Пн ноя 27, 2017 1:06 pm

scorp49 писал(а):Попробуй в место этого

client.subscribe("ESP01/#"); //подписываемся на топики

у меня такая же проблема была. Так всё заработало.
работает, но всего 5 топиков
а что за библиотеку вы использовали?
у меня PubSubClient у которого callback выглядит вот так callback(char* topic, byte* payload, unsigned int length)

пробую попутно второй вариант, с отправкой массива данных в мажордом, отправил массив в строковом виде, приходят данные по состоянию 8 реле всего на одном топике в виде "00000000" ну и в зависимости от состояния реле нули на 1 меняются
теперь осталось дойти умом как и где прописать мажордому чтоб в зависимости от выключателей он эту строку побитово менял, не затрагивая остальные быты, в СИ оно выглядело примерно так PORTB |= (1 << PB2);
а вот как подобное написать на php ваще не соображу

отправка данных MQTT пока выглядит вот так

Код: Выделить всё

void MQTT()                                   //публикуем топик с состоянием режима
{
  
  if (millis() - last_mls2 > 1000)            //периодичность публикации топика
  { last_mls2 = millis();
   A = "";
  for (int i=0;i<8;i++)
  {
      A = A+char(Dannie[i]+48);
  }
    client.publish(relays_Relays, String(A).c_str());
    Serial.println("Отправка данных MQTT");
    
  }
}
 


и вот скрин, что получает мажордом
mqtt_massiv.jpg
mqtt_massiv.jpg (89.43 КБ) 4866 просмотров
Последний раз редактировалось ZyaK Пн ноя 27, 2017 1:15 pm, всего редактировалось 1 раз.
PI2 + MQTT + 5 ESP8266 + Atmega16
scorp49
Сообщения: 73
Зарегистрирован: Ср дек 21, 2016 5:45 pm
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: mqtt нужна помощь

Сообщение scorp49 » Пн ноя 27, 2017 1:14 pm

вы в двух местах поправили?
client.subscribe(relays_topic1); //подписываемся на топик
client.subscribe(relays_topic2); //подписываемся на топик
client.subscribe(relays_topic3); //подписываемся на топик
client.subscribe(relays_topic4);
client.subscribe(relays_topic5);
client.subscribe(relays_topic6);

У вас это в двух местах кода
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Пн ноя 27, 2017 1:16 pm

scorp49 писал(а):вы в двух местах поправили?
Да, первое при первоначальном подключении, второе при реконекте, так же всего 5 топиков, но хотя бы подключается, когда жестко были прописаны топики, она вообще к MQTT не подключалась

Периодически отваливается, на реконекте снова подключается, отправляет топики и опять отваливается до следующего реконекта
PI2 + MQTT + 5 ESP8266 + Atmega16
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Пн ноя 27, 2017 1:29 pm

Вот здесь наткнулся на подобную проблему, говорят косяк в библиотеках
https://esp8266.ru/forum/threads/biblio ... ient.1634/
это я так понимаю сами библиотеку написали https://github.com/merlokk/SmartHome/bl ... al.ino#L15
а это вроде как пример https://github.com/merlokk/SmartHome/bl ... N.ino#L155 , но не дохожу головой как это применить
PI2 + MQTT + 5 ESP8266 + Atmega16
scorp49
Сообщения: 73
Зарегистрирован: Ср дек 21, 2016 5:45 pm
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: mqtt нужна помощь

Сообщение scorp49 » Пн ноя 27, 2017 1:33 pm

Попробуйте по аналогии сделать как у меня. У меня конечно другое устройство, но по MQTT думаю сходно
СпойлерПоказать
#include <ESP8266WiFi.h>
#include <PubSubClient.h>


const char* ssid = "*******";
const char* password = "*********";
const char* mqtt_server = "10.4.112.58";

#define OUT_1 0 //Выход 1
#define out_topic1 "Satel_Out/OUT_1" //публикуемый топик 1
#define OUT_2 2 //Выход 2
#define out_topic2 "Satel_Out/OUT_2" //публикуемый топик 2
#define OUT_3 4 //Выход 3
#define out_topic3 "Satel_Out/OUT_3" //публикуемый топик 3
#define OUT_4 5 //Выход 4
#define out_topic4 "Satel_Out/OUT_4" //публикуемый топик 4
#define OUT_5 12 //Выход 5
#define out_topic5 "Satel_Out/OUT_5" //публикуемый топик 5
#define OUT_6 13 //Выход 6
#define out_topic6 "Satel_Out/OUT_6" //публикуемый топик 6
#define OUT_7 14 //Выход 7
#define out_topic7 "Satel_Out/OUT_7" //публикуемый топик 7
#define OUT_8 16 //Выход 8
#define out_topic8 "Satel_Out/OUT_8" //публикуемый топик 8

WiFiClient espClient; //инициализация WiFi клиента
PubSubClient client(espClient); //инициализация MQTT клиента
long last_mls = millis(); //функция времени в милисекундах

boolean rState1 = false; //объявляем статус выхода 1 в 0
boolean rState2 = false; //объявляем статус выхода 2 в 0
boolean rState3 = false; //объявляем статус выхода 3 в 0
boolean rState4 = false; //объявляем статус выхода 4 в 0
boolean rState5 = false; //объявляем статус выхода 5 в 0
boolean rState6 = false; //объявляем статус выхода 6 в 0
boolean rState7 = false; //объявляем статус выхода 7 в 0
boolean rState8 = false; //объявляем статус выхода 8 в 0

void setup()
{
pinMode(OUT_1, OUTPUT); //Выход 1
digitalWrite(OUT_1, rState1); //устанавливаем на выходе 1 статус
pinMode(OUT_2, OUTPUT); //Выход 2
digitalWrite(OUT_2, rState2); //устанавливаем на выходе 2 статус
pinMode(OUT_3, OUTPUT); //Выход 3
digitalWrite(OUT_3, rState3); //устанавливаем на выходе 3 статус
pinMode(OUT_4, OUTPUT); //Выход 4
digitalWrite(OUT_4, rState4); //устанавливаем на выходе 4 статус
pinMode(OUT_5, OUTPUT); //Выход 5
digitalWrite(OUT_5, rState5); //устанавливаем на выходе 5 статус
pinMode(OUT_6, OUTPUT); //Выход 6
digitalWrite(OUT_6, rState6); //устанавливаем на выходе 6 статус
pinMode(OUT_7, OUTPUT); //Выход 7
digitalWrite(OUT_7, rState7); //устанавливаем на выходе 7 статус
pinMode(OUT_8, OUTPUT); //Выход 8
digitalWrite(OUT_8, rState8); //устанавливаем на выходе 8 статус


Serial.begin(115200); //инициализация монитора порта
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100); //ждем 100 милисекунд
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(6000); //ждем 6 секунд
client.connect("Satel_Out"); //конектимся с брокером как клиент
client.publish(out_topic1, String(rState1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
client.publish(out_topic2, String(rState2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
client.publish(out_topic3, String(rState3).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
client.publish(out_topic4, String(rState4).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
client.publish(out_topic5, String(rState5).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
client.publish(out_topic6, String(rState6).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
client.publish(out_topic7, String(rState7).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
client.publish(out_topic8, String(rState7).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
client.subscribe("Satel_Out/#"); //подписываемся на топики


}

void reconnect_server() //функция проверки подключения
{
if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
{
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
} else {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
if(!client.connected() && WiFi.status() == WL_CONNECTED){
if (client.connect("Satel_Out")) {
Serial.println("Mosquitto connect...");
// client.publish(out_topic1, String(rState1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
// client.publish(out_topic2, String(rState2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
// client.publish(out_topic3, String(rState3).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
// client.publish(out_topic4, String(rState4).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
// client.publish(out_topic5, String(rState5).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
// client.publish(out_topic6, String(rState6).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
// client.publish(out_topic7, String(rState7).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
// client.publish(out_topic8, String(rState7).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
client.subscribe("Satel_Out/#"); //подписываемся на топики
} else {
Serial.print("failed connect Mosquitto, rc=");
Serial.print(client.state());
Serial.println("");
}
}
}


void callback(char* topic, byte* payload, unsigned int length) //читаем топики
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print(" ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
}
Serial.println();
if (strTopic == "Satel_Out/OUT_1") {
if ((char)payload[0] == '0') {
rState1 = false;
digitalWrite(OUT_1, rState1);
} else {
rState1 = true;
digitalWrite(OUT_1, rState1);
}
}
if (strTopic == "Satel_Out/OUT_2") {
if ((char)payload[0] == '0') {
rState2 = false;
digitalWrite(OUT_2, rState2);
} else {
rState2 = true;
digitalWrite(OUT_2, rState2);
}
}
if (strTopic == "Satel_Out/OUT_3") {
if ((char)payload[0] == '0') {
rState3 = false;
digitalWrite(OUT_3, rState3);
} else {
rState3 = true;
digitalWrite(OUT_3, rState3);
}
}
if (strTopic == "Satel_Out/OUT_4") {
if ((char)payload[0] == '0') {
rState4 = false;
digitalWrite(OUT_4, rState4);
} else {
rState4 = true;
digitalWrite(OUT_4, rState4);
}
}
if (strTopic == "Satel_Out/OUT_5") {
if ((char)payload[0] == '0') {
rState5 = false;
digitalWrite(OUT_5, rState5);
} else {
rState5 = true;
digitalWrite(OUT_5, rState5);
}
}
if (strTopic == "Satel_Out/OUT_6") {
if ((char)payload[0] == '0') {
rState6 = false;
digitalWrite(OUT_6, rState6);
} else {
rState6 = true;
digitalWrite(OUT_6, rState6);
}
}
if (strTopic == "Satel_Out/OUT_7") {
if ((char)payload[0] == '0') {
rState7 = false;
digitalWrite(OUT_7, rState7);
} else {
rState7 = true;
digitalWrite(OUT_7, rState7);
}
}
if (strTopic == "Satel_Out/OUT_8") {
if ((char)payload[0] == '0') {
rState8 = false;
digitalWrite(OUT_8, rState8);
} else {
rState8 = true;
digitalWrite(OUT_8, rState8);
}
}
}


void loop()
{
client.loop();
if (millis() - last_mls > 60000) //проверка подключений раз в 60 сек
{
last_mls = millis();
reconnect_server();
}
}
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Пн ноя 27, 2017 6:47 pm

scorp49 писал(а):Попробуйте по аналогии сделать как у меня. У меня конечно другое устройство, но по MQTT думаю сходно
СпойлерПоказать
#include <ESP8266WiFi.h>
#include <PubSubClient.h>


const char* ssid = "*******";
const char* password = "*********";
const char* mqtt_server = "10.4.112.58";

#define OUT_1 0 //Выход 1
#define out_topic1 "Satel_Out/OUT_1" //публикуемый топик 1
#define OUT_2 2 //Выход 2
#define out_topic2 "Satel_Out/OUT_2" //публикуемый топик 2
#define OUT_3 4 //Выход 3
#define out_topic3 "Satel_Out/OUT_3" //публикуемый топик 3
#define OUT_4 5 //Выход 4
#define out_topic4 "Satel_Out/OUT_4" //публикуемый топик 4
#define OUT_5 12 //Выход 5
#define out_topic5 "Satel_Out/OUT_5" //публикуемый топик 5
#define OUT_6 13 //Выход 6
#define out_topic6 "Satel_Out/OUT_6" //публикуемый топик 6
#define OUT_7 14 //Выход 7
#define out_topic7 "Satel_Out/OUT_7" //публикуемый топик 7
#define OUT_8 16 //Выход 8
#define out_topic8 "Satel_Out/OUT_8" //публикуемый топик 8

WiFiClient espClient; //инициализация WiFi клиента
PubSubClient client(espClient); //инициализация MQTT клиента
long last_mls = millis(); //функция времени в милисекундах

boolean rState1 = false; //объявляем статус выхода 1 в 0
boolean rState2 = false; //объявляем статус выхода 2 в 0
boolean rState3 = false; //объявляем статус выхода 3 в 0
boolean rState4 = false; //объявляем статус выхода 4 в 0
boolean rState5 = false; //объявляем статус выхода 5 в 0
boolean rState6 = false; //объявляем статус выхода 6 в 0
boolean rState7 = false; //объявляем статус выхода 7 в 0
boolean rState8 = false; //объявляем статус выхода 8 в 0

void setup()
{
pinMode(OUT_1, OUTPUT); //Выход 1
digitalWrite(OUT_1, rState1); //устанавливаем на выходе 1 статус
pinMode(OUT_2, OUTPUT); //Выход 2
digitalWrite(OUT_2, rState2); //устанавливаем на выходе 2 статус
pinMode(OUT_3, OUTPUT); //Выход 3
digitalWrite(OUT_3, rState3); //устанавливаем на выходе 3 статус
pinMode(OUT_4, OUTPUT); //Выход 4
digitalWrite(OUT_4, rState4); //устанавливаем на выходе 4 статус
pinMode(OUT_5, OUTPUT); //Выход 5
digitalWrite(OUT_5, rState5); //устанавливаем на выходе 5 статус
pinMode(OUT_6, OUTPUT); //Выход 6
digitalWrite(OUT_6, rState6); //устанавливаем на выходе 6 статус
pinMode(OUT_7, OUTPUT); //Выход 7
digitalWrite(OUT_7, rState7); //устанавливаем на выходе 7 статус
pinMode(OUT_8, OUTPUT); //Выход 8
digitalWrite(OUT_8, rState8); //устанавливаем на выходе 8 статус


Serial.begin(115200); //инициализация монитора порта
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100); //ждем 100 милисекунд
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(6000); //ждем 6 секунд
client.connect("Satel_Out"); //конектимся с брокером как клиент
client.publish(out_topic1, String(rState1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
client.publish(out_topic2, String(rState2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
client.publish(out_topic3, String(rState3).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
client.publish(out_topic4, String(rState4).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
client.publish(out_topic5, String(rState5).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
client.publish(out_topic6, String(rState6).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
client.publish(out_topic7, String(rState7).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
client.publish(out_topic8, String(rState7).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
client.subscribe("Satel_Out/#"); //подписываемся на топики


}

void reconnect_server() //функция проверки подключения
{
if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
{
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
} else {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
if(!client.connected() && WiFi.status() == WL_CONNECTED){
if (client.connect("Satel_Out")) {
Serial.println("Mosquitto connect...");
// client.publish(out_topic1, String(rState1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
// client.publish(out_topic2, String(rState2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
// client.publish(out_topic3, String(rState3).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
// client.publish(out_topic4, String(rState4).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
// client.publish(out_topic5, String(rState5).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
// client.publish(out_topic6, String(rState6).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
// client.publish(out_topic7, String(rState7).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
// client.publish(out_topic8, String(rState7).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
client.subscribe("Satel_Out/#"); //подписываемся на топики
} else {
Serial.print("failed connect Mosquitto, rc=");
Serial.print(client.state());
Serial.println("");
}
}
}


void callback(char* topic, byte* payload, unsigned int length) //читаем топики
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print(" ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
}
Serial.println();
if (strTopic == "Satel_Out/OUT_1") {
if ((char)payload[0] == '0') {
rState1 = false;
digitalWrite(OUT_1, rState1);
} else {
rState1 = true;
digitalWrite(OUT_1, rState1);
}
}
if (strTopic == "Satel_Out/OUT_2") {
if ((char)payload[0] == '0') {
rState2 = false;
digitalWrite(OUT_2, rState2);
} else {
rState2 = true;
digitalWrite(OUT_2, rState2);
}
}
if (strTopic == "Satel_Out/OUT_3") {
if ((char)payload[0] == '0') {
rState3 = false;
digitalWrite(OUT_3, rState3);
} else {
rState3 = true;
digitalWrite(OUT_3, rState3);
}
}
if (strTopic == "Satel_Out/OUT_4") {
if ((char)payload[0] == '0') {
rState4 = false;
digitalWrite(OUT_4, rState4);
} else {
rState4 = true;
digitalWrite(OUT_4, rState4);
}
}
if (strTopic == "Satel_Out/OUT_5") {
if ((char)payload[0] == '0') {
rState5 = false;
digitalWrite(OUT_5, rState5);
} else {
rState5 = true;
digitalWrite(OUT_5, rState5);
}
}
if (strTopic == "Satel_Out/OUT_6") {
if ((char)payload[0] == '0') {
rState6 = false;
digitalWrite(OUT_6, rState6);
} else {
rState6 = true;
digitalWrite(OUT_6, rState6);
}
}
if (strTopic == "Satel_Out/OUT_7") {
if ((char)payload[0] == '0') {
rState7 = false;
digitalWrite(OUT_7, rState7);
} else {
rState7 = true;
digitalWrite(OUT_7, rState7);
}
}
if (strTopic == "Satel_Out/OUT_8") {
if ((char)payload[0] == '0') {
rState8 = false;
digitalWrite(OUT_8, rState8);
} else {
rState8 = true;
digitalWrite(OUT_8, rState8);
}
}
}


void loop()
{
client.loop();
if (millis() - last_mls > 60000) //проверка подключений раз в 60 сек
{
last_mls = millis();
reconnect_server();
}
}


Попробовал ваш вариант - без изменений, все так же только 5 топиков
PI2 + MQTT + 5 ESP8266 + Atmega16
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: mqtt нужна помощь

Сообщение ZyaK » Вт ноя 28, 2017 7:15 am

УРААААА победил это китайское чудо!!!!
Шлет 14 топиков каждую секунду без единого пропуска! :D :D :D

Код: Выделить всё

void setup(){
Serial.begin(115200);
  client.setServer(mqtt_server, 1883);       //подключаемся к MQTT
  client.setCallback(callback);              //функция получения топиков с брокера
  delay(100);
  WiFi.begin(ssid, password);                //подключаемся к WiFi
  delay(6000);
  
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP()); 

  client.connect("ESP01Client");
  delay (100);//конектимся с брокером как клиент
  client.subscribe(relays_topic1);
  client.loop();
  client.subscribe(relays_topic2);
  client.loop();
  client.subscribe(relays_topic3);
  client.loop();
  client.subscribe(relays_topic4);
  client.loop();
  client.subscribe(relays_topic5);
  client.loop();
  client.subscribe(relays_topic6);
  client.loop();
  client.subscribe(relays_topic7);
  client.loop();
  client.subscribe(relays_topic8);
  client.loop();
  client.subscribe(relays_topic9);
  client.loop();
  client.subscribe(relays_topic10);
  client.loop();
  client.subscribe(relays_topic11);
  client.loop();
  client.subscribe(relays_topic12);
  client.loop();
  client.subscribe(relays_topic13);
  client.loop();
  client.subscribe(relays_topic14);
  client.loop();
  client.publish(relays_topic1, String(regim1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
  client.publish(relays_topic2, String(regim2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
  client.publish(relays_topic3, String(regim1).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
  client.publish(relays_topic4, String(regim2).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
  client.publish(relays_topic5, String(regim1).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
  client.publish(relays_topic6, String(regim2).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
  client.publish(relays_topic7, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.publish(relays_topic8, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
  client.publish(relays_topic9, String(regim2).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
  client.publish(relays_topic10, String(regim1).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
  client.publish(relays_topic11, String(regim2).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
  client.publish(relays_topic12, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.publish(relays_topic13, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
    client.publish(relays_topic14, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
}

Код: Выделить всё

void MQTT()                                   //публикуем топик с состоянием режима
{
  if (millis() - last_mls2 > 1000)            //периодичность публикации топика
  { last_mls2 = millis();
  client.publish(relays_topic1, String(regim1).c_str(), false); //публикуем изменение состояния выхода 1 на брокер
  client.loop();
  client.publish(relays_topic2, String(regim2).c_str(), false); //публикуем изменение состояния выхода 2 на брокер
  client.loop();
  client.publish(relays_topic3, String(regim1).c_str(), false); //публикуем изменение состояния выхода 3 на брокер
  client.loop();
  client.publish(relays_topic4, String(regim2).c_str(), false); //публикуем изменение состояния выхода 4 на брокер
  client.loop();
  client.publish(relays_topic5, String(regim1).c_str(), false); //публикуем изменение состояния выхода 5 на брокер
  client.loop();
  client.publish(relays_topic6, String(regim2).c_str(), false); //публикуем изменение состояния выхода 6 на брокер
  client.loop();
  client.publish(relays_topic7, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.loop();
  client.publish(relays_topic8, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
  client.loop();
   client.publish(relays_topic9, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.loop();
  client.publish(relays_topic10, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
  client.loop();
   client.publish(relays_topic11, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.loop();
  client.publish(relays_topic12, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
  client.loop();
   client.publish(relays_topic13, String(regim1).c_str(), false); //публикуем изменение состояния выхода 7 на брокер
  client.loop();
  client.publish(relays_topic14, String(regim2).c_str(), false); //публикуем изменение состояния выхода 8 на брокер
  client.loop();
  Serial.println("Отправка данных MQTT");
 }
}

Код: Выделить всё

void reconnect_server() //функция проверки подключения
{
  if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
  {
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
  } else {
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  }
  if(!client.connected() && WiFi.status() == WL_CONNECTED){ 
    if (client.connect("Satel_Out")) { 
    Serial.println("Mosquitto connect...");
    client.connect("ESP01Client");
    delay (100);//конектимся с брокером как клиент 
    client.subscribe(relays_topic1);
    client.loop();
    client.subscribe(relays_topic2);
    client.loop();
    client.subscribe(relays_topic3);
    client.loop();
    client.subscribe(relays_topic4);
    client.loop();
    client.subscribe(relays_topic5);
    client.loop();
    client.subscribe(relays_topic6);
    client.loop();
    client.subscribe(relays_topic7);
    client.loop();
    client.subscribe(relays_topic8);
    client.loop();
    client.subscribe(relays_topic9);
    client.loop();
    client.subscribe(relays_topic10);
    client.loop();
    client.subscribe(relays_topic11);
    client.loop();
    client.subscribe(relays_topic12);
    client.loop();
    client.subscribe(relays_topic13);
    client.loop();
    client.subscribe(relays_topic14);
    client.loop();
    //подписываемся на топики
    } else { 
    Serial.print("failed connect Mosquitto, rc=");
    Serial.print(client.state());
    Serial.println("");
  }
  }
}
Majordomo_14top.jpg
Majordomo_14top.jpg (195.52 КБ) 4815 просмотров
com_port_14_top.jpg
com_port_14_top.jpg (136.24 КБ) 4815 просмотров
PI2 + MQTT + 5 ESP8266 + Atmega16
Ответить