Ардуино - WiFi мост на ESP8266 : ESP-LINK

Контроллеры на основе ESP8266
Халил
Рядовой
Сообщения: 36
Зарегистрирован: 19.01.2018{, 01:37}
Репутация: 5

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#41

Сообщение Халил » 11.03.2018{, 07:56}

Mqtt buddy попробуй, там есть возможность включать и выключать по расписанию.

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#42

Сообщение Anydy » 11.03.2018{, 09:10}

CraCk писал(а):
10.03.2018{, 22:06}
Может Вы подскажите какие есть приложение конструктор в котором можно все собирать визуально
Ну не нужно так расслабляться ...визуальное программирование это для начинающих!
FLProg создана для новичков, .... либо для "профи" быстро создать проект

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#43

Сообщение CraCk » 17.03.2018{, 01:41}

Дошел к стадии: Установлен IObroker+IoT MQTT Dashboard на мобильном телефоне+ESP8266 и pro mini.
На телефоне щелкаю переключатель моргая этим на ардуине пином 13, в то время ардуина отправляет на брокер рандомные значения каждых 2сек.
Все работает пока есть питание. Как только отключаю и повторно включаю питание. Данные ардуино перестает принимать, то есть не моргает пин13, но публикация на брокер восстанавливаться и рандомные цифры брокер принимает. И для того чтоб восстановить работу подписки на ардуине приходится в морде esp-link делать рестарт ESP8266 и следом за ней ардуинку. Что посоветуете?
Такое ощущение что где то еще баг зарыт в блоке подписка. Блок обновил до 0.1V
Вложения
Mqtt+esp8266+pro mini.flp
(822.38 КБ) 86 скачиваний

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#44

Сообщение CraCk » 17.03.2018{, 22:56}

Проведен тест с arduino nano результат тот же. Пробовал скорость связи между ESP и ардуиной уменьшить до 57600, не помогло :unsure: .

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#45

Сообщение Anydy » 18.03.2018{, 06:27}

Могу предположить что у вас при старте ардуины подписка на топик происходит в то время, пока ESP еще не подключился к сети и к брокеру. Ведь подписка на топики происходит один раз при старте ардуино в секции Setup.
Пробуйте выводить в консоль отладочные данные с помощью Serialprint.

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#46

Сообщение CraCk » 18.03.2018{, 15:44}

Anydy писал(а):
18.03.2018{, 06:27}
Могу предположить что у вас при старте ардуины подписка на топик происходит в то время, пока ESP еще не подключился к сети и к брокеру.
Что то такое получается. Если вовремя работы ресетнуть только ESP. То тогда мы теряем только подписку, публикация на сервер восстанавливается. Для того чтоб восстановить подписку нужно кнопку ресет на про мини нажать. Так понимаю при ресете ардуина передает информация на какие топики она подписана. Но это происходит только при первом запуске. Можно как то заставить инциализироватся ардуино не только при первом запуске, но и вовремя работы или с небольшой задержкой, пока ESP не придет в себя и будет готова к отправке информации о подписке на брокер?

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#47

Сообщение Anydy » 18.03.2018{, 16:49}

Я долго не гонял ESP + ESP-LINK + arduino + ElClient, вроде работало без проблем.....
У меня задача была удаленно управлять через GPRS.
Алгоритм такой:
Подключаемся к WIFI, если подключены - подключаемся к MQTT, если подключены - подписываемся на топики, публикуем в топики...
Это все в SETUP, в LOOP же должна идти постоянная проверка соединения, если есть коннект, то можно публиковать, подписываться, отписываться....и т.д. Если нет коннекта к MQTT - переподключаемся или ресетим ESP.
ElClient же вроде на основе PubSubClient ....

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#48

Сообщение CraCk » 18.03.2018{, 18:25}

Будем надеется что автор блоков starshoy81, что то доработает в блоках, для надежной работы.

starshoy81
Лейтенант
Сообщения: 525
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#49

Сообщение starshoy81 » 18.03.2018{, 22:53}

CraCk, а вы переносили подписку на топик в функцию "void mqttConnected" в самом скетче? Что именно вы отправляете в топик, на который подписана ардуина?
Ардуине после включения питания нужна синхронизация с есп, для этого ардуину надо сбрасывать. Таковы условия работы библиотеки el-client.
Чтобы посмотреть данные которые гоняются через уарт, надо включить на странице отладки есп вывод в уарт 1, в нём будет видно подписка и публикация.
Можно ещё раскомментировать вывод в уарт в секции void mqttData скетча.

Отправлено спустя 26 минут 53 секунды:
Кстати, посмотрел скетч из вашего проекта - по умолчанию подписка располагается в setup, поэтому у вас и не подписывается на тему без пересброса питания. Нужно перенести строку с подпиской из setup в функцию void mqttConnected в скетче. Про это написано в описании блока.

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#50

Сообщение CraCk » 19.03.2018{, 01:23}

