Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Добавлено: Пн мар 12, 2018 11:41 am
Ох...чтож вы делаете то...существуют же циклы...for, while...зачем каждое реле то отдельно инициализировать...
Обсуждение проекта
https://mjdm.ru/forum/
Код: Выделить всё
*
connect to mqtt server, send and recive
Arduino Nano
W5100
HL-58S
*/
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
//#include <EEPROM.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;
const 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();
}
Подобных под ESP8266 с MQTT решений множество и здесь тема как раз не о ESP8266, поскольку вся изюминка в том что это проводной вариант, ненужна WiFi сеть и все исходящие из этого проблемы и последствие.Amarok писал(а):А этот скетч под esp8266+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();
}