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

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

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

Сообщение Anydy »

Выпустить Ардуино в Мир очень просто!
Нужен лишь модуль 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
Пробуем, и дополняем!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

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 окт 2017, 21:33, всего редактировалось 1 раз.
Anydy

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

Сообщение Anydy »

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 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

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

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

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

Сообщение Anydy »

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

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

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

Сейчас сооружу пример скетча и блок для FLprog...
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

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

Сообщение Anydy »

starshoy81 писал(а):Отлично! У меня заработало
Молодец! Точно так же сделал!
Вот пример скетча
А вот Пользовательский блок
Это примеры, будем дальше допиливать!
А так же надо пробовать другие сервисы ...типа narodmon
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

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

Сообщение Anydy »

Да, библиотеке нужно массив *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
Капитан
Сообщения: 705
Зарегистрирован: 20 ноя 2015, 11:28
Откуда: Краснодар
Имя: Евгений
Контактная информация:

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

Сообщение jonik22sm »

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


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

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

Сообщение Anydy »

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

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

Добавлено (24.10.2017, 21:35)
---------------------------------------------
jonik22sm писал(а):Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266
Ну наверное поросить у них искодники и установить у себя дома сервер!
Аватара пользователя
jonik22sm
Капитан
Сообщения: 705
Зарегистрирован: 20 ноя 2015, 11:28
Откуда: Краснодар
Имя: Евгений
Контактная информация:

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

Сообщение jonik22sm »

Дайте ссылку гдеб я мог ознакомиться
Последний раз редактировалось jonik22sm 24 окт 2017, 21:37, всего редактировалось 1 раз.
Можно сделать ВСЁ. Было бы желание.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

Частный случай использования 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось starshoy81 03 мар 2018, 11:20, всего редактировалось 1 раз.
demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06 сен 2015, 08:29

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

Сообщение demonkol »

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

СпойлерSPOILER_SHOW
Enable SLIP on serial port и Enable MQTT client включил, пишет MQTT client state: connected Debug log отключил. Если загружаю из примеров в IDE- ELClient - mqtt то все отлично работает передается.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

demonkol, надо нажать ресет сначала на есп, а потом на ардуине (или сбросить ардуину из страницы есплинк, если ресет ардуины подключен к есп) . После запуска программы нужна синхронизация уартов ардуины и есп, иначе не будет передачи данных через уарт. К Вас на скриншоте это написано - "NEED SYNC".
demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06 сен 2015, 08:29

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

Сообщение demonkol »

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

СпойлерSPOILER_SHOW
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 дек 2017, 22:48, всего редактировалось 1 раз.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

demonkol, выложите код который компилирует flprog.
demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06 сен 2015, 08:29

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

Сообщение demonkol »

starshoy81, Пример ваш пробую. А версия esp-link у вас какая? У меня esp-link v3.0.14.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

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

Сообщение starshoy81 »

demonkol, попробуйте версию есп-линк 2.2.3. Я работал с ней.
В коде всё вроде в порядке.
Последний раз редактировалось starshoy81 10 дек 2017, 13:48, всего редактировалось 1 раз.
demonkol
Рядовой
Сообщения: 28
Зарегистрирован: 06 сен 2015, 08:29

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

Сообщение demonkol »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей