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

Контроллеры на основе ESP8266
Anydy

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

#1

Сообщение Anydy » 15.10.2017{, 17:31}

Выпустить Ардуино в Мир очень просто!
Нужен лишь модуль WiFi ESP8266, который прошивается прошивкой ESP-LINK
После чего мы можем:

-Организовать мост между микроконтроллером и ESP8266.
-Встроенный клиент MQTT позволяет публиковать и подписываться на топики.
-Технология REST - GET, POST, PUT, DELETE запросы.
-Поддержка отправки и приема пакетов сокетов UDP и широковещательных пакетов сокетов UDP
-Поддержка клиентов сокета TCP для отправки пакетов на TCP-сервер
-Поддержка сервера сокетов TCP для приема пакетов от клиентов сокета TCP и отправки ответов
-Возможность создания собственных WEB страниц для мониторинга и управления микроконтроллером
-Встроенная консоль Serial Port , логгирование, и некоторые другие функции.
+
-Возможность программирования микроконтроллера через WiFi (интернет)
Очень полезная штука!

Пользовательский блок для ардуино который переодически передает данные с датчика DS18B20 на сервис thingspeak.com
ESPLink_Thsp_(CODE).ubi
(16.84 КБ) 272 скачивания
Пробуем, и дополняем!

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

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

#2

Сообщение starshoy81 » 15.10.2017{, 21:31}

Anydy, я никак не могу понять как ардуина получает информацию от брокера mqtt с помощью этой библиотеки?

В примере библиотеки есть конструкция коллбэка:

Код: Выделить всё

// Callback when an MQTT message arrives for one of our subscriptions
void mqttData(void* response) {
  ELClientResponse *res = (ELClientResponse *)response;

  Serial.print("Received: topic=");
  String topic = res->popString();
  Serial.println(topic);

  Serial.print("data=");
  String data = res->popString();
  Serial.println(data);
}
с помощью которой осуществляется получение данных с брокера. Однако как эти полученные данные использовать дальше в программе и откуда их взять для обработки я не могу понять - знаний не хватает. Переменные topic и data используются только в пределах этой функции.

Дальше в секции loop есть такой код:

Код: Выделить всё

void loop() {
  esp.Process();

  if (connected && (millis()-last) > 4000) {
    Serial.println("publishing");
    char buf[12];

    itoa(count++, buf, 10);
    mqtt.publish("/esp-link/1", buf);
то есть публикуют в топик содержимое буфера, затем получают данные из этого топика, плюсуют к нему единицу преобразуют число в строку (itoa) и публикуют снова в тот же топик.
Как я понимаю в buf сидит некое число в int, но как оно туда помещается?
И каким образом сравнить топик полученный с топиком который прописан в программе для приема информации и получить данные из этого топика для дальнейшего их использования.
Интересует именно управление через mqtt.
Последний раз редактировалось starshoy81 15.10.2017{, 21:33}, всего редактировалось 1 раз.

Anydy

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

#3

Сообщение Anydy » 15.10.2017{, 21:59}

MQTT я проверял, работало))

По вашему вопросу завтра детально потестирую...

Добавлено (15.10.2017, 21:51)
---------------------------------------------
starshoy81 писал(а):Переменные topic и data используются только в пределах этой функции.
А если сделать так:
В Declare обьявить
String yes;
а в функции добавить:
yes = data;
может проканает?

Добавлено (15.10.2017, 21:59)
---------------------------------------------
starshoy81 писал(а):Интересует именно управление через mqtt.
Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266
Сцылка

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

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

#4

Сообщение starshoy81 » 15.10.2017{, 22:46}

Anydy писал(а):А если сделать так:
В Declare обьявить
String yes;
а в функции добавить:
yes = data;
может проканает?
я пробовал - не прокатывает.
Anydy писал(а):Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266
Сцылка
в этой библиотеке используется эмуляция есп как модема через АТ команды. То есть часть сетевой нагрузки висит на ардуине. Плюс еспшка через АТ команды работает неоптимально. Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.

Добавлено (15.10.2017, 22:46)
---------------------------------------------
Anydy писал(а):MQTT я проверял, работало))
От правка на брокер без проблем идёт. Вопрос в обработке полученных данных.

Anydy

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

#5

Сообщение Anydy » 16.10.2017{, 18:04}

starshoy81 писал(а):Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.
Да, именно этим и приглянулась данная прошивка!

MQTT я бегло пока проверил, скетч из примера, отправка работала а прием не проверял ....вечером займусь...

Добавлено (16.10.2017, 18:04)
---------------------------------------------
starshoy81 писал(а):Однако как эти полученные данные использовать дальше в программе и откуда их взять для обработки я не могу понять - знаний не хватает. Переменные topic и data используются только в пределах этой функции.
Проверил, переменная data из функции прекрасно переносится в void loop! (как я выше написал - работает)
Дальше используйте как хотите!

Сейчас сооружу пример скетча и блок для FLprog...

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

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

#6

Сообщение starshoy81 » 16.10.2017{, 22:39}

Anydy писал(а):Проверил, переменная data из функции прекрасно переносится в void loop! (как я выше написал - работает)
Дальше используйте как хотите!
Отлично! У меня заработало, присвоил переменной topic1 значение topic, а переменной data1 значение data. И замигал светодиодом . Видимо раньше я что то не так делал, потому что состояние светодиода не менялось от разных команд.

кусок кода

Код: Выделить всё

void mqttData(void* response) {
  ELClientResponse *res = (ELClientResponse *)response;

  Serial.print("Received: topic=");
  String topic = res->popString();
  Serial.println(topic);
topic1=topic;

  String data = res->popString();
  Serial.println(data);
  data1=data;
    
  
}
второй кусок кода

Код: Выделить всё

if (topic1 == "/esp-link/2" ) { //если пришло сообщение от топика
if (data1 == "on"){
    digitalWrite(13, 1);
}
if (data1 == "off"){
    digitalWrite(13, 0);
}
}

Anydy

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

#7

Сообщение Anydy » 16.10.2017{, 22:50}

starshoy81 писал(а):Отлично! У меня заработало
Молодец! Точно так же сделал!
Вот пример скетча
А вот Пользовательский блок
Это примеры, будем дальше допиливать!
А так же надо пробовать другие сервисы ...типа narodmon

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

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

#8

Сообщение starshoy81 » 18.10.2017{, 00:44}

starshoy81 писал(а):От правка на брокер без проблем идёт.
В общем отправка данных на брокер требует некоторой подготовки данных. Данные отправляемые должны быть стринг, но конструкция которую делает Флпрог

Код: Выделить всё

data_134000959_1 = (String(_gtv2, DEC));
эта библиотека не принимает. Нужно создавать символьный массив, преобразовывать переменную int в строку с занесением её в этот массив (буфер), а затем уже публиковать буфер вот так:

Код: Выделить всё

char buf[10];
itoa(_gtv2, buf, 10);
mqtt.publish("temp",  buf);
, здесь _gtv2 это температура с dht.
массив можно декларировать сразу

Anydy

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

#9

Сообщение Anydy » 24.10.2017{, 21:11}

Да, библиотеке нужно массив *char , так же как и в библиотеке PubSubClient

Делается просто!

Код: Выделить всё

String primer = "Preobrazovanie";
mqtt.publish("/topic/dom/wifi", (char*) primer.c_str());
Ну а число в строку можно и штатным блоком преобразовать.

Добавлено (24.10.2017, 21:11)
---------------------------------------------
Сделал пример пользовательского блока для отправки данных с датчика DS18B20 на сервис narodmon.ru через ESP8266
ESP-LINK с Ардуино оказывается очень просто и гибко настраивается!
Я теперь прошиваю ардуино которая в соседней комнате по WIFI не вставая с дивана! Удобно!
+ online MQTT управление и контроль!

Блок и описание

Аватара пользователя
jonik22sm
Капитан
Сообщения: 703
Зарегистрирован: 20.11.2015{, 11:28}
Репутация: 6
Откуда: Краснодар
Имя: Евгений
Контактная информация:

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

#10

Сообщение jonik22sm » 24.10.2017{, 21:27}

Ребята помогите пожалуйста как организовать RemoteXY по данной схеме


Добавлено (24.10.2017, 21:27)
---------------------------------------------
Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266
ESP 8266 настроил Soft+AP
Вложения
7489310.png
Можно сделать ВСЁ. Было бы желание.

Anydy

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

#11

Сообщение Anydy » 24.10.2017{, 21:35}

Здесь тема про ESP-LINK......У RemoteXY есть своя тема....

Попробуйте на ESP-LINK сделать через облако MQTTCloud ....бесплатно все полностью ....тогда подскажем!

Добавлено (24.10.2017, 21:35)
---------------------------------------------
jonik22sm писал(а):Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266
Ну наверное поросить у них искодники и установить у себя дома сервер!

Аватара пользователя
jonik22sm
Капитан
Сообщения: 703
Зарегистрирован: 20.11.2015{, 11:28}
Репутация: 6
Откуда: Краснодар
Имя: Евгений
Контактная информация:

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

#12

Сообщение jonik22sm » 24.10.2017{, 21:36}

Дайте ссылку гдеб я мог ознакомиться
Последний раз редактировалось jonik22sm 24.10.2017{, 21:37}, всего редактировалось 1 раз.
Можно сделать ВСЁ. Было бы желание.

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

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

#13

Сообщение starshoy81 » 26.11.2017{, 15:07}

Частный случай использования ESP-Link - работа с mqtt брокером. Я настроил брокер mosquitto на роутере с прошивкой openwrt. Брокер можно использовать любой. 
Как прошить есп-линк можно поискать в интернете, я могу предложить статью в которой хорошо расписан процесс и описаны пара подводных камней. Последняя версия прошивки есп-линк лежит на гитхабе. После прошивки и начальной настройки надо настроить есп для работы в с брокером: включить SLIP на странице MQTT, включить там же mqtt клиента, настроить его параметры, отключить лог на странице Debug log.

Далее - для работы ардуино и есп-линк нужна библиотека EL-client. Её нужно установить в IDE. Ссылка вот, файлик я приложу.

Для ФЛПрога я сделал блоки для работы с mqtt. Описание что к чему есть в самих блоках, а вкратце - блок Set  основная настройка, нужен один раз. Блок publish - публикация данных в топик, тип данных строка. Блок subscribe подписка на топик, с выходом данных в виде строки и двоичным выходом (если послать on в топик на выходе будет 1, если off то 0). Есть одна загвоздка, подписка на топик производится командой mqtt.subscribe("Topic"); внутри тела функции void mqttConnected(void* response), однако поместить эту команду в функцию через блок ФЛПрога мне не удалось, поэтому после компиляции ФЛПрогом нужно вручную перемещать (вырезать - вставить) команду mqtt.subscribe("Topic"); из раздела setup в тело функции void mqttConnected(void* response) в редакторе IDE. Может, более продвинутые товарищи подскажут - как решить эту проблему?

Для примера я приложу тестовый проект с датчиком DHT и выходом на светодиод с публикацией состояния этого выхода на брокер.
Плюс скетч который получился при компилировании проекта со сделанным переносом команды, по описанию выше.

Добавлено (26.11.2017, 15:07)
---------------------------------------------
Mqtt позволяет работать с системами "умного дома". Openhub, Majordomo, например, локально чем то управлять настроив брокер у себя на роутере.


Обновил блок подписки - исправлена ошибка. Блок подписки предыдущей версии можно удалить.
el-client_subsc.zip
(2.52 КБ) 180 скачиваний
Вложения
el-client.zip
(118.7 КБ) 178 скачиваний
mqtt_test.ino.ino
(5.17 КБ) 164 скачивания
mqtt_test-2-.flp
(880.35 КБ) 178 скачиваний
el-client-CODE-.zip
(114.63 КБ) 172 скачивания
Последний раз редактировалось starshoy81 03.03.2018{, 11:20}, всего редактировалось 1 раз.

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#14

Сообщение demonkol » 09.12.2017{, 22:20}

starshoy81
Может подскажите? У меня не работают почему-то Ваши блоки, даже Ваш пример тоже не работает в консоли в esp-Link вот что видно:

СпойлерПоказать
Enable SLIP on serial port и Enable MQTT client включил, пишет MQTT client state: connected Debug log отключил. Если загружаю из примеров в IDE- ELClient - mqtt то все отлично работает передается.
Вложения
1119531.png

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

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

#15

Сообщение starshoy81 » 09.12.2017{, 22:30}

demonkol, надо нажать ресет сначала на есп, а потом на ардуине (или сбросить ардуину из страницы есплинк, если ресет ардуины подключен к есп) . После запуска программы нужна синхронизация уартов ардуины и есп, иначе не будет передачи данных через уарт. К Вас на скриншоте это написано - "NEED SYNC".

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#16

Сообщение demonkol » 09.12.2017{, 22:46}

starshoy81, Не помогает выдает:

СпойлерПоказать
ConnectedCB is 0x1AAELC: got 10 @277: 1 0 0 BF 81
NEED_SYNC!
ELC: got 10 @277: 1 0 0 BF 81
NEED_SYNC!
ELC: got 10 @277: 1 0 0 BF 81
Последний раз редактировалось demonkol 09.12.2017{, 22:48}, всего редактировалось 1 раз.

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

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

#17

Сообщение starshoy81 » 09.12.2017{, 23:48}

demonkol, выложите код который компилирует flprog.

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#18

Сообщение demonkol » 10.12.2017{, 10:29}

starshoy81, Пример ваш пробую. А версия esp-link у вас какая? У меня esp-link v3.0.14.
Вложения
pr1.ino
(5.19 КБ) 142 скачивания

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

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

#19

Сообщение starshoy81 » 10.12.2017{, 13:46}

demonkol, попробуйте версию есп-линк 2.2.3. Я работал с ней.
В коде всё вроде в порядке.
Последний раз редактировалось starshoy81 10.12.2017{, 13:48}, всего редактировалось 1 раз.

demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06.09.2015{, 08:29}
Репутация: 0

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

#20

Сообщение demonkol » 10.12.2017{, 14:14}

starshoy81, Да поставил версию 2.2.3 все заработало.

Ответить

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