Ардуино - 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 раз.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 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 и разные публикации не знаю. Но после этого подтверждение статуса обновляется при разрыве соединения.
Посоветуйте как эти значения можно изменять не ковыряя все время библиотеку, конечно если вообще возможно?
[spoiler]/*! \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_[/spoiler]
Когда включил qos=1 заметил недостаток/преимущество зависит от задачи. Если подключение разорвано, и в это время по нажимать кнопку на клиенте несколько раз, и когда восстановить соединение мы получаем на сервере true/false столько раз сколько была нажата кнопка на клиенте во время разрыва соединения.
Преимущество: будет например когда нужно знать сколько произошло нажатий вовремя потери соединения.
Недостаток: когда такой статус будет активировать например свет. Получим мерцания света в зависимости от количества нажатий кнопки.
Отправлено спустя 3 часа 41 секунду:
Продолжаю эксперименты по надежности работы mqtt. Нашел новую проблему.
Если во время работы mqtt-клиента и mqtt-брокера, отключить сетевое соединение на роутере.
И в это время пока потерянное wi-fi соединение изменить состояние кнопки например включить true. После чего восстановить соединение на роутере, я не получил изменение состояние кнопки на брокере с false на true. То есть не получаем изменения статуса после обрыва сети. В это время клиент и сервер от питания не отключались. Здесь как раз нужно включать режим Qos1 или Qos2.
В библиотеках ELClient есть описание этих режимов но как их задействовать?
Отправлено спустя 7 часов 34 минуты 11 секунд:
Отредактировал библиотекуCraCk писал(а): 25 мар 2018, 15:54В библиотеках ELClient есть описание этих режимов но как их задействовать?
ELClientMqtt.h
В разделе // publish a message to a topic где нашел слово qos=0 заменил на qos=1
Почему столько qos и разные публикации не знаю. Но после этого подтверждение статуса обновляется при разрыве соединения.
Посоветуйте как эти значения можно изменять не ковыряя все время библиотеку, конечно если вообще возможно?
[spoiler]/*! \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_[/spoiler]
Когда включил qos=1 заметил недостаток/преимущество зависит от задачи. Если подключение разорвано, и в это время по нажимать кнопку на клиенте несколько раз, и когда восстановить соединение мы получаем на сервере true/false столько раз сколько была нажата кнопка на клиенте во время разрыва соединения.
Преимущество: будет например когда нужно знать сколько произошло нажатий вовремя потери соединения.
Недостаток: когда такой статус будет активировать например свет. Получим мерцания света в зависимости от количества нажатий кнопки.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]monah-k[/ref], это где на меге распаяна еспшка? На такой плате есть определённая комбинация переключателей, пр которой будет нормально работать, почитайте вопросы и проблемы на гитхабовской странице esp-link ссылка
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]CraCk[/ref], надо в блоке публикации отредактировать строчку публикации, после передаваемых данных в топик, поставить запятую и через пробел число qos. Если нужен ещё и retain, то после числа qos ставим запятую и через пробел ставим число retain.
в скетче выглядит так в блоке пользователя так
в скетче выглядит так в блоке пользователя так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Здесь только включено qos=1?
Здесь только включено qos=2 retain=1?
Если я все правильно понял:
Тогда qos работает. Только в режиме qos=2 подписчик телефон перестал вообще реагировать на изменение, но сервер принимал изменения. Возможно есть несовместимость.
retain у меня не заработал. Возможно сервер не поддерживает такую опцию.
Интересно знать для подписчиков есть такая функция qos?
[ref]starshoy81[/ref], Если несложно пожалуйста добавите qos и retain в параметры блока.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]CraCk[/ref], почитайте про qos.
Да, вы всё правильно поняли, qos и retain так и включаются.
Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
Да, вы всё правильно поняли, qos и retain так и включаются.
Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Проверил как бы работает. Только в блоках где прописано qos и retain стоит по два пробела. Это случайность?starshoy81 писал(а): 27 мар 2018, 11:54Попробуйте новые варианты блоков подписки и публикации с добавленными параметрами qos и retain. IDE их компилирует без ошибок, а мне сейчас негде протестировать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]CraCk[/ref], это редактор блоков так вставляет параметры в код. В принципе, не должно влиять на работоспособность.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Спасибо за доработки. Осталось еще немного недостатков. Жду новых блоков тестов. ;)
Еще вопрос за что отвечают два параметра в разделе MQTT, как влияют на работу?
Еще вопрос за что отвечают два параметра в разделе MQTT, как влияют на работу?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Еще пожелание в блоке подписка добавить параметр принимаемых данных. По умолчанию стоит on, off для срабатывания диск. выхода. Но иногда нужно true, false или 0,1. По этому неплохо будет иметь редактируемый параметр с принимаемым значением.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Первый показывает, через какое время будет закрыто соединение при отсутствии активности клиента, второй показывает, через какое время будет закрыта сессия связи с брокером при отсутствии связи с брокером.CraCk писал(а): 27 мар 2018, 22:50Еще вопрос за что отвечают два параметра в разделе MQTT, как влияют на работу?
Вы когда пишете кому то сообщение, нажимайте на ник, иначе уведомление о сообщении не приходит.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Это всё одно и тоже - смело используйте.CraCk писал(а): 07 апр 2018, 11:22По умолчанию стоит on, off для срабатывания диск. выхода. Но иногда нужно true, false или 0,1
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Это да, но в коде блока происходит сравнение с полученными данными, а они чаще всего строкового типа. Поэтому если из топика получено OFF, то сравнение с булеан 0 не даст ожидаемого результата. А, к примеру, домотикз все состояния выключателей выдаёт именно ON-OFF.
[ref]CraCk[/ref], добавил новую версию блока подписки, компилируется без ошибок. Тестируйте работу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Доброго времени суток! Не пинайте с ходу) не первый день пытаюсь подружить тактовую кнопку с majordomo, для управления скажем светом. Реализовать все через брокер не составила проблем, а вот реализовать раздельную схему пока не получилось (если вдруг лег брокер можно было-бы управлять светом с кнопки). Может кто-нибудь поделится наработками в данной ситуации?
Заранее спасибо!
Заранее спасибо!
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]LKV[/ref], вам лучше в соответствующей теме задать вопрос.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
А подскажите тогда, если я использую блоки с данной темы, эт мне куда(к какой теме отнести) вопрос задать ?
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - 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 реле включается. Проблема в ТТ тригере. Пока что завис как правильно реализовать логику когда используется локальная кнопка на ардуине.LKV писал(а): 09 апр 2018, 22:13для управления скажем светом. Реализовать все через брокер не составила проблем, а вот реализовать раздельную схему пока не получилось
На форуме IObroker есть описание как это сделать. Но пока что не могу реализовать в flprog.
https://forum.iobroker.net/viewtopic.ph ... t=40#p5220
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]LKV[/ref], тогда конкретнее задавайте вопрос. Мне, например, непонятно, что именно в блоках вы подразумеваете под раздельной схемой? А по существу, вопрос по железу у вас.
Отправлено спустя 21 минуту 5 секунд:
на брокер выдается топик switchIDX/state со значением ON-OFF
параллельно работает управление по http в виде json запроса к адресу исполнительного устройства "/json.htm?type=command¶m=switchlight&idx=99&switchcmd=On" опять же ON-OFF
Отправлено спустя 21 минуту 5 секунд:
Ну так это вы используете переменную, а в домотикзе сделано так:CraCk писал(а): 09 апр 2018, 23:30У меня как раз в IObroker при использовании true и false. Появляется возможность изменять состояние переменной ставя галочку.
на брокер выдается топик switchIDX/state со значением ON-OFF
параллельно работает управление по http в виде json запроса к адресу исполнительного устройства "/json.htm?type=command¶m=switchlight&idx=99&switchcmd=On" опять же ON-OFF
Офтопик
тут только с записью переменной и проверкой её состояния при следующей команде на сработку. Да и потом, пользуйтесь строковым выходом, необязательно в релейную логику сразу выходить. Если уж приняли с выхода true, то и лампе светить однозначно, а кнопка работает параллельно, сбрасывая состояние от подписки.CraCk писал(а): 09 апр 2018, 23:30Пока что завис как правильно реализовать логику когда используется локальная кнопка на ардуине.
Ардуино - 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, но при попытке добавить датчик на сервисе, пишет что устройсво не отправило данных. В чом может быть проблема. Может на роутере порты пробросить?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя