Ардуино - WiFi мост на ESP8266 : ESP-LINK
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Mqtt buddy попробуй, там есть возможность включать и выключать по расписанию.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Ну не нужно так расслабляться ...визуальное программирование это для начинающих!CraCk писал(а): 10 мар 2018, 22:06Может Вы подскажите какие есть приложение конструктор в котором можно все собирать визуально
FLProg создана для новичков, .... либо для "профи" быстро создать проект
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Дошел к стадии: Установлен IObroker+IoT MQTT Dashboard на мобильном телефоне+ESP8266 и pro mini.
На телефоне щелкаю переключатель моргая этим на ардуине пином 13, в то время ардуина отправляет на брокер рандомные значения каждых 2сек.
Все работает пока есть питание. Как только отключаю и повторно включаю питание. Данные ардуино перестает принимать, то есть не моргает пин13, но публикация на брокер восстанавливаться и рандомные цифры брокер принимает. И для того чтоб восстановить работу подписки на ардуине приходится в морде esp-link делать рестарт ESP8266 и следом за ней ардуинку. Что посоветуете?
Такое ощущение что где то еще баг зарыт в блоке подписка. Блок обновил до 0.1V
На телефоне щелкаю переключатель моргая этим на ардуине пином 13, в то время ардуина отправляет на брокер рандомные значения каждых 2сек.
Все работает пока есть питание. Как только отключаю и повторно включаю питание. Данные ардуино перестает принимать, то есть не моргает пин13, но публикация на брокер восстанавливаться и рандомные цифры брокер принимает. И для того чтоб восстановить работу подписки на ардуине приходится в морде esp-link делать рестарт ESP8266 и следом за ней ардуинку. Что посоветуете?
Такое ощущение что где то еще баг зарыт в блоке подписка. Блок обновил до 0.1V
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Проведен тест с arduino nano результат тот же. Пробовал скорость связи между ESP и ардуиной уменьшить до 57600, не помогло
.

