Страница 3 из 8

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

Добавлено: 11 мар 2018, 07:56
Халил
Mqtt buddy попробуй, там есть возможность включать и выключать по расписанию.

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 18 мар 2018, 18:25
CraCk
Будем надеется что автор блоков [ref]starshoy81[/ref], что то доработает в блоках, для надежной работы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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