Доброго! Использую такой скетч (увы, не помню где взял): Код (C++): #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; byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xEE, 0xED }; byte server[] = { 10, 10, 10, 45 }; byte ip[] = { 10, 10, 10, 46 }; void callback(char* topic, byte* payload, unsigned int length) { int r,hl; char receivedChar = (char)payload[0]; 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 r = relay1; digitalWrite(r, hl); } EthernetClient ethClient; PubSubClient client(server, 1883, callback, ethClient); void reconnect() { while (!client.connected()) { if (client.connect("arduinoPowerPanel")) { delay(1); } else { delay(5000); } } } void setup() { delay(3000); 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); digitalWrite(relay1, HIGH); digitalWrite(relay2, HIGH); digitalWrite(relay3, HIGH); digitalWrite(relay4, HIGH); digitalWrite(relay5, HIGH); digitalWrite(relay6, HIGH); digitalWrite(relay7, HIGH); digitalWrite(relay8, HIGH); if (client.connect("arduinoPowerPanel")) { client.publish("PowerPanel/relay1", "0"); client.subscribe("PowerPanel/relay1"); client.publish("PowerPanel/relay2", "0"); client.subscribe("PowerPanel/relay2"); client.publish("PowerPanel/relay3", "0"); client.subscribe("PowerPanel/relay3"); client.publish("PowerPanel/relay4", "0"); client.subscribe("PowerPanel/relay4"); client.publish("PowerPanel/relay5", "0"); client.subscribe("PowerPanel/relay5"); client.publish("PowerPanel/relay6", "0"); client.subscribe("PowerPanel/relay6"); client.publish("PowerPanel/relay7", "0"); client.subscribe("PowerPanel/relay7"); client.publish("PowerPanel/relay8", "0"); client.subscribe("PowerPanel/relay8"); } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } Проблема следующая: Код работает, но при разрыве связи и зачастую без понятной мне причины работа прекращается. Ардуинка пингуется, на брокер приходят ответы о выполнении команды, но реле не переключаются. Гугл подсказывает что проблема с библиотекой PubSubClient, но решения я не нашел, а самому ума не хватает. Подскажите, пожалуйста.