Ардуино - WiFi мост на ESP8266 : ESP-LINK
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добрый день. Не как не могу запустить ESP-LINK на плате Мега + WiFi R3 ATmega2560 + ESP8266 (32 МБ памяти), USB-TTL CH340G от RobotDyn, хотя на nodemcu Lua WI-FI всё нормально прошло.
подскажите может есть какие-то тонкости прошивки Меги?
подскажите может есть какие-то тонкости прошивки Меги?
Последний раз редактировалось monah-k 25 мар 2018, 14:45, всего редактировалось 1 раз.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Нужно проверить правильно ли подключен rx- tx. Так как не меге несколько uart портов. У меня еще плохо работало пока я неубрал делитель напряжения на rx пине esp
Отправлено спустя 3 часа 41 секунду:
Продолжаю эксперименты по надежности работы mqtt. Нашел новую проблему.
Если во время работы mqtt-клиента и mqtt-брокера, отключить сетевое соединение на роутере.
И в это время пока потерянное wi-fi соединение изменить состояние кнопки например включить true. После чего восстановить соединение на роутере, я не получил изменение состояние кнопки на брокере с false на true. То есть не получаем изменения статуса после обрыва сети. В это время клиент и сервер от питания не отключались. Здесь как раз нужно включать режим Qos1 или Qos2.
В библиотеках ELClient есть описание этих режимов но как их задействовать?
Отправлено спустя 7 часов 34 минуты 11 секунд:
ELClientMqtt.h
В разделе // publish a message to a topic где нашел слово qos=0 заменил на qos=1
Почему столько qos и разные публикации не знаю. Но после этого подтверждение статуса обновляется при разрыве соединения.
Посоветуйте как эти значения можно изменять не ковыряя все время библиотеку, конечно если вообще возможно?
Когда включил qos=1 заметил недостаток/преимущество зависит от задачи. Если подключение разорвано, и в это время по нажимать кнопку на клиенте несколько раз, и когда восстановить соединение мы получаем на сервере true/false столько раз сколько была нажата кнопка на клиенте во время разрыва соединения.
Преимущество: будет например когда нужно знать сколько произошло нажатий вовремя потери соединения.
Недостаток: когда такой статус будет активировать например свет. Получим мерцания света в зависимости от количества нажатий кнопки.
Отправлено спустя 3 часа 41 секунду:
Продолжаю эксперименты по надежности работы mqtt. Нашел новую проблему.
Если во время работы mqtt-клиента и mqtt-брокера, отключить сетевое соединение на роутере.
И в это время пока потерянное wi-fi соединение изменить состояние кнопки например включить true. После чего восстановить соединение на роутере, я не получил изменение состояние кнопки на брокере с false на true. То есть не получаем изменения статуса после обрыва сети. В это время клиент и сервер от питания не отключались. Здесь как раз нужно включать режим Qos1 или Qos2.
В библиотеках ELClient есть описание этих режимов но как их задействовать?
Отправлено спустя 7 часов 34 минуты 11 секунд:
Отредактировал библиотеку
ELClientMqtt.h
В разделе // publish a message to a topic где нашел слово qos=0 заменил на qos=1
Почему столько qos и разные публикации не знаю. Но после этого подтверждение статуса обновляется при разрыве соединения.
Посоветуйте как эти значения можно изменять не ковыряя все время библиотеку, конечно если вообще возможно?
SPOILERSPOILER_SHOW
/*! \file ELClientMqtt.h
\brief Definitions for ELClientMqtt
\author B. Runnels
\author T. von Eicken
\date 2016
*/
// Copyright (c) 2016 by B. Runnels and T. von Eicken
#ifndef _EL_CLIENT_MQTT_H_
#define _EL_CLIENT_MQTT_H_
#include <stdint.h>
#include "FP.h"
#include "ELClient.h"
// Class to send and receive MQTT messages. This class should be used with a singleton object
// because the esp-link implementation currently only supports a single MQTT server, so there is
// no value in instantiating multiple ELClientMqtt objects (although it's possible).
// All the server settings are made in esp-link and esp-link takes care to automatically
// reconnect and retry if the connection is lost. This means that on the arduino side the only
// code that is necessary is to send and receive messsages.
class ELClientMqtt {
public:
// Initialize with an ELClient object
ELClientMqtt(ELClient* elc);
// setup transmits the set of callbacks to esp-link. It assumes that the desired callbacks
// have previously been attached using something like mqtt->connectedCb.attach(myCallbackFun).
// After setup is called either the connectedCb or the disconnectedCb is invoked to provide
// information about the initial connection status.
void setup(void);
// callbacks that can be attached prior to calling setup
FP<void, void*> connectedCb; /**< callback with no args when MQTT is connected */
FP<void, void*> disconnectedCb; /**< callback with no args when MQTT is disconnected */
FP<void, void*> publishedCb; /**< not yet implemented */
FP<void, void*> dataCb; /**< callback when a message is received, called with two arguments: the topic and the message (max ~110 bytes for both) */
// subscribe to a topic, the default qos is 0. When messages are recevied for the topic the
// data callback is invoked.
void subscribe(const char* topic, uint8_t qos=0);
void subscribe(const __FlashStringHelper* topic, uint8_t qos=0);
// publish a message to a topic
void publish(const char* topic, const uint8_t* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const char* topic, const char* data,
uint8_t qos=1, uint8_t retain=0);
void publish(const __FlashStringHelper* topic, const __FlashStringHelper* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const char* topic, const __FlashStringHelper* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const __FlashStringHelper* topic, const uint8_t* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
// set a last-will topic & message
void lwt(const char* topic, const char* message, uint8_t qos=1, uint8_t retain=0);
void lwt(const __FlashStringHelper* topic, const __FlashStringHelper* message,
uint8_t qos=1, uint8_t retain=0);
private:
ELClient* _elc; /**< ELClient instance */
};
#endif // _EL_CLIENT_MQTT_H_
\brief Definitions for ELClientMqtt
\author B. Runnels
\author T. von Eicken
\date 2016
*/
// Copyright (c) 2016 by B. Runnels and T. von Eicken
#ifndef _EL_CLIENT_MQTT_H_
#define _EL_CLIENT_MQTT_H_
#include <stdint.h>
#include "FP.h"
#include "ELClient.h"
// Class to send and receive MQTT messages. This class should be used with a singleton object
// because the esp-link implementation currently only supports a single MQTT server, so there is
// no value in instantiating multiple ELClientMqtt objects (although it's possible).
// All the server settings are made in esp-link and esp-link takes care to automatically
// reconnect and retry if the connection is lost. This means that on the arduino side the only
// code that is necessary is to send and receive messsages.
class ELClientMqtt {
public:
// Initialize with an ELClient object
ELClientMqtt(ELClient* elc);
// setup transmits the set of callbacks to esp-link. It assumes that the desired callbacks
// have previously been attached using something like mqtt->connectedCb.attach(myCallbackFun).
// After setup is called either the connectedCb or the disconnectedCb is invoked to provide
// information about the initial connection status.
void setup(void);
// callbacks that can be attached prior to calling setup
FP<void, void*> connectedCb; /**< callback with no args when MQTT is connected */
FP<void, void*> disconnectedCb; /**< callback with no args when MQTT is disconnected */
FP<void, void*> publishedCb; /**< not yet implemented */
FP<void, void*> dataCb; /**< callback when a message is received, called with two arguments: the topic and the message (max ~110 bytes for both) */
// subscribe to a topic, the default qos is 0. When messages are recevied for the topic the
// data callback is invoked.
void subscribe(const char* topic, uint8_t qos=0);
void subscribe(const __FlashStringHelper* topic, uint8_t qos=0);
// publish a message to a topic
void publish(const char* topic, const uint8_t* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const char* topic, const char* data,
uint8_t qos=1, uint8_t retain=0);
void publish(const __FlashStringHelper* topic, const __FlashStringHelper* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const char* topic, const __FlashStringHelper* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
void publish(const __FlashStringHelper* topic, const uint8_t* data,
const uint16_t len, uint8_t qos=1, uint8_t retain=0);
// set a last-will topic & message
void lwt(const char* topic, const char* message, uint8_t qos=1, uint8_t retain=0);
void lwt(const __FlashStringHelper* topic, const __FlashStringHelper* message,
uint8_t qos=1, uint8_t retain=0);
private:
ELClient* _elc; /**< ELClient instance */
};
#endif // _EL_CLIENT_MQTT_H_
Преимущество: будет например когда нужно знать сколько произошло нажатий вовремя потери соединения.
Недостаток: когда такой статус будет активировать например свет. Получим мерцания света в зависимости от количества нажатий кнопки.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
monah-k, это где на меге распаяна еспшка? На такой плате есть определённая комбинация переключателей, пр которой будет нормально работать, почитайте вопросы и проблемы на гитхабовской странице esp-link ссылка
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
CraCk, надо в блоке публикации отредактировать строчку публикации, после передаваемых данных в топик, поставить запятую и через пробел число qos. Если нужен ещё и retain, то после числа qos ставим запятую и через пробел ставим число retain.
в скетче выглядит так в блоке пользователя так
в скетче выглядит так в блоке пользователя так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Здесь только включено qos=1?
Здесь только включено qos=2 retain=1?
Если я все правильно понял:
Тогда qos работает. Только в режиме qos=2 подписчик телефон перестал вообще реагировать на изменение, но сервер принимал изменения. Возможно есть несовместимость.
retain у меня не заработал. Возможно сервер не поддерживает такую опцию.
Интересно знать для подписчиков есть такая функция qos?
starshoy81, Если несложно пожалуйста добавите qos и retain в параметры блока.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
CraCk, почитайте про qos.
Да, вы всё правильно поняли, qos и retain так и включаются.
Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
Да, вы всё правильно поняли, qos и retain так и включаются.
Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Проверил как бы работает. Только в блоках где прописано qos и retain стоит по два пробела. Это случайность?starshoy81 писал(а): ↑27 мар 2018, 11:54Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
CraCk, это редактор блоков так вставляет параметры в код. В принципе, не должно влиять на работоспособность.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Спасибо за доработки. Осталось еще немного недостатков. Жду новых блоков тестов. ;)
Еще вопрос за что отвечают два параметра в разделе MQTT, как влияют на работу?
Еще вопрос за что отвечают два параметра в разделе MQTT, как влияют на работу?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Еще пожелание в блоке подписка добавить параметр принимаемых данных. По умолчанию стоит on, off для срабатывания диск. выхода. Но иногда нужно true, false или 0,1. По этому неплохо будет иметь редактируемый параметр с принимаемым значением.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Первый показывает, через какое время будет закрыто соединение при отсутствии активности клиента, второй показывает, через какое время будет закрыта сессия связи с брокером при отсутствии связи с брокером.
Вы когда пишете кому то сообщение, нажимайте на ник, иначе уведомление о сообщении не приходит.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Контактная информация:
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Это всё одно и тоже - смело используйте.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Это да, но в коде блока происходит сравнение с полученными данными, а они чаще всего строкового типа. Поэтому если из топика получено OFF, то сравнение с булеан 0 не даст ожидаемого результата. А, к примеру, домотикз все состояния выключателей выдаёт именно ON-OFF.
CraCk, добавил новую версию блока подписки, компилируется без ошибок. Тестируйте работу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Доброго времени суток! Не пинайте с ходу) не первый день пытаюсь подружить тактовую кнопку с majordomo, для управления скажем светом. Реализовать все через брокер не составила проблем, а вот реализовать раздельную схему пока не получилось (если вдруг лег брокер можно было-бы управлять светом с кнопки). Может кто-нибудь поделится наработками в данной ситуации?
Заранее спасибо!
Заранее спасибо!
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
LKV, вам лучше в соответствующей теме задать вопрос.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
А подскажите тогда, если я использую блоки с данной темы, эт мне куда(к какой теме отнести) вопрос задать ?
Ардуино - WiFi мост на ESP8266 : ESP-LINK
У меня как раз в IObroker при использовании true и false. Появляется возможность изменять состояние переменной ставя галочку. А если использовать ON-OFF тогда чтоб изменить состояние переменной нужно писать команду руками.starshoy81 писал(а): ↑09 апр 2018, 13:25 А, к примеру, домотикз все состояния выключателей выдаёт именно ON-OFF.
Работает. Плюсую. :tease:starshoy81 писал(а): ↑09 апр 2018, 13:25 добавил новую версию блока подписки, компилируется без ошибок. Тестируйте работу.
Вот как раз такое делаю. Хочу чтоб отслеживание состояния и управление ардуиной происходило с помощью одного топика и подписки esplink/garage/light. Когда управляю из брокера релюшкой все норм. Но если нажму локально кнопку на ардуино вкл/выкл тогда статус и управление получаю инверсное. Жму на брокере true реле откл., false реле включается. Проблема в ТТ тригере. Пока что завис как правильно реализовать логику когда используется локальная кнопка на ардуине.
На форуме IObroker есть описание как это сделать. Но пока что не могу реализовать в flprog.
https://forum.iobroker.net/viewtopic.ph ... t=40#p5220
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
LKV, тогда конкретнее задавайте вопрос. Мне, например, непонятно, что именно в блоках вы подразумеваете под раздельной схемой? А по существу, вопрос по железу у вас.
Отправлено спустя 21 минуту 5 секунд:
на брокер выдается топик switchIDX/state со значением ON-OFF
параллельно работает управление по http в виде json запроса к адресу исполнительного устройства "/json.htm?type=command¶m=switchlight&idx=99&switchcmd=On" опять же ON-OFF
Отправлено спустя 21 минуту 5 секунд:
Ну так это вы используете переменную, а в домотикзе сделано так:
на брокер выдается топик switchIDX/state со значением ON-OFF
параллельно работает управление по http в виде json запроса к адресу исполнительного устройства "/json.htm?type=command¶m=switchlight&idx=99&switchcmd=On" опять же ON-OFF
Офтопик
тут только с записью переменной и проверкой её состояния при следующей команде на сработку. Да и потом, пользуйтесь строковым выходом, необязательно в релейную логику сразу выходить. Если уж приняли с выхода true, то и лампе светить однозначно, а кнопка работает параллельно, сбрасывая состояние от подписки.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
И так вроде получилась простенькая задача, а именно реализация управление освещением через кнопку+majordomo.
Использую связку ArduinoUno R3 c ESP8266(прошита esplink v.2.2.3) на борту + mqtt broker (mosquitto) + majordomo.
Выкладываю на ваш суд, может кто-нибудь что-то подправит или еще что подскажет.
Еще хочу добавить генератор+публикация состояния реле, на случай обрыва связи с majordomo.
Flprog v.3.0.3
Использую связку ArduinoUno R3 c ESP8266(прошита esplink v.2.2.3) на борту + mqtt broker (mosquitto) + majordomo.
Выкладываю на ваш суд, может кто-нибудь что-то подправит или еще что подскажет.
Еще хочу добавить генератор+публикация состояния реле, на случай обрыва связи с majordomo.
Flprog v.3.0.3
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 102
- Зарегистрирован: 21 ноя 2016, 11:05
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Ребята, помогите пожалуйста. Использую ESP8266 ( прошивка ESP-LINK) в связке с ардуино. Можно ли в данной связке пользоваться сервисом народного мониторинга используя блок narodmon программы FLprog. В том блоке можно только выбрать шилд W5100. Выбираю этот шилд, ввожу IP адрес ESP и MAC адрес ESP, ввожу адрес сервера narodmon, но при попытке добавить датчик на сервисе, пишет что устройсво не отправило данных. В чом может быть проблема. Может на роутере порты пробросить?
Кто сейчас на конференции
Сейчас этот форум просматривают: Слимпер и 1 гость