Esp+реле+mqtt+mdm
Модератор: immortal
-
- Сообщения: 141
- Зарегистрирован: Пн авг 22, 2016 10:03 am
- Благодарил (а): 28 раз
- Поблагодарили: 5 раз
Esp+реле+mqtt+mdm
Здравствуйте.
Подскажите, плиз, правильно ли я делаю. Есть esp, реле и mqtt. Эта релюшка управляется по mqtt - 1 и 0. Так же есп шлет в топик статус этого реле - в случае если релюшка включена кодом самой esp. В mdm заведены объекты в классе relays, например ReleSvet1. В mqtt заведены записи - по 2 на каждое реле: svet1/in (входящее управление реле), svet1/out - статус реле по информации от esp. Обе эти записи связаны со свойством статус ReleSvet1. На mdm крутятся сценарии, изменяющие свойства объектов. Так же есть выключатель, он связан со свойством status методом refresh объекта ReleSvet1.
У меня есть ошибки?
благодарю
Подскажите, плиз, правильно ли я делаю. Есть esp, реле и mqtt. Эта релюшка управляется по mqtt - 1 и 0. Так же есп шлет в топик статус этого реле - в случае если релюшка включена кодом самой esp. В mdm заведены объекты в классе relays, например ReleSvet1. В mqtt заведены записи - по 2 на каждое реле: svet1/in (входящее управление реле), svet1/out - статус реле по информации от esp. Обе эти записи связаны со свойством статус ReleSvet1. На mdm крутятся сценарии, изменяющие свойства объектов. Так же есть выключатель, он связан со свойством status методом refresh объекта ReleSvet1.
У меня есть ошибки?
благодарю
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Esp+реле+mqtt+mdm
у меня как то так, еспишки рулят релюхами от кнопок(2 есп от 8 железных кнопок - 8 релюхами, 3-я 6 железных кнопок, 8 релюх +IR протоколы)
могут работать и без сервера(на всякий случай если упадёт расбери или флешка кончится)
Объекты класса Light привязаны к MQTT
методы
refresh
turn on/off
switch
свойства
status или 1 или 0 собственно что и шлётся по MQTT
viewtopic.php?f=8&t=1937
viewtopic.php?f=8&t=2830
могут работать и без сервера(на всякий случай если упадёт расбери или флешка кончится)
Объекты класса Light привязаны к MQTT
методы
refresh
turn on/off
switch
свойства
status или 1 или 0 собственно что и шлётся по MQTT
viewtopic.php?f=8&t=1937
viewtopic.php?f=8&t=2830
- Вложения
-
- Light.jpg (79.19 КБ) 6373 просмотра
-
- MQTT.jpg (146.42 КБ) 6373 просмотра
Последний раз редактировалось ZyaK Пт апр 06, 2018 11:33 am, всего редактировалось 1 раз.
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Esp+реле+mqtt+mdm
у меня сенсорные кнопки на базе TTP223
прям на ЕСПишке подтягивающие резисторы в 1 килоом на 3.3 и конденсаторы 0.1 на землю, прока это всё лежит на столе, но ради интереса разматывал витую пару на 50 метров и по ней пускал 3.3 вольта на запитку кнопок, работает без проблем.
самое что интересное их пробовал штуки 4 одновременно на 1 вход цеплять! работают как проходные выключатели!
прям на ЕСПишке подтягивающие резисторы в 1 килоом на 3.3 и конденсаторы 0.1 на землю, прока это всё лежит на столе, но ради интереса разматывал витую пару на 50 метров и по ней пускал 3.3 вольта на запитку кнопок, работает без проблем.
самое что интересное их пробовал штуки 4 одновременно на 1 вход цеплять! работают как проходные выключатели!
- Вложения
-
- 776089.jpg (161.01 КБ) 6336 просмотров
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 141
- Зарегистрирован: Пн авг 22, 2016 10:03 am
- Благодарил (а): 28 раз
- Поблагодарили: 5 раз
Re: Esp+реле+mqtt+mdm
У вас реле без обратной связи я вижу. Т.е если кодом esp включилось реле, mdm об этом не знает?ZyaK писал(а): ↑Пт апр 06, 2018 8:45 amу меня как то так, еспишки рулят релюхами от кнопок(2 есп от 8 железных кнопок - 8 релюхами, 3-я 6 железных кнопок, 8 релюх +IR протоколы)
могут работать и без сервера(на всякий случай если упадёт расбери или флешка кончится)
Объекты класса Light привязаны к MQTT
методы
refresh
turn on/off
switch
свойства
status или 1 или 0 собственно что и шлётся по MQTT
viewtopic.php?f=8&t=1937
viewtopic.php?f=8&t=2830
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Esp+реле+mqtt+mdm
нет, сделано именно с обратной связью, при изменении состояния летит пакет status того или иного выхода.
самое интересное с командами по ИК
после выполнения команды возвращает статус в 0 и отправляет в мажордом
а вот опрос кнопок
Долго очень боролся с подпиской на топики, если ЕСПишку подписать более чем на 5 топиков, она тупит жестко, решилось вот так
самое интересное с командами по ИК
Код: Выделить всё
if (strTopic == "ESP03/usulitel_next_station") {
if ((char)payload[0] == '0') {
u_next_station=0;
}
else if ((char)payload[0] == '1') {
u_next_station=1;
irsend.sendRC5(0x20, 12);
delay(150);
u_next_station=0;
delay(150);
client.publish(usulitel_next_station, String(u_next_station).c_str());
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()); //публикуем изменение состояния выхода 1 на брокер
}
}
if (btnPress1 == HIGH && lastbtnStat1 == true)
{
lastbtnStat1 = false;
}
if (regim1 == 0)
{
Status1 = false;
}
if (regim1 == 1)
{
Status1 = true;
}
client.loop();
}
Код: Выделить всё
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100);
client.connect("ESP03Client");
delay (100);//конектимся с брокером как клиент
client.subscribe(relays_topic1);
client.loop();
client.subscribe(relays_topic2);
client.loop();
client.subscribe(relays_topic3);
client.loop();
client.subscribe(relays_topic4);
client.loop();
client.subscribe(relays_topic5);
client.loop();
client.subscribe(relays_topic6);
client.loop();
client.subscribe(usulitel_power);
client.loop();
client.subscribe(usulitel_vol_up);
client.loop();
client.subscribe(usulitel_vol_down);
client.loop();
client.subscribe(usulitel_av);
client.loop();
client.subscribe(usulitel_radio);
client.loop();
client.subscribe(usulitel_projector);
client.loop();
client.subscribe(usulitel_next_station);
client.loop();
client.subscribe(usulitel_prev_station);
client.loop();
client.subscribe(projector_power);
client.loop();
client.subscribe(led_power_on);
client.loop();
client.subscribe(led_power_off);
client.loop();
client.subscribe(led_lum_up);
client.loop();
client.subscribe(led_lum_down);
client.loop();
client.publish(usulitel_power, String(u_power).c_str());
client.loop();
client.publish(usulitel_vol_up, String(u_vol_up).c_str());
client.loop();
client.publish(usulitel_vol_down, String(u_vol_down).c_str());
client.loop();
client.publish(usulitel_av, String(u_av).c_str());
client.loop();
client.publish(usulitel_radio, String(u_radio).c_str());
client.loop();
client.publish(usulitel_projector, String(u_projector).c_str());
client.loop();
client.publish(usulitel_next_station, String(u_next_station).c_str());
client.loop();
client.publish(usulitel_prev_station, String(u_prev_station).c_str());
client.loop();
client.publish(projector_power, String(p_power).c_str());
client.loop();
client.publish(led_power_on, String(l_power_on).c_str());
client.loop();
client.publish(led_power_off, String(l_power_off).c_str());
client.loop();
client.publish(led_lum_up, String(l_lum_up).c_str());
client.loop();
client.publish(led_lum_down, String(l_lum_down).c_str());
client.loop();
irsend.begin();
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Esp+реле+mqtt+mdm
Там выше я скрины приложил, там есть топики всех 3-х ЕСП, привязанных к свойству status
вот в панели MQTT а это управление со сцен
Последний раз редактировалось ZyaK Пт апр 06, 2018 12:50 pm, всего редактировалось 1 раз.
PI2 + MQTT + 5 ESP8266 + Atmega16
-
- Сообщения: 141
- Зарегистрирован: Пн авг 22, 2016 10:03 am
- Благодарил (а): 28 раз
- Поблагодарили: 5 раз
Re: Esp+реле+mqtt+mdm
Это обратная связь или управляющий сигнал от mdm?
Если не трудно, скрин этого же реле, но противоположной команды (если было управление, то реакция, если реакция-управление)
И что означает опция Retain?
-
- Сообщения: 407
- Зарегистрирован: Вт окт 24, 2017 2:01 pm
- Откуда: Ижевск
- Благодарил (а): 45 раз
- Поблагодарили: 69 раз
Re: Esp+реле+mqtt+mdm
Если была команда на включение /отключение реле со стороны MJD за это отвечает функция КолБэк
которая меняет состояние переменной "режим1"
дальше после ЕСП у меня стоит сдвиговый регистр с защелкой чтоб расширить количество выходов, данные в него засылаются вот так
переменная "РежимХ" может меняться как при получении команды с Мажордома также и при нажатии кнопки, далее отправляется обратная команда в мажордом об изменении состояния и все ражимы 8 релюх засылаются в сдвиговый регистр, после чего защелкиваются и релюхи включаются.
Код: Выделить всё
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;
}
}
дальше после ЕСП у меня стоит сдвиговый регистр с защелкой чтоб расширить количество выходов, данные в него засылаются вот так
Код: Выделить всё
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);
PI2 + MQTT + 5 ESP8266 + Atmega16