Ардуино - WiFi мост на ESP8266 : ESP-LINK
Могу предположить что у вас при старте ардуины подписка на топик происходит в то время, пока ESP еще не подключился к сети и к брокеру. Ведь подписка на топики происходит один раз при старте ардуино в секции Setup.
Пробуйте выводить в консоль отладочные данные с помощью Serialprint.
Пробуйте выводить в консоль отладочные данные с помощью Serialprint.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Что то такое получается. Если вовремя работы ресетнуть только ESP. То тогда мы теряем только подписку, публикация на сервер восстанавливается. Для того чтоб восстановить подписку нужно кнопку ресет на про мини нажать. Так понимаю при ресете ардуина передает информация на какие топики она подписана. Но это происходит только при первом запуске. Можно как то заставить инциализироватся ардуино не только при первом запуске, но и вовремя работы или с небольшой задержкой, пока ESP не придет в себя и будет готова к отправке информации о подписке на брокер?Anydy писал(а): 18 мар 2018, 06:27Могу предположить что у вас при старте ардуины подписка на топик происходит в то время, пока ESP еще не подключился к сети и к брокеру.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Я долго не гонял ESP + ESP-LINK + arduino + ElClient, вроде работало без проблем.....
У меня задача была удаленно управлять через GPRS.
Алгоритм такой:
Подключаемся к WIFI, если подключены - подключаемся к MQTT, если подключены - подписываемся на топики, публикуем в топики...
Это все в SETUP, в LOOP же должна идти постоянная проверка соединения, если есть коннект, то можно публиковать, подписываться, отписываться....и т.д. Если нет коннекта к MQTT - переподключаемся или ресетим ESP.
ElClient же вроде на основе PubSubClient ....
У меня задача была удаленно управлять через GPRS.
Алгоритм такой:
Подключаемся к WIFI, если подключены - подключаемся к MQTT, если подключены - подписываемся на топики, публикуем в топики...
Это все в SETUP, в LOOP же должна идти постоянная проверка соединения, если есть коннект, то можно публиковать, подписываться, отписываться....и т.д. Если нет коннекта к MQTT - переподключаемся или ресетим ESP.
ElClient же вроде на основе PubSubClient ....
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Будем надеется что автор блоков [ref]starshoy81[/ref], что то доработает в блоках, для надежной работы.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref]CraCk[/ref], а вы переносили подписку на топик в функцию "void mqttConnected" в самом скетче? Что именно вы отправляете в топик, на который подписана ардуина?
Ардуине после включения питания нужна синхронизация с есп, для этого ардуину надо сбрасывать. Таковы условия работы библиотеки el-client.
Чтобы посмотреть данные которые гоняются через уарт, надо включить на странице отладки есп вывод в уарт 1, в нём будет видно подписка и публикация.
Можно ещё раскомментировать вывод в уарт в секции void mqttData скетча.
Отправлено спустя 26 минут 53 секунды:
Кстати, посмотрел скетч из вашего проекта - по умолчанию подписка располагается в setup, поэтому у вас и не подписывается на тему без пересброса питания. Нужно перенести строку с подпиской из setup в функцию void mqttConnected в скетче. Про это написано в описании блока.
Ардуине после включения питания нужна синхронизация с есп, для этого ардуину надо сбрасывать. Таковы условия работы библиотеки el-client.
Чтобы посмотреть данные которые гоняются через уарт, надо включить на странице отладки есп вывод в уарт 1, в нём будет видно подписка и публикация.
Можно ещё раскомментировать вывод в уарт в секции void mqttData скетча.
Отправлено спустя 26 минут 53 секунды:
Кстати, посмотрел скетч из вашего проекта - по умолчанию подписка располагается в setup, поэтому у вас и не подписывается на тему без пересброса питания. Нужно перенести строку с подпиской из setup в функцию void mqttConnected в скетче. Про это написано в описании блока.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
starshoy81 писал(а): 18 мар 2018, 23:20CraCk, а вы переносили подписку на топик в функцию "void mqttConnected" в самом скетче? Что именно вы отправляете в топик, на который подписана ардуина?
Условие выполнял обязательно. Просто посчитал что нет смысла выкладывать редактированный .ino фаил.starshoy81 писал(а): 18 мар 2018, 23:20Кстати, посмотрел скетч из вашего проекта - по умолчанию подписка располагается в setup, поэтому у вас и не подписывается на тему без пересброса питания.
При рестарте выдает такое ESP. Ардуино не трогал.starshoy81 писал(а): 18 мар 2018, 23:20Чтобы посмотреть данные которые гоняются через уарт, надо включить на странице отладки есп вывод в уарт 1, в нём будет видно подписка и публикация.
[spoiler]1.10:1885 0x3fff5e30 (client=0x3fff5574)
512> MQTT ERROR: Failed to connect
515> initializing user application
519> Waiting for work to do...
522> mode : sta(5c:cf:7f:8e:eb:05) + softAP(5e:cf:7f:8e:eb:05)
528> add if0
529> add if1
531> dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
539> bcn 100
540> f r0, SLIP: start or end len=0 inpkt=0
1844> SLIP: start or end len=48 inpkt=1
1844> cmdParsePacket: cmd=11 argc=5 value=0
1846> cmdExec: Dispatching cmd=MQTT_PUB
1849> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
1856> MQTT: Publish, topic: "rele4_state", length: 18
1861> MQTT: Send type=PUBLISH id=0000 len=18
2661> scandone
2663> state: 0 -> 2 (b0)
2667> state: 2 -> 3 (0)
2671> state: 3 -> 5 (10)
2671> add 0
2671> aid 1
2671> cnt
2682>
2682> connected with Dlink, channel 4
2683> ip:192.168.1.80,mask:255.255.255.0,gw:192.168.1.1
2683> Wifi connected to ssid Dlink, ch 4
2687> Wifi got ip:192.168.1.80,mask:255.255.255.0,gw:192.168.1.1
2693> host_name = esp-link
2695> server_name = _http._tcp.local
2699> MQTT: Connect to 192.168.1.10:1885 0x3fff7440 (client=0x3fff5574)
2717> MQTT: TCP connected to 192.168.1.10:1885
2718> MQTT: Send type=TYPE_CONNECT id=0000 len=22
2726> MQTT: Recv type=CONNACK id=0000 len=4; Pend type=NULL id=00
7960> MQTT: Recv PUBLISH qos=0 system/adapter/javascript/0/memRss13.020/
7967> MQTT: Recv type=PUBLISH id=0000 len=49; Pend type=NULL id=00
7973> MQTT: Recv PUBLISH qos=0 system/adapter/javascript/0/memHeapTotal34.010.
7980> MQTT: Recv type=PUBLISH id=0000 len=48; Pend type=NULL id=00
7986> MQTT: Recv PUBLISH qos=0 system/adapter/javascript/0/memHeapUsed30.530,
7993> MQTT: Recv type=PUBLISH id=0000 len=46; Pend type=NULL id=00
7999> MQTT: Recv PUBLISH qos=0 system/adapter/javascript/0/connectedfalse0(
8006> MQTT: Recv type=PUBLISH id=0000 len=42; Pend type=NULL id=00
8012> MQTT: Recv PUBLISH qos=0 system/adapter/javascript/0/alivefalsealse0(
8074> MQTT: Recv type=PUBLISH id=0000 len=16; Pend type=NULL id=00
8074> MQTT: Recv PUBLISH qos=0 reley4_state0!
8076> MQTT: Recv type=PUBLISH id=0000 len=35; Pend type=NULL id=00
8082> MQTT: Recv PUBLISH qos=0 scene/Рух_кімнатаtrueімнатаtrueystem/adapter/javascript/0/alivefalsedfalse0(
8215> HTTP GET /log/text: 200, 5016ms, h=18136
9842> SLIP: start or end len=0 inpkt=1
9842> SLIP: start or end len=48 inpkt=1
9842> cmdParsePacket: cmd=11 argc=5 value=0
9845> cmdExec: Dispatching cmd=MQTT_PUB
9848> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
9855> MQTT: Publish, topic: "rele4_state", length: 18
9860> MQTT: Send type=PUBLISH id=0000 len=18
12959> HTTP GET /log/text: 200, 18ms, h=18472
13841> SLIP: start or end len=0 inpkt=1
13841> SLIP: start or end len=48 inpkt=1
13841> cmdParsePacket: cmd=11 argc=5 value=0
13843> cmdExec: Dispatching cmd=MQTT_PUB
13847> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
13854> MQTT: Publish, topic: "rele4_state", length: 18
13859> MQTT: Send type=PUBLISH id=0000 len=18
14882> MQTT: Connect to 192.168.1.10:1885 0x3fff73b0 (client=0x3fff5574)
14894> MQTT: TCP connected to 192.168.1.10:1885
14895> MQTT: Send type=TYPE_CONNECT id=0000 len=22
14900> MQTT: Recv type=CONNACK id=0000 len=4; Pend type=NULL id=00
=48 inpkt=1
21838> cmdParsePacket: cmd=11 argc=5 value=0
21841> cmdExec: Dispatching cmd=MQTT_PUB
21844> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
21851> MQTT: Publish, topic: "rele4_state", length: 18
21856> MQTT: Send type=PUBLISH id=0000 len=18
25837> SLIP: start or end len=0 inpkt=1
25838> SLIP: start or end len=48 inpkt=1
25838> cmdParsePacket: cmd=11 argc=5 value=0
25840> cmdExec: Dispatching cmd=MQTT_PUB
25844> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=2, qos=0, retain=0
25851> MQTT: Publish, topic: "rele4_state", length: 17
25856> MQTT: Send type=PUBLISH id=0000 len=17
29836> SLIP: start or end len=0 inpkt=1
29836> SLIP: start or end len=48 inpkt=1
29836> cmdParsePacket: cmd=11 argc=5 value=0
29839> cmdExec: Dispatching cmd=MQTT_PUB
29842> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
29849> MQTT: Publish, topic: "rele4_state", length: 18
29854> MQTT: Send type=PUBLISH id=0000 len=18
30607> Wifi check: mode=STA status=5
33835> SLIP: start or end len=0 inpkt=1
33835> SLIP: start or end len=48 inpkt=1
33835> cmdParsePacket: cmd=11 argc=5 value=0
33837> cmdExec: Dispatching cmd=MQTT_PUB
33841> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
33848> MQTT: Publish, topic: "rele4_state", length: 18
33853> MQTT: Send type=PUBLISH id=0000 len=18
34861> HTTP GET /log/text: 200, 39ms, h=19680
37833> SLIP: start or end len=0 inpkt=1
37833> SLIP: start or end len=48 inpkt=1
37834> cmdParsePacket: cmd=11 argc=5 value=0
37836> cmdExec: Dispatching cmd=MQTT_PUB
37840> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=2, qos=0, retain=0
37846> MQTT: Publish, topic: "rele4_state", length: 17
37851> MQTT: Send type=PUBLISH id=0000 len=17
41501> HTTP GET /log/text: 200, 33ms, h=19680
41833> SLIP: start or end len=0 inpkt=1
41833> SLIP: start or end len=48 inpkt=1
41833> cmdParsePacket: cmd=11 argc=5 value=0
41836> cmdExec: Dispatching cmd=MQTT_PUB
41839> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=1, qos=0, retain=0
41846> MQTT: Publish, topic: "rele4_state", length: 16
41851> MQTT: Send type=PUBLISH id=0000 len=16
45831> SLIP: start or end len=0 inpkt=1
45832> SLIP: start or end len=48 inpkt=1
45832> cmdParsePacket: cmd=11 argc=5 value=0
45834> cmdExec: Dispatching cmd=MQTT_PUB
45838> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
45845> MQTT: Publish, topic: "rele4_state", length: 18
45850> MQTT: Send type=PUBLISH id=0000 len=18[/spoiler]
Потрогал ардуино. Сделал ресет кнопкой.
[spoiler]172104> MQTT: MQTTCMD_Publish topic=rele4_state, data_len=3, qos=0, retain=0
172111> MQTT: Publish, topic: "rele4_state", length: 18
172116> MQTT: Send type=PUBLISH id=0000 len=18
172121> SLIP: start or end len=19 inpkt=0
172124> SLIP: start or end len=22 inpkt=1
172127> cmdParsePacket: cmd=12 argc=2 value=0
172131> cmdExec: Dispatching cmd=MQTT_SUB
172135> MQTT: MQTTCMD_Subscribe topic=pin, qos=0
172139> MQTT: Subscribe, topic: "pin"
172148> MQTT: Send type=SUBSCRIBE id=0001 len=10
172154> MQTT: Recv type=PUBLISH id=0000 len=11; Pend type=SUBSCRIBE id=01
172154> MQTT: Recv PUBLISH qos=0 pinnull�
172157> MQTT: Data cb=0x000001ca topic=pinnull� len=4
172162> cmdResponse: cmd=3 val=458 argc=2
172166> MQTT: Recv type=SUBACK id=0001 len=5; Pend type=SUBSCRIBE id=01[/spoiler]
Получается если в доме моргнул свет. То я тогда остаюсь без управления. А чтоб восстановить управление еду домой, захожу на 10 датчиков по десяти вебмордам и через них ресетаю десять ардуин? Какой то ужас. Очень странно такие умные люди сделали столько полезных вещей а тут такой просчет с ручным рессетом МК.starshoy81 писал(а): 18 мар 2018, 23:20Ардуине после включения питания нужна синхронизация с есп, для этого ардуину надо сбрасывать. Таковы условия работы библиотеки el-client.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Вообще то есп тоже перезагрузится в этом случае. И тогда синхронизация произойдёт. Вот если ардуина во время работы выключится, тогда да, надо будет её сбрасывать.CraCk писал(а): 19 мар 2018, 01:23Получается если в доме моргнул свет. То я тогда остаюсь без управления.
В логе есп видна только публикация, это после выключения питания обоих устройств?
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Да получается что есп дольше инцализуется чем ардуино, по этому есп и не успевает получить информацию о подписке. Нужно чтоб ардуино имело при первом запуске небольшую задержку перед инциализацией подписки.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Попробуйте в секцию Setup в начале добавить delay (3000);CraCk писал(а): 19 мар 2018, 11:36Нужно чтоб ардуино имело при первом запуске небольшую задержку перед инциализацией подписки.
-
- Лейтенант
- Сообщения: 674
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Да помогло то что доктор прописал. Проблема была в этому можно до 5сек. увеличить. А можно сделать так чтоб это действия повторялось во время работы? Например каждых 10минут. Для уверенности что клиент всегда подписан, при каких либо сбоях в питании или связи.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
В секцию LOOP - delay() вставлять не желательно, там нужно millis().
Я не помню как в библиотеке реализовано автоматическое переподключение, на днях себе буду делать подобное ....
А вообще должно быть что то типа такого:
if (mqtt.connected()) {
mqtt.loop();
Можно настроить аппаратный Watchdog на ардуино.
Можно раз в десять минут слать в какой нибудь топик данные, и подписаться на него, если данные приходят обратно - все ОК, если ответа нет - повтор - и ресет всему!
Я не помню как в библиотеке реализовано автоматическое переподключение, на днях себе буду делать подобное ....
А вообще должно быть что то типа такого:
if (mqtt.connected()) {
mqtt.loop();
Можно настроить аппаратный Watchdog на ардуино.
Можно раз в десять минут слать в какой нибудь топик данные, и подписаться на него, если данные приходят обратно - все ОК, если ответа нет - повтор - и ресет всему!
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Вообще то в программе и так присутствует подписка на топики ПОСЛЕ подключения к брокеру. Реализована в виде вызова функции при получении данных о соединении с брокером.
"В секцию LOOP - delay() вставлять не желательно, там нужно millis()." - я думаю пауза в loop убьет синхронизацию, так что не надо так делать.
"В секцию LOOP - delay() вставлять не желательно, там нужно millis()." - я думаю пауза в loop убьет синхронизацию, так что не надо так делать.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
А можно поподробнее?starshoy81 писал(а): 19 мар 2018, 15:35я думаю пауза в loop убьет синхронизацию, так что не надо так делать.
Там синхронизация есть какая то ?
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
[ref=#aa0000]Anydy[/ref], библиотека el-client использует протокол SLIP https://github.com/jeelabs/el-client, для взаимодействия с esp-link соответственно нужна синхронизация пакетов т.к.
"Принципы работы
В принимаемом потоке бит SLIP позволяет определить признаки начала и конца пакета IP. По этим признакам SLIP собирает полноценные пакеты IP и передаёт верхнему уровню. При отправлении IP-пакетов происходит обратная операция — они переформатируются и посимвольно отправляются получателю через последовательную линию.
Для передачи необходимо использовать конкретную конфигурацию UART: 8 бит данных (8 data bits), без контроля четности (no parity), аппаратное управление каналом передачи (EIA hardware flow control) или трёхпроводный нуль-модемный кабель (3-wire null-modem — CLOCAL mode)."
Да и собственно говоря ардуина никак не взаимодействует с брокером, это делает есп. Подключается, переподключается, публикует, получает. А ардуина получает обратные вызовы и гонит символьный поток в уарт и получает его обратно
"Принципы работы
В принимаемом потоке бит SLIP позволяет определить признаки начала и конца пакета IP. По этим признакам SLIP собирает полноценные пакеты IP и передаёт верхнему уровню. При отправлении IP-пакетов происходит обратная операция — они переформатируются и посимвольно отправляются получателю через последовательную линию.
Для передачи необходимо использовать конкретную конфигурацию UART: 8 бит данных (8 data bits), без контроля четности (no parity), аппаратное управление каналом передачи (EIA hardware flow control) или трёхпроводный нуль-модемный кабель (3-wire null-modem — CLOCAL mode)."
Да и собственно говоря ардуина никак не взаимодействует с брокером, это делает есп. Подключается, переподключается, публикует, получает. А ардуина получает обратные вызовы и гонит символьный поток в уарт и получает его обратно
Ардуино - WiFi мост на ESP8266 : ESP-LINK
То есть если в программе по прерыванию вызовется функция, и пока она не выполнится, то основной цикл будет остановлен.
В этом случае при возврате в основной цикл соединение с ЕСП или MQTT потеряется? Я не проверял...
В этом случае при возврате в основной цикл соединение с ЕСП или MQTT потеряется? Я не проверял...
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
Ардуино - WiFi мост на ESP8266 : ESP-LINK
с брокером нет, так как не ардуина с брокером соединяется, а есп.Anydy писал(а): 19 мар 2018, 17:38В этом случае при возврате в основной цикл соединение с ЕСП или MQTT потеряется?
А соединение есп с ардуиной потеряется или нет я не знаю, не пробовал такие опыты проводить.
Пока у меня аптайм 10 суток, висит на даче, мониторит зарядник от солнечных батарей. Каждые 10 сек запрашивает его по модбасу и раз в секунду публикует в один топик данные, топиков всего 11 штук.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость