Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение nick7zmail » Пн дек 17, 2018 7:18 am

Я чуть чуть "бум бум")) Можно ссылочку на инфу?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Bzdenchik
Сообщения: 9
Зарегистрирован: Вт ноя 20, 2018 11:11 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение Bzdenchik » Чт дек 20, 2018 9:11 am

vovankin
Сообщения: 20
Зарегистрирован: Пн окт 22, 2018 5:30 pm
Откуда: Сургут
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение vovankin » Пт дек 21, 2018 7:23 pm

woow писал(а):
Пн дек 10, 2018 5:32 pm
этот скечь "растянул" до 16 реле на Arduino Nano с W5100, но увы не получилось с двумя выводами D0 и D1 (иначе как Rx и Tx), скечь другой эти выводы рабочие как и все цифровые, а как только загружаю этот сразу же и отключаются, скорей всего какая то библиотека использует эти регистры, ну тогда управлять можно и 14 реле.
И есть ещё проблема при первом запуске почему-то не отрабатываются команды и на сериал мониторе они не видны, после двух -трёх нажатий начинает работать, дальше без глюков, но всё ровно так не годится MQTT команда отослана а результата нет, может кто профессиональном взглядом видит эту проблему.
тут укороченный скечь на одну реле для рассмотрения и наглядности:
СпойлерПоказать

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

/*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>  

const int relay1 = 2; 

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 123 };
byte ip[]     = { 192, 168, 1, 32 };

void callback(char* topic, byte* payload, unsigned int length) 
{
  int r,hl;
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
////****///
  char receivedChar = (char)payload[0];
  Serial.print(receivedChar);
  if(receivedChar=='1')
    hl = LOW;
    else
    hl = HIGH;  
       if(String(topic)=="PowerPanel/relay1")
    r = relay1;
	//back;
   
  digitalWrite(r, hl); 
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

void reconnect() 
{
 // Loop until we're reconnected
  while (!client.connected()) 
 {
    Serial.println("Attempting MQTT connection...");
 // Attempt to connect
    if (client.connect("arduinoPowerPanel")) 
        {
        Serial.println("connected");
        }
        else 
        {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
  }
}

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  
  pinMode(relay1, OUTPUT);
 
  
  if (client.connect("arduinoPowerPanel")) 
   {
    Serial.print("online");
    client.publish("PowerPanel/relay1", "1");
    client.subscribe("PowerPanel/relay1");
    	   }
}

void loop()
{
   if (!client.connected()) 
      {
       reconnect();
      }
  client.loop();
}

здесь полный скечь:
СпойлерПоказать

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

/*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>  

const int relay1 = 0; // This output not working properly, why , i don't know :(
const int relay2 = 1; // This output not working properly, why , i don't know :(
const int relay3 = 2;
const int relay4 = 3;
const int relay5 = 4;
const int relay6 = 5;
const int relay7 = 6;
const int relay8 = 7;
const int relay9 = 8;
const int relay10 = 9;
const int relay11 = A0;
const int relay12 = A1;
const int relay13 = A2;
const int relay14 = A3;
const int relay15 = A4;
const int relay16 = A5;

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 123 };
byte ip[]     = { 192, 168, 1, 32 };

void callback(char* topic, byte* payload, unsigned int length) 
{
  int r,hl;
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
////****///
  char receivedChar = (char)payload[0];
  Serial.print(receivedChar);
  if(receivedChar=='1')
    hl = LOW;
    else
    hl = HIGH;  
       if(String(topic)=="PowerPanel/relay1")
    r = relay1;
  else if(String(topic)=="PowerPanel/relay2")
    r = relay2;
  else if(String(topic)=="PowerPanel/relay3")
    r = relay3;
  else if(String(topic)=="PowerPanel/relay4")
    r = relay4;
  else if(String(topic)=="PowerPanel/relay5")
    r = relay5;
  else if(String(topic)=="PowerPanel/relay6")
    r = relay6;
  else if(String(topic)=="PowerPanel/relay7")
    r = relay7;
  else if(String(topic)=="PowerPanel/relay8")
    r = relay8;
  else if(String(topic)=="PowerPanel/relay9")
    r = relay9;
  else if(String(topic)=="PowerPanel/relay10")
    r = relay10;
  else if(String(topic)=="PowerPanel/relay11")
    r = relay11;
  else if(String(topic)=="PowerPanel/relay12")
    r = relay12;
  else if(String(topic)=="PowerPanel/relay13")
    r = relay13;
  else if(String(topic)=="PowerPanel/relay14")
    r = relay14;
  else if(String(topic)=="PowerPanel/relay15")
    r = relay15;
  else if(String(topic)=="PowerPanel/relay16")
    r = relay16;
  else
    r = relay1;
	//back;
   
  digitalWrite(r, hl); 
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

