Нужна помощь со скетчем для работы с MQTT

Здесь размещаем материалы по теме MQTT
bober777
Рядовой
Сообщения: 9
Зарегистрирован: 23.09.2015{, 03:11}
Репутация: 3

Нужна помощь со скетчем для работы с MQTT

#21

Сообщение bober777 » 10.01.2018{, 18:49}

Sancho писал(а):
10.01.2018{, 17:46}
на сколько я знаю, PubSubClient использует именно библиотеку Ethernet.
Вот тут вроде скетч говорит об обратном ...https://forum.arduino.cc/index.php?topic=375936.0

WZV
Сержант
Сообщения: 216
Зарегистрирован: 06.09.2015{, 14:31}
Репутация: 24

Нужна помощь со скетчем для работы с MQTT

#22

Сообщение WZV » 10.01.2018{, 21:06}

Может попробовать сначала W5500 запустить на каком нибудь уже рабочем скетче. А этот скетч проверить на W5100. Может прояснится, в какую сторону рыть надо.

bober777
Рядовой
Сообщения: 9
Зарегистрирован: 23.09.2015{, 03:11}
Репутация: 3

Нужна помощь со скетчем для работы с MQTT

#23

Сообщение bober777 » 10.01.2018{, 23:50}

может есть конкретное предложение по скетчу? давайте, попробую..

bober777
Рядовой
Сообщения: 9
Зарегистрирован: 23.09.2015{, 03:11}
Репутация: 3

Нужна помощь со скетчем для работы с MQTT

#24

Сообщение bober777 » 11.01.2018{, 16:58}

если строку 18

PubSubClient MQTTclient( 192,168,1,36 , 1883 , callback, ethClient);

переместить на строку 192, то ошибка исчезает, но тогда ругается на 398 строку

сам подправленный скетч
СпойлерПоказать
#include <PubSubClient.h>

#include <SPI.h>

#include <Ethernet2.h>

bool EN;
bool MQTT_receivedMessage=0; //Флаг получения сообщения
bool MQTT_PublishPost=0; // Флаг публиковать все Публикации
EthernetClient ethClient;
//byte ethernet_mac[] = {0x04, 0x61, 0x77, 0xE9, 0xC0, 0x02};
byte ethernet_mac[] = {0x78, 0xAC, 0xC0, 0xBB, 0xB0, 0x77};
IPAddress ethernet_ip(192,168,1,37);
byte ethernet_dns[] = { 192,168,1,1 };
byte ethernet_gateway[] = { 192,168,1,1 };
byte ethernet_subnet[] = { 255,255,255,0 };
void callback(char* topic, byte* payload, unsigned int length); // обяляение функции,