starshoy81 писал(а):
18.03.2018{, 23:20}
CraCk, а вы переносили подписку на топик в функцию "void mqttConnected" в самом скетче? Что именно вы отправляете в топик, на который подписана ардуина?
starshoy81 писал(а):
18.03.2018{, 23:20}
Кстати, посмотрел скетч из вашего проекта - по умолчанию подписка располагается в setup, поэтому у вас и не подписывается на тему без пересброса питания.
Условие выполнял обязательно. Просто посчитал что нет смысла выкладывать редактированный .ino фаил.
starshoy81 писал(а):
18.03.2018{, 23:20}
Чтобы посмотреть данные которые гоняются через уарт, надо включить на странице отладки есп вывод в уарт 1, в нём будет видно подписка и публикация.
При рестарте выдает такое ESP. Ардуино не трогал.
СпойлерПоказать
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
Потрогал ардуино. Сделал ресет кнопкой.
СпойлерПоказать
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
starshoy81 писал(а):
18.03.2018{, 23:20}
Ардуине после включения питания нужна синхронизация с есп, для этого ардуину надо сбрасывать. Таковы условия работы библиотеки el-client.
Получается если в доме моргнул свет. То я тогда остаюсь без управления. А чтоб восстановить управление еду домой, захожу на 10 датчиков по десяти вебмордам и через них ресетаю десять ардуин? Какой то ужас. Очень странно такие умные люди сделали столько полезных вещей а тут такой просчет с ручным рессетом МК.

starshoy81
Лейтенант
Сообщения: 525
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#51

Сообщение starshoy81 » 19.03.2018{, 10:52}

CraCk писал(а):
19.03.2018{, 01:23}
Получается если в доме моргнул свет. То я тогда остаюсь без управления.
Вообще то есп тоже перезагрузится в этом случае. И тогда синхронизация произойдёт. Вот если ардуина во время работы выключится, тогда да, надо будет её сбрасывать.
В логе есп видна только публикация, это после выключения питания обоих устройств?

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#52

Сообщение CraCk » 19.03.2018{, 11:36}

starshoy81 писал(а):
19.03.2018{, 10:52}
есп видна только публикация, это после выключения питания
Да получается что есп дольше инцализуется чем ардуино, по этому есп и не успевает получить информацию о подписке. Нужно чтоб ардуино имело при первом запуске небольшую задержку перед инциализацией подписки.

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#53

Сообщение Anydy » 19.03.2018{, 12:57}

CraCk писал(а):
19.03.2018{, 11:36}
Нужно чтоб ардуино имело при первом запуске небольшую задержку перед инциализацией подписки.
Попробуйте в секцию Setup в начале добавить delay (3000);

Аватара пользователя
CraCk
Лейтенант
Сообщения: 600
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 9

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#54

Сообщение CraCk » 19.03.2018{, 14:01}

Anydy писал(а):
19.03.2018{, 12:57}
Попробуйте в секцию Setup в начале добавить delay (3000);
Да помогло то что доктор прописал. Проблема была в этому можно до 5сек. увеличить. А можно сделать так чтоб это действия повторялось во время работы? Например каждых 10минут. Для уверенности что клиент всегда подписан, при каких либо сбоях в питании или связи.

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#55

Сообщение Anydy » 19.03.2018{, 15:12}

В секцию LOOP - delay() вставлять не желательно, там нужно millis().
Я не помню как в библиотеке реализовано автоматическое переподключение, на днях себе буду делать подобное ....
А вообще должно быть что то типа такого:
if (mqtt.connected()) {
mqtt.loop();

Можно настроить аппаратный Watchdog на ардуино.
Можно раз в десять минут слать в какой нибудь топик данные, и подписаться на него, если данные приходят обратно - все ОК, если ответа нет - повтор - и ресет всему!

starshoy81
Лейтенант
Сообщения: 525
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#56

Сообщение starshoy81 » 19.03.2018{, 15:35}

Вообще то в программе и так присутствует подписка на топики ПОСЛЕ подключения к брокеру. Реализована в виде вызова функции при получении данных о соединении с брокером.
"В секцию LOOP - delay() вставлять не желательно, там нужно millis()." - я думаю пауза в loop убьет синхронизацию, так что не надо так делать.

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#57

Сообщение Anydy » 19.03.2018{, 15:39}

starshoy81 писал(а):
19.03.2018{, 15:35}
я думаю пауза в loop убьет синхронизацию, так что не надо так делать.
А можно поподробнее?
Там синхронизация есть какая то ?

starshoy81
Лейтенант
Сообщения: 525
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#58

Сообщение starshoy81 » 19.03.2018{, 16:18}

Anydy, библиотека 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)."
Да и собственно говоря ардуина никак не взаимодействует с брокером, это делает есп. Подключается, переподключается, публикует, получает. А ардуина получает обратные вызовы и гонит символьный поток в уарт и получает его обратно

Аватара пользователя
Anydy
Администратор
Сообщения: 3286
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 279
Имя: Андрей

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#59

Сообщение Anydy » 19.03.2018{, 17:38}

То есть если в программе по прерыванию вызовется функция, и пока она не выполнится, то основной цикл будет остановлен.
В этом случае при возврате в основной цикл соединение с ЕСП или MQTT потеряется? Я не проверял...

starshoy81
Лейтенант
Сообщения: 525
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Ардуино - WiFi мост на ESP8266 : ESP-LINK

#60

Сообщение starshoy81 » 19.03.2018{, 22:32}

Anydy писал(а):
19.03.2018{, 17:38}
В этом случае при возврате в основной цикл соединение с ЕСП или MQTT потеряется?
с брокером нет, так как не ардуина с брокером соединяется, а есп.
А соединение есп с ардуиной потеряется или нет я не знаю, не пробовал такие опыты проводить.
Пока у меня аптайм 10 суток, висит на даче, мониторит зарядник от солнечных батарей. Каждые 10 сек запрашивает его по модбасу и раз в секунду публикует в один топик данные, топиков всего 11 штук.

Ответить

Вернуться в «ESP8266»