void reconnect() 
{
 // Loop until we're reconnected
  while (!client.connected()) 
 {
    Serial.println("Attempting MQTT connection...");
 // Attempt to connect
    if (client.connect("arduinoPowerPanel")) 
        {
        Serial.println("connected");
        }
        else 
        {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
  }
}

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  pinMode(relay5, OUTPUT);
  pinMode(relay6, OUTPUT);
  pinMode(relay7, OUTPUT);
  pinMode(relay8, OUTPUT);
  pinMode(relay9, OUTPUT);
  pinMode(relay10, OUTPUT);
  pinMode(relay11, OUTPUT);
  pinMode(relay12, OUTPUT);
  pinMode(relay13, OUTPUT);
  pinMode(relay14, OUTPUT);
  pinMode(relay15, OUTPUT);
  pinMode(relay16, OUTPUT);    
  
  if (client.connect("arduinoPowerPanel")) 
   {
    Serial.print("online");
    client.publish("PowerPanel/relay1", "1");
    client.subscribe("PowerPanel/relay1");
    client.publish("PowerPanel/relay2", "1");
    client.subscribe("PowerPanel/relay2");
    client.publish("PowerPanel/relay3", "1");
    client.subscribe("PowerPanel/relay3");
    client.publish("PowerPanel/relay4", "1");
    client.subscribe("PowerPanel/relay4");
    client.publish("PowerPanel/relay5", "1");
    client.subscribe("PowerPanel/relay5");
    client.publish("PowerPanel/relay6", "1");
    client.subscribe("PowerPanel/relay6");
    client.publish("PowerPanel/relay7", "1");
    client.subscribe("PowerPanel/relay7");
    client.publish("PowerPanel/relay8", "1");
    client.subscribe("PowerPanel/relay8");
    client.publish("PowerPanel/relay9", "1");
    client.subscribe("PowerPanel/relay9");
    client.publish("PowerPanel/relay10", "1");
    client.subscribe("PowerPanel/relay10");
    client.publish("PowerPanel/relay11", "1");
    client.subscribe("PowerPanel/relay11");
    client.publish("PowerPanel/relay12", "1");
    client.subscribe("PowerPanel/relay12");
    client.publish("PowerPanel/relay13", "1");
    client.subscribe("PowerPanel/relay13");
    client.publish("PowerPanel/relay14", "1");
    client.subscribe("PowerPanel/relay14");
    client.publish("PowerPanel/relay15", "1");
    client.subscribe("PowerPanel/relay15");
    client.publish("PowerPanel/relay16", "1");
    client.subscribe("PowerPanel/relay16");	
	   }
}

void loop()
{
   if (!client.connected()) 
      {
       reconnect();
      }
  client.loop();
}

Вот уж спасибо, сбасибо, спасибо. :!: :!: :!: :!:
Наконец то, я нашел работающий скейч для управления релюшками по протоколу MQTT, через плату 5100.
Почему то другие какие находил, то не компилились, то не работали. А ваш прям сразу скмпилился и заработал.
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение woow » Пт дек 21, 2018 9:48 pm

Здесь есть функция relayAll on/off соответственно если посылаешь 1 или 0 по MQTT. Но работает криво то что после этой команды реле все срабатывают и переходят в состояние соответствующей команде, но их свойства на МД сервере не меняются. Можно конечно в МД через метод свойство менять при изменении состояния если relayAll 1 то на все реле ставим 1 иначе 0, но это не правильно, должно всё в ардуинке меняться, но по ка не получается. Этот скечь на Arduino Nano можно сделать на 16 реле.
СпойлерПоказать

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

/*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

const int relay1 = 2;
const int relay2 = 3;
const int relay3 = 4;
const int relay4 = 5;
const int relay5 = 6;
const int relay6 = 7;
const int relay7 = 8;
const int relay8 = 9;

int relayAll[] = { 2, 3, 4, 5, 6, 7, 8, 9 };    
int pinCount = 9;                                     

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 140 };
byte ip[]     = { 192, 168, 1, 132 };

void callback(char* topic, byte* payload, unsigned int length){
  
  int r,hl;
  Serial.print("  Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  
////****///

  char receivedChar = (char)payload[0];
  Serial.print(receivedChar);
  if(receivedChar=='1')
    hl = LOW;
    else
    hl = HIGH;  
       if(String(topic)=="PowerPanel/relay1")
    r = relay1;
  else if(String(topic)=="PowerPanel/relay2")
    r = relay2;
  else if(String(topic)=="PowerPanel/relay3")
    r = relay3;
  else if(String(topic)=="PowerPanel/relay4")
    r = relay4;
  else if(String(topic)=="PowerPanel/relay5")
    r = relay5;
  else if(String(topic)=="PowerPanel/relay6")
    r = relay6;
  else if(String(topic)=="PowerPanel/relay7")
    r = relay7;
  else if(String(topic)=="PowerPanel/relay8")
    r = relay8;
  else if(String(topic)=="PowerPanel/relayAll")     
   r = 255;                                
  else
   r = relay1;

if (r == 255)
  for (byte i = 0; i < pinCount - 1; i++)
    digitalWrite(relayAll[i], hl);
else
  digitalWrite(r, hl);
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

void reconnect(){
  
 // Loop until we're reconnected
  while (!client.connected()) 
 {
    Serial.println(" Attempting MQTT connection...");
 // Attempt to connect
    if (client.connect("arduinoPowerPanel")) 
        {
        Serial.println("connected");
        }
        else 
        {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }    
  }
}

void setup(){
  
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  pinMode(relay5, OUTPUT);
  pinMode(relay6, OUTPUT);
  pinMode(relay7, OUTPUT);
  pinMode(relay8, OUTPUT);
  
  if (client.connect("arduinoPowerPanel")) {
    
    Serial.print("online");
    client.publish("PowerPanel/relay1", "1");
    client.subscribe("PowerPanel/relay1");
    client.publish("PowerPanel/relay2", "1");
    client.subscribe("PowerPanel/relay2");
    client.publish("PowerPanel/relay3", "1");
    client.subscribe("PowerPanel/relay3");
    client.publish("PowerPanel/relay4", "1");
    client.subscribe("PowerPanel/relay4");
    client.publish("PowerPanel/relay5", "1");
    client.subscribe("PowerPanel/relay5");
    client.publish("PowerPanel/relay6", "1");
    client.subscribe("PowerPanel/relay6");
    client.publish("PowerPanel/relay7", "1");
    client.subscribe("PowerPanel/relay7");
    client.publish("PowerPanel/relay8", "1");
    client.subscribe("PowerPanel/relay8");
    client.publish("PowerPanel/relayAll", "1");
    client.subscribe("PowerPanel/relayAll");
    
    }
  }

void loop(){
  
   if (!client.connected()) 
      {
       reconnect();
      }
  client.loop();
}
Raspberry Pi 3B+
Аватара пользователя
Bzdenchik
Сообщения: 9
Зарегистрирован: Вт ноя 20, 2018 11:11 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение Bzdenchik » Чт дек 27, 2018 3:34 pm

Отпишитесь кто использует данное решение? Тоже зависает?
Если нет, то какие конкретно платы используете?
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение woow » Чт дек 27, 2018 4:24 pm

Вопрос про что? ESP8266 или W5100+Arduino?
Raspberry Pi 3B+
Аватара пользователя
Bzdenchik
Сообщения: 9
Зарегистрирован: Вт ноя 20, 2018 11:11 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение Bzdenchik » Чт дек 27, 2018 5:28 pm

У меня nano от RobotDyn сетевухи w5500 и w5100. Зависает раз в сутки точно, бывает и чаще.
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение FredP » Чт фев 14, 2019 11:03 am

У меня если больше 76% памяти на UNO используется то MQTT зависает. Сократил длину текстовых адресов подписок - все работает стабильно теперь.
Devil_Blood
Сообщения: 6
Зарегистрирован: Пн фев 04, 2019 10:35 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение Devil_Blood » Сб фев 16, 2019 10:56 pm