long lastReconnectAttempt= 0;
String MQTT_topictext; //Строка с топиком, с которого поступило сообщение
String MQTT_inputtext; //сообщение
const char *MQTTtext;
bool EN_186572787_5;
String Message_186572787_5;
bool New_186572787_5;
bool Send_57915906_5;
String Message_57915906_5;
bool lastSend_57915906_5=0;
bool Send_57915906_8;
String Message_57915906_8;
bool lastSend_57915906_8=0;
bool EN_186572787_1;
String Message_186572787_1;
bool New_186572787_1;
bool EN_186572787_2;
String Message_186572787_2;
bool New_186572787_2;
bool Send_57915906_1;
String Message_57915906_1;
bool lastSend_57915906_1=0;
bool EN_186572787_3;
String Message_186572787_3;
bool New_186572787_3;
bool Send_57915906_6;
String Message_57915906_6;
bool lastSend_57915906_6=0;
bool Send_57915906_7;
String Message_57915906_7;
bool lastSend_57915906_7=0;
bool Send_57915906_2;
String Message_57915906_2;
bool lastSend_57915906_2=0;
bool _gtv1 = 0;
bool _gtv2 = 0;
bool _gtv3 = 0;
bool _gtv4 = 0;
bool _bounseInputD8S = 0;
bool _bounseInputD8O = 0;
unsigned long _bounseInputD8P = 0UL;
String _swi2;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
String _swi1;
String _swi5;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _bounseInputD9S = 0;
bool _bounseInputD9O = 0;
unsigned long _bounseInputD9P = 0UL;
bool _bounseInputD6S = 0;
bool _bounseInputD6O = 0;
unsigned long _bounseInputD6P = 0UL;
bool _trgrt8 = 0;
bool _trgrt8I = 0;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _bounseInputD7S = 0;
bool _bounseInputD7O = 0;
unsigned long _bounseInputD7P = 0UL;
void setup()
{
pinMode(9, INPUT);
digitalWrite(9, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

_bounseInputD6O = digitalRead(6);
_bounseInputD7O = digitalRead(7);
_bounseInputD9O = digitalRead(9);
_bounseInputD8O = digitalRead(8);
Ethernet.begin(ethernet_mac, ethernet_ip, ethernet_dns, ethernet_gateway, ethernet_subnet);
delay(1000); //Задержка на запуск












}
void loop()
{
bool _bounceInputTmpD6 = (digitalRead (6));

if (_bounseInputD6S)
{
if (millis() >= (_bounseInputD6P + 40))
{_bounseInputD6O= _bounceInputTmpD6; _bounseInputD6S=0;}
}
else
{
if (_bounceInputTmpD6 != _bounseInputD6O )
{_bounseInputD6S=1; _bounseInputD6P = millis();}
}
bool _bounceInputTmpD7 = (digitalRead (7));

if (_bounseInputD7S)
{
if (millis() >= (_bounseInputD7P + 40))
{_bounseInputD7O= _bounceInputTmpD7; _bounseInputD7S=0;}
}
else
{
if (_bounceInputTmpD7 != _bounseInputD7O )
{_bounseInputD7S=1; _bounseInputD7P = millis();}
}
bool _bounceInputTmpD9 = (digitalRead (9));

if (_bounseInputD9S)
{
if (millis() >= (_bounseInputD9P + 40))
{_bounseInputD9O= _bounceInputTmpD9; _bounseInputD9S=0;}
}
else
{
if (_bounceInputTmpD9 != _bounseInputD9O )
{_bounseInputD9S=1; _bounseInputD9P = millis();}
}
bool _bounceInputTmpD8 = (digitalRead (8));

if (_bounseInputD8S)
{
if (millis() >= (_bounseInputD8P + 40))
{_bounseInputD8O= _bounceInputTmpD8; _bounseInputD8S=0;}
}
else
{
if (_bounceInputTmpD8 != _bounseInputD8O )
{_bounseInputD8S=1; _bounseInputD8P = millis();}
}




//Плата:1
//Наименование:Главный блок
EN = 1;
MQTT_PublishPost=0;
MQTT_receivedMessage=0;
if ( EN ){

if (!MQTTclient.connected()) { //Если нет сооедиения
long now = millis();
if (now - lastReconnectAttempt > 5000) { // ждем 5 секунд и пытаемся снова подключится
lastReconnectAttempt = now;
// Пересоедениется
if (reconnect()) { lastReconnectAttempt = 0; }
}
}
else {
// Соедиение установелно, проверка

MQTTclient.loop();
}



}

PubSubClient MQTTclient( 192,168,1,36 , 1883 , callback, ethClient);
//Плата:2
//Наименование:Подписка
EN_186572787_5 = 1;
New_186572787_5=0;
if(EN_186572787_5)
{
if (MQTT_PublishPost){
MQTTclient.subscribe("/test/Ljustra"); //Подписатся на топик
Serial.println("podpiska");//Тест
}

if(MQTT_receivedMessage){
if(MQTT_topictext == "/test/Ljustra" ){ //если пришло сообщение от топика
Message_186572787_5= MQTT_inputtext;
New_186572787_5 =1; // сигнал о обновлении данных
}
}
}
if (New_186572787_5) {
_gtv1 = ((Message_186572787_5).equals(String("1")));
}
if (!(_bounseInputD9O)) { if (_trgrt8I) { _trgrt8 = 0;} else {_trgrt8 = 1; _trgrt8I = 1;} } else {_trgrt8 = 0; _trgrt8I = 0;};
if(!(_gtv1))
{_swi1=String("1");}
else
{_swi1=String("0");}
Send_57915906_5 = _trgrt8;
Message_57915906_5 = _swi1;

if ( MQTT_PublishPost || (Send_57915906_5 && !lastSend_57915906_5) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_5.c_str();
MQTTclient.publish( "/ATMega1/Ljustra" , MQTTtext);
}
lastSend_57915906_5 = Send_57915906_5;
if (_trgrt8) {
_gtv1 = !(_gtv1);
}
digitalWrite(3, !(_gtv1));
EN_186572787_1 = 1;
New_186572787_1=0;
if(EN_186572787_1)
{
if (MQTT_PublishPost){
MQTTclient.subscribe("/ATMega1/Lenta spal'nja"); //Подписатся на топик
Serial.println("podpiska");//Тест
}

if(MQTT_receivedMessage){
if(MQTT_topictext == "/ATMega1/Lenta spal'nja" ){ //если пришло сообщение от топика
Message_186572787_1= MQTT_inputtext;
New_186572787_1 =1; // сигнал о обновлении данных
}
}
}
if (New_186572787_1) {
_gtv2 = ((Message_186572787_1).equals(String("1")));
}
if (!(_bounseInputD8O)) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;};
if (_trgrt6) {
_gtv2 = !(_gtv2);
}
if(!(_gtv2))
{_swi5=String("1");}
else
{_swi5=String("0");}
Send_57915906_8 = _trgrt6;
Message_57915906_8 = _swi5;

if ( MQTT_PublishPost || (Send_57915906_8 && !lastSend_57915906_8) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_8.c_str();
MQTTclient.publish( "/ATMega1/Lenta spal'nja" , MQTTtext);
}
lastSend_57915906_8 = Send_57915906_8;
digitalWrite(4, !(_gtv2));
EN_186572787_2 = 1;
New_186572787_2=0;
if(EN_186572787_2)
{
if (MQTT_PublishPost){
MQTTclient.subscribe("/ATMega1/Tochki spal'nja"); //Подписатся на топик
Serial.println("podpiska");//Тест
}

if(MQTT_receivedMessage){
if(MQTT_topictext == "/ATMega1/Tochki spal'nja" ){ //если пришло сообщение от топика
Message_186572787_2= MQTT_inputtext;
New_186572787_2 =1; // сигнал о обновлении данных
}
}
}
if (New_186572787_2) {
_gtv3 = ((Message_186572787_2).equals(String("1")));
}
if (!(_bounseInputD7O)) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if(!(_gtv3))
{_swi2=String("1");}
else
{_swi2=String("0");}
Send_57915906_1 = _trgrt2;
Message_57915906_1 = _swi2;

if ( MQTT_PublishPost || (Send_57915906_1 && !lastSend_57915906_1) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_1.c_str();
MQTTclient.publish( "/ATMega1/Tochki spal'nja" , MQTTtext);
}
lastSend_57915906_1 = Send_57915906_1;
if (_trgrt2) {
_gtv3 = !(_gtv3);
}
digitalWrite(5, !(_gtv3));

//Плата:3
//Наименование:ВЫКЛЮЧИТЬ ВСЁ
EN_186572787_3 = 1;
New_186572787_3=0;
if(EN_186572787_3)
{
if (MQTT_PublishPost){
MQTTclient.subscribe("/ATMega1/VYKLJuChIT'' VSJo"); //Подписатся на топик
Serial.println("podpiska");//Тест
}

if(MQTT_receivedMessage){
if(MQTT_topictext == "/ATMega1/VYKLJuChIT'' VSJo" ){ //если пришло сообщение от топика
Message_186572787_3= MQTT_inputtext;
New_186572787_3 =1; // сигнал о обновлении данных
}
}
}
if (( (New_186572787_3) || (!(_bounseInputD6O)) )) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
_gtv4 = _trgrt3;
if (_gtv4) {
_gtv1 = 0;
}
Send_57915906_6 = _gtv4;
Message_57915906_6 = String("0");

if ( MQTT_PublishPost || (Send_57915906_6 && !lastSend_57915906_6) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_6.c_str();
MQTTclient.publish( "/ATMega1/Ljustra" , MQTTtext);
}
lastSend_57915906_6 = Send_57915906_6;
if (_gtv4) {
_gtv2 = 0;
}
Send_57915906_7 = _gtv4;
Message_57915906_7 = String("0");

if ( MQTT_PublishPost || (Send_57915906_7 && !lastSend_57915906_7) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_7.c_str();
MQTTclient.publish( "/ATMega1/Lenta spal'nja" , MQTTtext);
}
lastSend_57915906_7 = Send_57915906_7;
if (_gtv4) {
_gtv3 = 0;
}
Send_57915906_2 = _gtv4;
Message_57915906_2 = String("0");

if ( MQTT_PublishPost || (Send_57915906_2 && !lastSend_57915906_2) )
{
// Serial.println("public");//Тест
MQTTtext = Message_57915906_2.c_str();
MQTTclient.publish( "/ATMega1/Tochki spal'nja" , MQTTtext);
}
lastSend_57915906_2 = Send_57915906_2;




}
void callback(char* topic, byte* payload, unsigned int length)
{
MQTT_topictext = String(topic); // присваиваем переменной название топика к которому подписались
MQTT_inputtext="";
// Serial.println("obrabot");//Тест

for (int i=0;i<length;i++) {
MQTT_inputtext += (char)payload; // составляем строку из байтов, которая пришла в параметрах топика
}
// Serial.println(MQTT_inputtext ); //Тест
MQTT_receivedMessage=1;

}
boolean reconnect()
{
// Serial.println("recon"); //Тест
bool connectedPerformed;
if ( 1)connectedPerformed=MQTTclient.connect( "arduinoClient" , "bobermqtt", "mustang777");
else connectedPerformed=MQTTclient.connect( "arduinoClient" );

if (connectedPerformed) {
MQTT_PublishPost=1;
//Serial.println("post"); //Тест
}
return MQTTclient.connected();

}

