ничо уже не понимаю
антивир по вашей ссылке ругается
Logrus писал(а):https://it4it.club/topic/55-meteostanci ... it4itclub/
первый пост, первый абзац (под фото)
Модератор: immortal
Logrus писал(а):https://it4it.club/topic/55-meteostanci ... it4itclub/
первый пост, первый абзац (под фото)
работает, но всего 5 топиковscorp49 писал(а):Попробуй в место этого
client.subscribe("ESP01/#"); //подписываемся на топики
у меня такая же проблема была. Так всё заработало.
Код: Выделить всё
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");
}
}
Да, первое при первоначальном подключении, второе при реконекте, так же всего 5 топиков, но хотя бы подключается, когда жестко были прописаны топики, она вообще к MQTT не подключаласьscorp49 писал(а):вы в двух местах поправили?
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();
}
}
Код: Выделить всё
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("");
}
}
}