vovankin писал(а):
Пт дек 21, 2018 7:23 pm
woow писал(а):
Пн дек 10, 2018 5:32 pm
этот скечь "растянул" до 16 реле на Arduino Nano с W5100, но увы не получилось с двумя выводами D0 и D1 (иначе как Rx и Tx), скечь другой эти выводы рабочие как и все цифровые, а как только загружаю этот сразу же и отключаются, скорей всего какая то библиотека использует эти регистры, ну тогда управлять можно и 14 реле.
И есть ещё проблема при первом запуске почему-то не отрабатываются команды и на сериал мониторе они не видны, после двух -трёх нажатий начинает работать, дальше без глюков, но всё ровно так не годится MQTT команда отослана а результата нет, может кто профессиональном взглядом видит эту проблему.
тут укороченный скечь на одну реле для рассмотрения и наглядности:
СпойлерПоказать

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

/*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>  

const int relay1 = 2; 

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 123 };
byte ip[]     = { 192, 168, 1, 32 };

void callback(char* topic, byte* payload, unsigned int length) 
{
  int r,hl;
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
////****///
  char receivedChar = (char)payload[0];
  Serial.print(receivedChar);
  if(receivedChar=='1')
    hl = LOW;
    else
    hl = HIGH;  
       if(String(topic)=="PowerPanel/relay1")
    r = relay1;
	//back;
   
  digitalWrite(r, hl); 
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

void reconnect() 
{
 // Loop until we're reconnected
  while (!client.connected()) 
 {
    Serial.println("Attempting MQTT connection...");
 // Attempt to connect
    if (client.connect("arduinoPowerPanel")) 
        {
        Serial.println("connected");
        }
        else 
        {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
  }
}

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  
  pinMode(relay1, OUTPUT);
 
  
  if (client.connect("arduinoPowerPanel")) 
   {
    Serial.print("online");
    client.publish("PowerPanel/relay1", "1");
    client.subscribe("PowerPanel/relay1");
    	   }
}

void loop()
{
   if (!client.connected()) 
      {
       reconnect();
      }
  client.loop();
}

здесь полный скечь:
СпойлерПоказать

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

/*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>  

const int relay1 = 0; // This output not working properly, why , i don't know :(
const int relay2 = 1; // This output not working properly, why , i don't know :(
const int relay3 = 2;
const int relay4 = 3;
const int relay5 = 4;
const int relay6 = 5;
const int relay7 = 6;
const int relay8 = 7;
const int relay9 = 8;
const int relay10 = 9;
const int relay11 = A0;
const int relay12 = A1;
const int relay13 = A2;
const int relay14 = A3;
const int relay15 = A4;
const int relay16 = A5;

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 1, 123 };
byte ip[]     = { 192, 168, 1, 32 };

void callback(char* topic, byte* payload, unsigned int length) 
{
  int r,hl;
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
////****///
  char receivedChar = (char)payload[0];
  Serial.print(receivedChar);
  if(receivedChar=='1')
    hl = LOW;
    else
    hl = HIGH;  
       if(String(topic)=="PowerPanel/relay1")
    r = relay1;
  else if(String(topic)=="PowerPanel/relay2")
    r = relay2;
  else if(String(topic)=="PowerPanel/relay3")
    r = relay3;
  else if(String(topic)=="PowerPanel/relay4")
    r = relay4;
  else if(String(topic)=="PowerPanel/relay5")
    r = relay5;
  else if(String(topic)=="PowerPanel/relay6")
    r = relay6;
  else if(String(topic)=="PowerPanel/relay7")
    r = relay7;
  else if(String(topic)=="PowerPanel/relay8")
    r = relay8;
  else if(String(topic)=="PowerPanel/relay9")
    r = relay9;
  else if(String(topic)=="PowerPanel/relay10")
    r = relay10;
  else if(String(topic)=="PowerPanel/relay11")
    r = relay11;
  else if(String(topic)=="PowerPanel/relay12")
    r = relay12;
  else if(String(topic)=="PowerPanel/relay13")
    r = relay13;
  else if(String(topic)=="PowerPanel/relay14")
    r = relay14;
  else if(String(topic)=="PowerPanel/relay15")
    r = relay15;
  else if(String(topic)=="PowerPanel/relay16")
    r = relay16;
  else
    r = relay1;
	//back;
   
  digitalWrite(r, hl); 
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

void reconnect() 
{
 // Loop until we're reconnected
  while (!client.connected()) 
 {
    Serial.println("Attempting MQTT connection...");
 // Attempt to connect
    if (client.connect("arduinoPowerPanel")) 
        {
        Serial.println("connected");
        }
        else 
        {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
  }
}

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  pinMode(relay5, OUTPUT);
  pinMode(relay6, OUTPUT);
  pinMode(relay7, OUTPUT);
  pinMode(relay8, OUTPUT);
  pinMode(relay9, OUTPUT);
  pinMode(relay10, OUTPUT);
  pinMode(relay11, OUTPUT);
  pinMode(relay12, OUTPUT);
  pinMode(relay13, OUTPUT);
  pinMode(relay14, OUTPUT);
  pinMode(relay15, OUTPUT);
  pinMode(relay16, OUTPUT);    
  
  if (client.connect("arduinoPowerPanel")) 
   {
    Serial.print("online");
    client.publish("PowerPanel/relay1", "1");
    client.subscribe("PowerPanel/relay1");
    client.publish("PowerPanel/relay2", "1");
    client.subscribe("PowerPanel/relay2");
    client.publish("PowerPanel/relay3", "1");
    client.subscribe("PowerPanel/relay3");
    client.publish("PowerPanel/relay4", "1");
    client.subscribe("PowerPanel/relay4");
    client.publish("PowerPanel/relay5", "1");
    client.subscribe("PowerPanel/relay5");
    client.publish("PowerPanel/relay6", "1");
    client.subscribe("PowerPanel/relay6");
    client.publish("PowerPanel/relay7", "1");
    client.subscribe("PowerPanel/relay7");
    client.publish("PowerPanel/relay8", "1");
    client.subscribe("PowerPanel/relay8");
    client.publish("PowerPanel/relay9", "1");
    client.subscribe("PowerPanel/relay9");
    client.publish("PowerPanel/relay10", "1");
    client.subscribe("PowerPanel/relay10");
    client.publish("PowerPanel/relay11", "1");
    client.subscribe("PowerPanel/relay11");
    client.publish("PowerPanel/relay12", "1");
    client.subscribe("PowerPanel/relay12");
    client.publish("PowerPanel/relay13", "1");
    client.subscribe("PowerPanel/relay13");
    client.publish("PowerPanel/relay14", "1");
    client.subscribe("PowerPanel/relay14");
    client.publish("PowerPanel/relay15", "1");
    client.subscribe("PowerPanel/relay15");
    client.publish("PowerPanel/relay16", "1");
    client.subscribe("PowerPanel/relay16");	
	   }
}

void loop()
{
   if (!client.connected()) 
      {
       reconnect();
      }
  client.loop();
}
Вот уж спасибо, сбасибо, спасибо. :!: :!: :!: :!:
Наконец то, я нашел работающий скейч для управления релюшками по протоколу MQTT, через плату 5100.
Почему то другие какие находил, то не компилились, то не работали. А ваш прям сразу скмпилился и заработал.
А не подскажите как к этому скетчу подвязать кнопки? Скажем я хочу скетч сделать на 8 реле и к каждой реле отдельную физ. кнопку, что бы можно бло управлять релюшками как по mqtt так и кнопкой
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение woow » Пн фев 18, 2019 12:30 pm

Devil_Blood писал(а):
Сб фев 16, 2019 10:56 pm
А не подскажите как к этому скетчу подвязать кнопки? Скажем я хочу скетч сделать на 8 реле и к каждой реле отдельную физ. кнопку, что бы можно бло управлять релюшками как по mqtt так и кнопкой
Если хотите можете попробовать этот скеч. С разу предупреждаю, что он с дефектами, надо шлифовать, а я не могу найти ошибки.
Они такого рода:
1. при подключении не отсылается ни какая команда то-есть он не видим, надо разбудить нажатием кнопки или командой из сервера
2. MQTT сервер получает сразу две публикации, но "работает" в дальнейшем только одна (можно это игнорировать, жить не мешает :) );
3. не сделал пока команду all-off, all-on (иногда нужно, практично) (можно это игнорировать, жить не мешает :) );

В остальном тестируйте, меняйте, может что-то и лучше этого получится сообща.
СпойлерПоказать

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

/*
   arduino-nano
  W5100   pins 10,11,12,13
  Relay      pins 2,3,4,5
  Buttons pins 6,7,8,9
*/

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <Bounce2.h>

int led1 = 2;
int led2 = 3;
int led3 = 4;                           
int led4 = 5;

int button1 = 6;
int button2 = 7;
int button3 = 8;
int button4 = 9;                        

int led1Value = LOW;             
int led2Value = LOW;
int led3Value = LOW;
int led4Value = LOW;

// Arduino MAC address is on a sticker on your Ethernet shield

byte mac[]    = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE };  

// Unique static IP address of this Arduino - change to adapt to your network
IPAddress ip(192,168,1,138);

// IP Address of your MQTT broker - change to adapt to your network
byte server[] = { 192, 168, 1, 140 };

// Handle and convert incoming MQTT messages

void callback(char* topic, byte* payload, unsigned int length) {
  // handle message arrived
  String content="";
  char character;
  for (int num=0;num<length;num++) {
      character = payload[num];
      content.concat(character);
  }   
  Serial.print(topic);
  Serial.println(content); 

// Set specific virtual switches on basis of specific incoming messages 
  
  if ((topic == "led_1")&&(content == "on")) {
    led1Value = HIGH;
  }
  
  if ((topic == "led_1")&&(content == "off")) {
    led1Value = LOW;
  }
  
  if ((topic == "led_2")&&(content == "on")) {
    led2Value = HIGH;
  }
  
  if ((topic == "led_2")&&(content == "off")) {
    led2Value = LOW;
  }
  
  if ((topic == "led_3")&&(content == "on")) {
    led3Value = HIGH;
  }
  
  if ((topic == "led_3")&&(content == "off")) {
    led3Value = LOW;
  }
  
  if ((topic == "led_4")&&(content == "on")) {
    led4Value = HIGH;
  }
  
  if ((topic == "led_4")&&(content == "off")) {
    led4Value = LOW;
  }
    
  // Set digital pin states according to virtual switch settings
    
  digitalWrite(led1,led1Value);
  digitalWrite(led2,led2Value);
  digitalWrite(led3,led3Value);
  digitalWrite(led4,led4Value);
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

// Initiate a bouncer instance for each button
Bounce bouncer1 = Bounce();
Bounce bouncer2 = Bounce();
Bounce bouncer3 = Bounce();
Bounce bouncer4 = Bounce();

void setup(){

  led1Value = LOW;
  led2Value = LOW;
  led3Value = LOW;
  led4Value = LOW;
  
  // setup led, button, bouncer 1
  pinMode(led1, OUTPUT);
  pinMode(button1,INPUT);
  digitalWrite(button1,HIGH);
  bouncer1 .attach(button1);
  bouncer1 .interval(5);

  // setup led, button, bouncer 2
  pinMode(led2, OUTPUT);
  pinMode(button2,INPUT);
  digitalWrite(button2,HIGH);
  bouncer2 .attach(button2);
  bouncer2 .interval(5);

  // setup led, button, bouncer 3 
  pinMode(led3, OUTPUT);
  pinMode(button3,INPUT);
  digitalWrite(button3,HIGH);
  bouncer3 .attach(button3);
  bouncer3 .interval(5);

  // setup led, button, bouncer 4 
  pinMode(led4, OUTPUT);
  pinMode(button4,INPUT);
  digitalWrite(button4,HIGH);
  bouncer4 .attach(button4);
  bouncer4 .interval(5);

  // Setup serial connection
  Serial.begin(9600);

  // Setup ethernet connection to MQTT broker
  Ethernet.begin(mac);
  if (client.connect("arduino-switchgear")) {  				
    Serial.println("connected");
    client.subscribe("led_1");
    client.subscribe("led_2");
    client.subscribe("led_3");
    client.subscribe("led_4");    
  }
}

void loop(){

// Listen for button interactions and take actions --

  if (bouncer1.update()) {
    if (bouncer1.read() == HIGH) {
      if (led1Value == LOW) {
        led1Value = HIGH;
        client.publish("led_1","on");								
      } else {
        led1Value = LOW;
        client.publish("led_1","off");
      }
    }
  }
  
  if (bouncer2.update()) {
    if (bouncer2.read() == HIGH) {
      if (led2Value == LOW) {
        led2Value = HIGH;
        client.publish("led_2","on");
      } else {
        led2Value = LOW;
        client.publish("led_2","off");
      }
    }
  }  
 
  if (bouncer3.update()) {
    if (bouncer3.read() == HIGH) {
      if (led3Value == LOW) {
        led3Value = HIGH;
        client.publish("led_3","on");
      } else {
        led3Value = LOW;
        client.publish("led_3","off");
      }
    }
  }  
  
  if (bouncer4.update()) {
    if (bouncer4.read() == HIGH) {
      if (led4Value == LOW) {
        led4Value = HIGH;
        client.publish("led_4","on");
      } else {
        led4Value = LOW;
        client.publish("led_4","off");
      }
    }
  }  
  
  client.loop();
  }
Raspberry Pi 3B+
Ответить