Страница 1 из 8
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 15 окт 2017, 17:31
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
Пробуем, и дополняем!
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 15 окт 2017, 21:31
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.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 15 окт 2017, 21:59
Anydy
MQTT я проверял, работало))
По вашему вопросу завтра детально потестирую...
Добавлено (15.10.2017, 21:51)
---------------------------------------------
starshoy81 писал(а):Переменные topic и data используются только в пределах этой функции.
А если сделать так:
В Declare обьявить
String yes;
а в функции добавить:
yes = data;
может проканает?
Добавлено (15.10.2017, 21:59)
---------------------------------------------
starshoy81 писал(а):Интересует именно управление через mqtt.
Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266
Сцылка
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 15 окт 2017, 22:46
starshoy81
Anydy писал(а):А если сделать так:
В Declare обьявить
String yes;
а в функции добавить:
yes = data;
может проканает?
я пробовал - не прокатывает.
Anydy писал(а):Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266
Сцылка
в этой библиотеке используется эмуляция есп как модема через АТ команды. То есть часть сетевой нагрузки висит на ардуине. Плюс еспшка через АТ команды работает неоптимально. Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.
Добавлено (15.10.2017, 22:46)
---------------------------------------------
Anydy писал(а):MQTT я проверял, работало))
От правка на брокер без проблем идёт. Вопрос в обработке полученных данных.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 16 окт 2017, 18:04
Anydy
starshoy81 писал(а):Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.
Да, именно этим и приглянулась данная прошивка!
MQTT я бегло пока проверил, скетч из примера, отправка работала а прием не проверял ....вечером займусь...
Добавлено (16.10.2017, 18:04)
---------------------------------------------
starshoy81 писал(а):Однако как эти полученные данные использовать дальше в программе и откуда их взять для обработки я не могу понять - знаний не хватает. Переменные topic и data используются только в пределах этой функции.
Проверил, переменная data из функции прекрасно переносится в void loop! (как я выше написал - работает)
Дальше используйте как хотите!
Сейчас сооружу пример скетча и блок для FLprog...
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 16 окт 2017, 22:39
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);
}
}
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 16 окт 2017, 22:50
Anydy
starshoy81 писал(а):Отлично! У меня заработало
Молодец! Точно так же сделал!
Вот
пример скетча
А вот
Пользовательский блок
Это примеры, будем дальше допиливать!
А так же надо пробовать другие сервисы ...типа narodmon
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 18 окт 2017, 00:44
starshoy81
starshoy81 писал(а):От правка на брокер без проблем идёт.
В общем отправка данных на брокер требует некоторой подготовки данных. Данные отправляемые должны быть стринг, но конструкция которую делает Флпрог
эта библиотека не принимает. Нужно создавать символьный массив, преобразовывать переменную int в строку с занесением её в этот массив (буфер), а затем уже публиковать буфер вот так:
Код: Выделить всё
char buf[10];
itoa(_gtv2, buf, 10);
mqtt.publish("temp", buf);
, здесь _gtv2 это температура с dht.
массив можно декларировать сразу
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 24 окт 2017, 21:11
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 управление и контроль!
Блок и описание
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 24 окт 2017, 21:27
jonik22sm
Ребята помогите пожалуйста как организовать RemoteXY по данной схеме
Добавлено (24.10.2017, 21:27)
---------------------------------------------
Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266
ESP 8266 настроил Soft+AP
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 24 окт 2017, 21:35
Anydy
Здесь тема про ESP-LINK......У RemoteXY есть своя тема....
Попробуйте на ESP-LINK сделать через облако MQTTCloud ....бесплатно все полностью ....тогда подскажем!
Добавлено (24.10.2017, 21:35)
---------------------------------------------
jonik22sm писал(а):Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266
Ну наверное поросить у них искодники и установить у себя дома сервер!
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 24 окт 2017, 21:36
jonik22sm
Дайте ссылку гдеб я мог ознакомиться
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 26 ноя 2017, 15:07
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
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 09 дек 2017, 22:20
demonkol
starshoy81,
Может подскажите? У меня не работают почему-то Ваши блоки, даже Ваш пример тоже не работает в консоли в esp-Link вот что видно:
[spoiler=Спойлер][/spoiler]Enable SLIP on serial port и Enable MQTT client включил, пишет MQTT client state: connected Debug log отключил. Если загружаю из примеров в IDE- ELClient - mqtt то все отлично работает передается.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 09 дек 2017, 22:30
starshoy81
demonkol, надо нажать ресет сначала на есп, а потом на ардуине (или сбросить ардуину из страницы есплинк, если ресет ардуины подключен к есп) . После запуска программы нужна синхронизация уартов ардуины и есп, иначе не будет передачи данных через уарт. К Вас на скриншоте это написано - "NEED SYNC".
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 09 дек 2017, 22:46
demonkol
starshoy81, Не помогает выдает:
[spoiler=Спойлер]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[/spoiler]
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 09 дек 2017, 23:48
starshoy81
demonkol, выложите код который компилирует flprog.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 10 дек 2017, 10:29
demonkol
starshoy81, Пример ваш пробую. А версия esp-link у вас какая? У меня esp-link v3.0.14.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 10 дек 2017, 13:46
starshoy81
demonkol, попробуйте версию есп-линк 2.2.3. Я работал с ней.
В коде всё вроде в порядке.
Ардуино - WiFi мост на ESP8266 : ESP-LINK
Добавлено: 10 дек 2017, 14:14
demonkol
starshoy81, Да поставил версию 2.2.3 все заработало.