Как проходной переключатель сделать умным?
Модератор: immortal
-
- Сообщения: 31
- Зарегистрирован: Пт сен 04, 2020 10:30 am
- Благодарил (а): 35 раз
- Поблагодарили: 0
Как проходной переключатель сделать умным?
Как существующие проходные переключатели сделать умными?
Добрый день, коллеги.
Дано:
Коридор с четыремя переключателями длиной 12 метров. В нем четыре переключателя. Два трехконтактных и два перекрестных. Паралельно проведена линия нуля для работы светильников на всем протяжении коридора.
Хочу сделать умным данную линию.
Ремонт сделан и всю проводку менять нецелесообразно.
Первое что приходит в голову: Поставить китайское реле с фиксацией (импульсное, бистабильное) вместо концевого (трехконтактного) переключателя. В этом случае добавляем ESP, блок питания, вместо переключателя ставлю кнопку без фиксации. Все это не помещается в стандартный подрозетник. Есть возможность разместить это под потолок.
Возникают вопросы:
1. Линию к выключателю приходится тянуть около 2 (двух) метров.
2. Сигнал управляющий от ESP 3.3v будет затухать на линии 2м? Какие есть решения?
3. Как узнать текущее состояние света?
Знаю о существовании Sonoff mini, в который можно завести кабель от проходных переключателей. В принципе наверно можно использовать этот способ, НО: Паралельно ( в той же оплетке) идет питание 220в, что скорее всего породит наводки на управляющую линию. Склоняюсь к тому, что это нежизнеспособный вариант.
Вопрос:
4. Есть пути решения?
Ну и самые главные вопросы к гуру:
5. Может есть готовые умные ПЕРЕКЛЮЧАТЕЛИ (которые можно скомбинровать с механическим прохзодным переключателем) с индикацией текущего состояния нагрузки (без разницы напряжения или тока)?
6. Вероятно я не вижу простого решения. Может есть DIY решения?
Добрый день, коллеги.
Дано:
Коридор с четыремя переключателями длиной 12 метров. В нем четыре переключателя. Два трехконтактных и два перекрестных. Паралельно проведена линия нуля для работы светильников на всем протяжении коридора.
Хочу сделать умным данную линию.
Ремонт сделан и всю проводку менять нецелесообразно.
Первое что приходит в голову: Поставить китайское реле с фиксацией (импульсное, бистабильное) вместо концевого (трехконтактного) переключателя. В этом случае добавляем ESP, блок питания, вместо переключателя ставлю кнопку без фиксации. Все это не помещается в стандартный подрозетник. Есть возможность разместить это под потолок.
Возникают вопросы:
1. Линию к выключателю приходится тянуть около 2 (двух) метров.
2. Сигнал управляющий от ESP 3.3v будет затухать на линии 2м? Какие есть решения?
3. Как узнать текущее состояние света?
Знаю о существовании Sonoff mini, в который можно завести кабель от проходных переключателей. В принципе наверно можно использовать этот способ, НО: Паралельно ( в той же оплетке) идет питание 220в, что скорее всего породит наводки на управляющую линию. Склоняюсь к тому, что это нежизнеспособный вариант.
Вопрос:
4. Есть пути решения?
Ну и самые главные вопросы к гуру:
5. Может есть готовые умные ПЕРЕКЛЮЧАТЕЛИ (которые можно скомбинровать с механическим прохзодным переключателем) с индикацией текущего состояния нагрузки (без разницы напряжения или тока)?
6. Вероятно я не вижу простого решения. Может есть DIY решения?
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Как проходной переключатель сделать умным?
Сигнал затухать не будет если правильно организовывать схему. Должна быть Токовая Петля, управлять ЕСПи надо не 3.3 вольта а массой, тогда никаких проблем не будет. У меня в доме ЕСПи и релейные модули живут в щитке, самое большое расстояние от выключателя до ЕСПи 15 метров ничего не затухает и работает стабильно, токовая петля исключает возникновение помех.
- Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Как проходной переключатель сделать умным?
Вот по такой схеме сделано у меня. Все пины ЕСПи задействованы, 8 пинов на вход и 3 пина на выход для управления сдвиговым регистром. даже от УАРта пришлось отказаться, нужен был пин.
работает уже примерно полтора а может 2 года, проблем нет.
в качестве выключателей использую сенсорные на микросхеме ТТР223
на фотографии не видно, справа за разъемом с питой парой на плате распаяны резисторы на каждый пин и конденсаторы.
Если брать готовые решения такие как nodemcu и тому подобные, то конечно оно не поместится, а если брать отдельно модуль ЕСПи то всё залетит в подрозетник и даже место останется. например размеры модуля ЕСПи04 14,7мм * 12,1мм
работает уже примерно полтора а может 2 года, проблем нет.
в качестве выключателей использую сенсорные на микросхеме ТТР223
на фотографии не видно, справа за разъемом с питой парой на плате распаяны резисторы на каждый пин и конденсаторы.
Если брать готовые решения такие как nodemcu и тому подобные, то конечно оно не поместится, а если брать отдельно модуль ЕСПи то всё залетит в подрозетник и даже место останется. например размеры модуля ЕСПи04 14,7мм * 12,1мм
- Вложения
-
- IMG_20200905_092022.jpg (1.71 МБ) 3519 просмотров
-
- IMG_20200905_091951.jpg (1.06 МБ) 3519 просмотров
- Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 74
- Зарегистрирован: Чт авг 11, 2016 1:19 am
- Откуда: Киев
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: Как проходной переключатель сделать умным?
Есть еще вариант поставить реле zigbee(или wifi) с rf433 например:SONOFF RF R3 Wifi DIY, (или выключатель zigbee(или wifi) в подрозетник c rf433) к нему привязать плоские, которые можно на стену клеить выключатели с 433 передатчиком (их можно сделать и самому из пульта 433 рамки и клавиши) и развесить их в нужных местах.
- Рейтинг: 1.16%
Домик Алисы - Orange Pi PC, DietPi | +BroadlinkRM+esp8266(espEasy)+zigbee(sonoff,Aqara)
-
- Сообщения: 31
- Зарегистрирован: Пт сен 04, 2020 10:30 am
- Благодарил (а): 35 раз
- Поблагодарили: 0
Re: Как проходной переключатель сделать умным?
Спасибо за ответ, коллега. Подскажи номинал диода шотки точно подходящего под параметры схемы. А его или аналог я уже сам искать буду.ZyaK писал(а): ↑Сб сен 05, 2020 8:25 amВот по такой схеме сделано у меня. Все пины ЕСПи задействованы, 8 пинов на вход и 3 пина на выход для управления сдвиговым регистром. даже от УАРта пришлось отказаться, нужен был пин.
работает уже примерно полтора а может 2 года, проблем нет.
в качестве выключателей использую сенсорные на микросхеме ТТР223
на фотографии не видно, справа за разъемом с питой парой на плате распаяны резисторы на каждый пин и конденсаторы.
Если брать готовые решения такие как nodemcu и тому подобные, то конечно оно не поместится, а если брать отдельно модуль ЕСПи то всё залетит в подрозетник и даже место останется. например размеры модуля ЕСПи04 14,7мм * 12,1мм
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Как проходной переключатель сделать умным?
я ставил диодную сборку BAV70, ноги в параллель не помню сколько падение получилось, но для ЕСПи его вполне хватало, чтоб контроллер понял, что это логический ноль
- Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 31
- Зарегистрирован: Пт сен 04, 2020 10:30 am
- Благодарил (а): 35 раз
- Поблагодарили: 0
Re: Как проходной переключатель сделать умным?
1. Правильно ли я понимаю, что управление идет низким уровнем сигнала и как следствие на пине ардуино надо детектировать 0?
2. Какая длина до дальнего переключателя? Не затухает ли 5в питания при "путешествии" до сенсорной кнопки?
-
- Сообщения: 31
- Зарегистрирован: Пт сен 04, 2020 10:30 am
- Благодарил (а): 35 раз
- Поблагодарили: 0
Re: Как проходной переключатель сделать умным?
Коллега, неделю читаю про токовые петли и не могу понять как применить это для ESP. Нужен задатчик тока, нужен анализатор.ZyaK писал(а): ↑Сб сен 05, 2020 8:20 amСигнал затухать не будет если правильно организовывать схему. Должна быть Токовая Петля, управлять ЕСПи надо не 3.3 вольта а массой, тогда никаких проблем не будет. У меня в доме ЕСПи и релейные модули живут в щитке, самое большое расстояние от выключателя до ЕСПи 15 метров ничего не затухает и работает стабильно, токовая петля исключает возникновение помех.
Не могли бы вы для наглядности накидать хотя бы карандашом и сфотографировать схему для примера как это можно использовать. И очень желательно кусок кода для ESP (ведь на ESP надо мониторить не 1 и 0, а 20 и 50 мА).
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Как проходной переключатель сделать умным?
сенсорная кнопка потребляет если мне память не изменяет 25 миллиампер из них 15 жрет светодиод подсветки, при таком потреблении ничего затухать не будет.
схему я кидал выше. токовая петля организована резистором подтяжки к 3.3 вольта питания ЕСПи.
не понимаю как связана 1 или 0 с 20 и 50 мА что то вы путаете.
схему я кидал выше. токовая петля организована резистором подтяжки к 3.3 вольта питания ЕСПи.
не понимаю как связана 1 или 0 с 20 и 50 мА что то вы путаете.
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = ""; //Название сети
const char* password = ""; //пароль
const char* Smart_Home = ""; //ip брокера mqtt
#define BUTTON_1 3
#define BUTTON_2 5 //Кнопка
#define BUTTON_3 4
#define BUTTON_4 0
#define BUTTON_5 2
#define BUTTON_6 14
#define BUTTON_7 12
#define BUTTON_8 13
#define relays_topic "ESP02/#"
#define relays_topic1 "ESP02/r_1"
#define relays_topic2 "ESP02/r_2"
#define relays_topic3 "ESP02/r_3"
#define relays_topic4 "ESP02/r_4"
#define relays_topic5 "ESP02/r_5"
#define relays_topic6 "ESP02/r_6"
#define relays_topic7 "ESP02/r_7"
#define relays_topic8 "ESP02/r_8"
#define clk 15
#define data 16
#define latch 1
WiFiClient espClient; //инициализация WiFi клиента
PubSubClient client(espClient); //инициализация MQTT клиента
long last_mls = millis(); //функция времени в милисекундах
boolean Status1 = false; //объявляем статус реле в 0
boolean btnPress1 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat1 = false; //временная переменная для хранения статуса
boolean Status2 = false;
boolean btnPress2 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat2 = false;
boolean Status3 = false;
boolean btnPress3 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat3 = false;
boolean Status4 = false;
boolean btnPress4 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat4 = false;
boolean Status5 = false;
boolean btnPress5 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat5 = false;
boolean Status6 = false;
boolean btnPress6 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat6 = false;
boolean Status7 = false;
boolean btnPress7 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat7 = false;
boolean Status8 = false;
boolean btnPress8 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat8 = false;
int regim1 = 0; //режим по умолчанию при включении
int regim2 = 0;
int regim3 = 0;
int regim4 = 0;
int regim5 = 0;
int regim6 = 0;
int regim7 = 0;
int regim8 = 0;
int Dannie = 0;
int temp = 0;
void setup(){
pinMode(clk, OUTPUT);
pinMode(data, OUTPUT);
pinMode(latch, OUTPUT);
digitalWrite(latch, HIGH);
digitalWrite(latch, LOW);
shiftOut(data, clk, LSBFIRST, 0b11111111);
digitalWrite(latch, HIGH);
pinMode(BUTTON_1, INPUT);
pinMode(BUTTON_2, INPUT);
pinMode(BUTTON_3, INPUT);
pinMode(BUTTON_4, INPUT);
pinMode(BUTTON_5, INPUT);
pinMode(BUTTON_6, INPUT);
pinMode(BUTTON_7, INPUT);
pinMode(BUTTON_8, INPUT);
//Кнопка
//Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(6000);
client.setServer(Smart_Home, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100);
//Serial.println("");
//Serial.println("WiFi connected");
//Serial.println("IP address: ");
//Serial.println(WiFi.localIP());
client.connect("ESP02Client");
delay (100);//конектимся с брокером как клиент
client.subscribe(relays_topic);
client.loop();
client.publish(relays_topic1, String(regim1).c_str());
client.loop();
client.publish(relays_topic2, String(regim2).c_str());
client.loop();
client.publish(relays_topic3, String(regim3).c_str());
client.loop();
client.publish(relays_topic4, String(regim4).c_str());
client.loop();
client.publish(relays_topic5, String(regim5).c_str());
client.loop();
client.publish(relays_topic6, String(regim6).c_str());
client.loop();
client.publish(relays_topic7, String(regim7).c_str());
client.loop();
client.publish(relays_topic8, String(regim8).c_str());
client.loop();
}
void callback(char* topic, uint8_t* payload, unsigned int length){
//Serial.print("Message arrived [");
//Serial.print(topic);
//Serial.print(" ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
for (unsigned int i = 0; i < length; i++) {
//Serial.print((char)payload[i]);
}
//Serial.println();
if (strTopic == "ESP02/r_1") {
if ((char)payload[0] == '0') {
Status1 = false;
regim1 = 0;
}
else if ((char)payload[0] == '1') {
Status1 = true;
regim1 = 1;
}
}
if (strTopic == "ESP02/r_2") {
if ((char)payload[0] == '0') {
Status2 = false;
regim2 = 0;
}
else if ((char)payload[0] == '1') {
Status2 = true;
regim2 = 1;
}
}
if (strTopic == "ESP02/r_3") {
if ((char)payload[0] == '0') {
Status3 = false;
regim3 = 0;
}
else if ((char)payload[0] == '1') {
Status3 = true;
regim3 = 1;
}
}
if (strTopic == "ESP02/r_4") {
if ((char)payload[0] == '0') {
Status4 = true;
regim4 = 0;
}
else if ((char)payload[0] == '1') {
Status4 = false;
regim4 = 1;
}
}
if (strTopic == "ESP02/r_5") {
if ((char)payload[0] == '0') {
Status5 = false;
regim5 = 0;
}
else if ((char)payload[0] == '1') {
Status5 = true;
regim5 = 1;
}
}
if (strTopic == "ESP02/r_6") {
if ((char)payload[0] == '0') {
Status6 = false;
regim6 = 0;
}
else if ((char)payload[0] == '1') {
Status6 = true;
regim6 = 1;
}
}
if (strTopic == "ESP02/r_7") {
if ((char)payload[0] == '0') {
Status7 = false;
regim7 = 0;
}
else if ((char)payload[0] == '1') {
Status7 = true;
regim7 = 1;
}
}
if (strTopic == "ESP02/r_8") {
if ((char)payload[0] == '0') {
Status8 = false;
regim8 = 0;
}
else if ((char)payload[0] == '1') {
Status8 = true;
regim8 = 1;
}
}
Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
client.loop();
}
void button1()
{
btnPress1 = digitalRead(BUTTON_1);
if (btnPress1 == LOW && lastbtnStat1 == false)
{
delay(100); // защита от дребезга
btnPress1 = digitalRead(BUTTON_1);
if (btnPress1 == LOW && lastbtnStat1 == false)
{
regim1++;
lastbtnStat1 = true;
if (regim1 > 1)
{
regim1 = 0;
}
client.publish(relays_topic1, String(regim1).c_str());
}
}
if (btnPress1 == HIGH && lastbtnStat1 == true)
{
lastbtnStat1 = false;
}
if (regim1 == 0)
{
Status1 = false;
}
if (regim1 == 1)
{
Status1 = true;
}
client.loop();
}
void button2()
{
btnPress2 = digitalRead(BUTTON_2);
if (btnPress2 == LOW && lastbtnStat2 == false)
{
delay(100); // защита от дребезга
btnPress2 = digitalRead(BUTTON_2);
if (btnPress2 == LOW && lastbtnStat2 == false)
{
regim2++;
lastbtnStat2 = true;
if (regim2 > 1)
{
regim2 = 0;
}
client.publish(relays_topic2, String(regim2).c_str());
}
}
if (btnPress2 == HIGH && lastbtnStat2 == true)
{
lastbtnStat2 = false;
}
if (regim2 == 0)
{
Status2 = false;
}
if (regim2 == 1)
{
Status2 = true;
}
client.loop();
}
void button3()
{
btnPress3 = digitalRead(BUTTON_3);
if (btnPress3 == LOW && lastbtnStat3 == false)
{
delay(100); // защита от дребезга
btnPress3 = digitalRead(BUTTON_3);
if (btnPress3 == LOW && lastbtnStat3 == false)
{
regim3++;
lastbtnStat3 = true;
if (regim3 > 1)
{
regim3 = 0;
}
client.publish(relays_topic3, String(regim3).c_str());
}
}
if (btnPress3 == HIGH && lastbtnStat3 == true)
{
lastbtnStat3 = false;
}
if (regim3 == 0)
{
Status3 = false;
}
if (regim3 == 1)
{
Status3 = true;
}
client.loop();
}
void button4()
{
btnPress4 = digitalRead(BUTTON_4);
if (btnPress4 == LOW && lastbtnStat4 == false)
{
delay(100); // защита от дребезга
btnPress4 = digitalRead(BUTTON_4);
if (btnPress4 == LOW && lastbtnStat4 == false)
{
regim4++;
lastbtnStat4 = true;
if (regim4 > 1)
{
regim4 = 0;
}
client.publish(relays_topic4, String(regim4).c_str());
}
}
if (btnPress4 == HIGH && lastbtnStat4 == true)
{
lastbtnStat4 = false;
}
if (regim4 == 0)
{
Status4 = false;
}
if (regim4 == 1)
{
Status4 = true;
}
client.loop();
}
void button5()
{
btnPress5 = digitalRead(BUTTON_5);
if (btnPress5 == LOW && lastbtnStat5 == false)
{
delay(100); // защита от дребезга
btnPress5 = digitalRead(BUTTON_5);
if (btnPress5 == LOW && lastbtnStat5 == false)
{
regim5++;
lastbtnStat5 = true;
if (regim5 > 1)
{
regim5 = 0;
}
client.publish(relays_topic5, String(regim5).c_str());
}
}
if (btnPress5 == HIGH && lastbtnStat5 == true)
{
lastbtnStat5 = false;
}
if (regim5 == 0)
{
Status5 = false;
}
if (regim5 == 1)
{
Status5 = true;
}
client.loop();
}
void button6()
{
btnPress6 = digitalRead(BUTTON_6);
if (btnPress6 == LOW && lastbtnStat6 == false)
{
delay(100); // защита от дребезга
btnPress6 = digitalRead(BUTTON_6);
if (btnPress6 == LOW && lastbtnStat6 == false)
{
regim6++;
lastbtnStat6 = true;
if (regim6 > 1)
{
regim6 = 0;
}
client.publish(relays_topic6, String(regim6).c_str());
}
}
if (btnPress6 == HIGH && lastbtnStat6 == true)
{
lastbtnStat6 = false;
}
if (regim6 == 0)
{
Status6 = false;
}
if (regim6 == 1)
{
Status6 = true;
}
client.loop();
}
void button7()
{
btnPress7 = digitalRead(BUTTON_7);
if (btnPress7 == LOW && lastbtnStat7 == false)
{
delay(100); // защита от дребезга
btnPress7 = digitalRead(BUTTON_7);
if (btnPress7 == LOW && lastbtnStat7 == false)
{
regim7++;
lastbtnStat7 = true;
if (regim7 > 1)
{
regim7 = 0;
}
client.publish(relays_topic7, String(regim7).c_str());
}
}
if (btnPress7 == HIGH && lastbtnStat7 == true)
{
lastbtnStat7 = false;
}
if (regim7 == 0)
{
Status7 = false;
}
if (regim7 == 1)
{
Status7 = true;
}
client.loop();
}
void button8()
{
btnPress8 = digitalRead(BUTTON_8);
if (btnPress8 == LOW && lastbtnStat8 == false)
{
delay(100); // защита от дребезга
btnPress8 = digitalRead(BUTTON_8);
if (btnPress8 == LOW && lastbtnStat8 == false)
{
regim8++;
lastbtnStat8 = true;
if (regim8 > 1)
{
regim8 = 0;
}
client.publish(relays_topic8, String(regim8).c_str());
}
}
if (btnPress8 == HIGH && lastbtnStat8 == true)
{
lastbtnStat8 = false;
}
if (regim8 == 0)
{
Status8 = false;
}
if (regim8 == 1)
{
Status8 = true;
}
client.loop();
}
void reconnect_server() //функция проверки подключения
{
if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(6000);
//Serial.println("");
//Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
}
if(!client.connected() && WiFi.status() == WL_CONNECTED){
if (client.connect("ESP02Client")) {
//Serial.println("Mosquitto connect...");
client.setServer(Smart_Home, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100);
client.connect("ESP02Client");
delay (100);//конектимся с брокером как клиент
client.publish(relays_topic1, String(regim1).c_str());
client.loop();
client.publish(relays_topic2, String(regim2).c_str());
client.loop();
client.publish(relays_topic3, String(regim3).c_str());
client.loop();
client.publish(relays_topic4, String(regim4).c_str());
client.loop();
client.publish(relays_topic5, String(regim5).c_str());
client.loop();
client.publish(relays_topic6, String(regim6).c_str());
client.loop();
client.publish(relays_topic7, String(regim7).c_str());
client.loop();
client.publish(relays_topic8, String(regim8).c_str());
client.loop();
client.subscribe(relays_topic);
client.loop();
//подписываемся на топики
}
}
Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
Dannie = ~Dannie;
digitalWrite(latch, LOW);
shiftOut(data, clk, LSBFIRST, Dannie);
digitalWrite(latch, HIGH);
}
void loop()
{
client.loop();
button1();
button2();
button3();
button4();
button5();
button6();
button7();
button8();
Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
Dannie = ~Dannie;
digitalWrite(latch, LOW);
shiftOut(data, clk, LSBFIRST, Dannie);
digitalWrite(latch, HIGH);
//delay(200);
if (millis() - last_mls > 10000) //проверка подключений раз в 60 сек
{
last_mls = millis();
reconnect_server();
temp = temp + 1;
if(temp == 5)
{
client.publish(relays_topic1, String(regim1).c_str());
client.loop();
client.publish(relays_topic2, String(regim2).c_str());
client.loop();
client.publish(relays_topic3, String(regim3).c_str());
client.loop();
client.publish(relays_topic4, String(regim4).c_str());
client.loop();
client.publish(relays_topic5, String(regim5).c_str());
client.loop();
client.publish(relays_topic6, String(regim6).c_str());
client.loop();
client.publish(relays_topic7, String(regim7).c_str());
client.loop();
client.publish(relays_topic8, String(regim8).c_str());
client.loop();
temp = 0;
}
}
}
- Рейтинг: 2.33%
PI2 + MQTT + 5 ESP8266 + Atmega16