bober777
Рядовой
Сообщения: 9
Зарегистрирован: 23.09.2015{, 03:11}
Репутация: 3

Нужна помощь со скетчем для работы с MQTT

#25

Сообщение bober777 » 11.01.2018{, 17:02}

WZV писал(а):
10.01.2018{, 21:06}
А этот скетч проверить на W5100
нет у меня такой :unsure:

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

Нужна помощь со скетчем для работы с MQTT

#26

Сообщение fsergei70 » 03.07.2018{, 12:21}

На старом форуме нашел блоки для работы с MQTT Как переделать блок чтоб на ESP работало?
Вложения
mqtt_new1.4 (CODE).ubi
(331.59 КБ) 85 скачиваний
mqtt_new1.5 (CODE).ubi
(379.34 КБ) 80 скачиваний

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Нужна помощь со скетчем для работы с MQTT

#27

Сообщение starshoy81 » 03.07.2018{, 14:48}

fsergei70, переделайте по примеру для ЕСП из библиотеки PubSubClient, установленной в IDE.

slon-genia
Сержант
Сообщения: 102
Зарегистрирован: 21.11.2016{, 11:05}
Репутация: 2

Нужна помощь со скетчем для работы с MQTT

#28

Сообщение slon-genia » 03.07.2018{, 22:32}

fsergei70 писал(а):
03.07.2018{, 12:21}
На старом форуме нашел блоки для работы с MQTT Как переделать блок чтоб на ESP работало?
Прошейте свой ESP прошивкой ESP-Link . Там есть поддержка MQTT. Блоки для подписки и публикации на брокере для ардуино есть на этом форуме.
http://forum.flprog.ru/viewtopic.php?f=49&t=2564
У меня работает без нареканий.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Нужна помощь со скетчем для работы с MQTT

#29

Сообщение CraCk » 03.07.2018{, 23:18}

fsergei70 писал(а):
03.07.2018{, 12:21}
На старом форуме нашел блоки для работы с MQTT Как переделать блок чтоб на ESP работало?
http://forum.flprog.ru/viewtopic.php?p=26555#p26555

Отправлено спустя 33 минуты 13 секунд:
slon-genia писал(а):
03.07.2018{, 22:32}
Прошейте свой ESP прошивкой ESP-Link . Там есть поддержка MQTT. Блоки для подписки и публикации на брокере для ардуино есть на этом форуме.
Это уже прошлый век. Теперь esp без ардуины можно запускать. Осталось mqtt допилить для esp.

Ответить

Вернуться в «MQTT»