• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Передача данных между несколькими ESP8266

GSV_01

New member
Прошу помощи,так как с wi-fi почти не знаком.
Хотел сделать управление нагрузками на ESP8266. Идея такая: при каком-то событии на МК(нажали кнопку) в МК формируется команда,10-12 символов,или цифр. Через UART команда подается на ESP8266 и отправляется на другой ESP8266. Там команда принимается,подается через UART на МК1 и включается нагрузка.Как только включилась нагрузка МК1 формирует команду ответа,например "Load ON" и отправляет ее на МК.
Как правильно настроить двухстороннюю связь между двумя модулями ESP8266?
Хотелось бы узнать алгоритм организации такой связи.
shema.JPG
 

Victor

Administrator
Команда форума
На одном модуле делаете точку доступа(AP), на другом клиента(STA). IP-Клиент - инициатор соединения, поэтому делаете его у кнопки, на другом конце поднимаете HTTP сервер. Если энергопотребление не важно, то не важно где и AP. Можно вообще оба модуля включить в режим BOTH (и станция и точка доступа и подключаться друг к другу - более сложно реализовать, меньше надежность). Если только кнопка и нагрузка, то оба МК не нужны при использовании прошивки NodeMCU (скрипты на lua). Если с МК то попробуйте прошивку с АТ командами.
Надежность только пока не промышленная, только для домашних поделок.
Еще обратите внимание на эти проекты http://esp8266.ru/forum/threads/razrabotka-biblioteki-malogo-webservera-na-esp8266.56/ и http://esp8266.ru/forum/threads/proshivka-tcp2uart-perexodnika-s-nastrojkoj-po-web.146/
 

GSV_01

New member
Скрипты на Lua вряд ли осилю,потому и хотел использовать ESP8266 как приемник\передатчик,а управлять всем этим будут внешние МК через АТ команды ESP8266. Сейчас на модуле прошивка 00200.9.4,этого должно хватить? Поделка домашняя,так что можно экспериментировать с надежностью.Не совсем понятно,как поднять HTTPсервер.
Если я правильно понял,HTTP сервер-это TCP ,или UDP?Должно быть что-то одно?
 

Victor

Administrator
Команда форума
1. Обязательно АТ прошивку обновить до AT v0.22 SDK 1.0.0 20.03.2015 загрузчик v1.2
2. Прочитать ESP8266 AT Instruction Set v0.22 20.03.2015 (если с английским не очень, то посмотреть описание предыдущей версии на русском ESP8266 AT команды v0.21)
внимание на AT+CIPSERVER и решить нужен вам HTTP сервер для мониторинга, например, или хватит TCP/IP.
Имея МК нетрудно html слать в ESP8266 если TCP/IP соединения вы уже настроите, а функциональность существенно добавится
 

JustACat

Moderator
Команда форума
Victor, что ж вы человеку сразу голову HTTP сервером забиваете, у него конкретно описана задача (четко и ясно, что, надо сказать - замечательно!) - связать два устройства по WiFi через ESP.
Надо сначала решить ее, а уж потом к более сложному переходить :) Имхо, конечно.

GSV_01, в остальном Victor полностью прав - обновите прошивку на последнюю, факт уже, что она стабильнее.
- Дальше обзаведитесь 2-мя USB-UART переходниками (если у вас их уже нет)
- С помощью этих 2-х переходников подключите ваши два модуля ESP к ПК (да-да, не нужно сразу цеплять к МК, нужно сначала разобраться с AT командами и отладить работу на ПК).
- На ПК подключитесь к обоим ESP сразу парой копий какой-нибудь терминальной программы: рекомендуется ESPLorer и Terminal (ссылки у меня в подписи).
- И тут ваша задача: управляя через терминалы обоими ESP с ПК, настроить их так, чтобы между ними образовалась связь.
Конкретно в вашем случае я бы делал так:
- на 1 ESP поднимаем AP точку доступа (настройки сохраняем во flash, тогда она будет подниматься сама автоматом при включении)
- на 2 ESP настраиваем режим Station (подключаемся к той AP на 1 ESP)
- на 1 ESP поднимаем TCP-сервер (для начала) (у меня в подписи есть пример поднятия, только на прошивке версии 0.21, так что на 0.22 будет немного иначе, имейте это ввиду)
- на 2 ESP, соответственно подключаемся TCP-клиентом к тому серверу
И вот тут получается, что у нас есть соединение, можно слать данные. Тогда уже можно будет заменять соединение через переходник с ПК на ваш МК и управлять всем с него.

Подробнее нужно смотреть в документации, как минимум 6 имеющихся pdf'ок по ESP осилить стоит, хотя бы в общем. Ну и примеры посмотреть. (все есть по ссылке на документацию у меня в подписи)

А вот дальше, если будет желание, имейте ввиду: действительно на ESP можно поднять простенький, но полноценный Web-сервер (HTTP), и тогда управлять этим делом можно будет с любого устройства с браузером, например, с мобильника.
То есть в вашем примере на картинке вся правая часть "ESP+МК+кнопка" заменяется на мобильник (планшет, ПК) с браузером, в котором мы видим статус, и управляем.
Примеры по этому поводу тоже присутствуют, обязательно посмотрите список примеров.
 

GSV_01

New member
JustACat,
Спасибо за подробный ответ.
Я поставил на телефон UDP TCP Server - Free и с его помощью вполне получается управлять ESP, то есть я нажимаю кнопку на смартфоне и ESP получает и выводит по UART в терминал слово,присвоенное этой кнопке,но получить обратную связь от ESP не могу.
 

JustACat

Moderator
Команда форума
GSV_01, пишите подробнее. Проблема легко может быть как раз в этом самом UDP TCP Server - Free.
 

GSV_01

New member
JustACat, Следуя Вашим инструкциям все получилось на удивление легко. Два ESP передают и принимают друг другу данные. Отсюда возникло еще несколько вопросов:
1. Возможно ли одним ESP управлять сразу,например, тремя разными ESP?
2. Возможно ли одним ESP управлять другим ESP(или несколькими) через домашний роутер?
3.Какой механизм организации Web-сервера (HTTP) на ESP?
Просмотрел все примеры в списке ,но не смог подобрать для себя ничего подходящего,так как пишу только простенький код на бейсике, а там и Lua,и С,и ардуино. У меня более-менее получается управлять с помощью АТ команд, есть некоторый опыт в написании кода управления для GSM модулей Simcom и Neoway,правда команд там гораздо больше.
Просветите,если несложно,или может направите на правильные ресурсы.
 

JustACat

Moderator
Команда форума
GSV_01, так, попробую коротко:
1. Да.
2. Да.
3. На самом деле вариантов масса.

Давайте уточним: вы пишете, что для вас наиболее предпочтителен вариант готовой AT прошивки и управления ею.
Ок. Но ведь вы же будете с чего-то ею управлять, так? Каким-то сторонним МК. На этот МК вам тоже придется писать прошивку.
Вот опишите подробнее, что это за сторонний МК и на чем вы под него пишете.

PS: на самом деле приятно помогать человеку, который, во-первых, вопросы формулирует корректно, старается, а, во-вторых, сам пытается разобраться и разбирается - это вам плюс! :)
 

GSV_01

New member
JustACat, спасибо за положительные отзывы о моих скромных способностях:)
Как раз наоборот,со сторонней прошивкой мне не справиться. Прошивку для управляющих МК хотел сделать сам с использованием АТ команд самого ESP на атмеловских мегах на Bascom Avr, а ESP будет выполнять функии прием/передача. Вот так задумывалось.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
А, вот Bascom Avr - вот это я и хотел узнать. Что ж, это не весело. Ну то есть если бы, например, вы сказали, что сторонний МК - это AVR (что так и есть), и вы пишете под него на Arduino/Wiring (а вот это как раз не ваш случай), я бы знал, куда вас дальше послать.
Хм, просто работа на AT прошивках ESP - тот еще геморрой, на самом деле. И тем более, если вы хотите поднять на AVR web-сервер через ESP...
Смысл в том, что всю работу собственно Web-server'а вам придется прописать самостоятельно на этом самом Бэйсике под вашу AVR.
То есть ESP в данном случае только осуществит канал связи, а работу с реакцией на запросы от браузера к вашему МК вам придется прописывать самостоятельно.
Вы представляете хотя бы примерно что это и как это?
Если ответ - да - тогда можно попробовать. Если - нет - тогда, мне кажется, вам будет проще начать постигать еще один язык (пока не забегаем вперед, какой конкретно).

Еще варианты: использовать чью-то упрощенную прошивку. @Victor как раз недавно выкладывал пример такой где-то тут рядом: http://esp8266.ru/forum/threads/novaja-proshivka-dlja-nachinajuschix.214/ - посмотрите, что скажете?

Ну или как вариант - отказаться все таки от идеи WebServer'а...

Едем далее - снова по вашим вопросам:
1. Уточните, вы хотите, чтобы ESP поднимала точку доступа, а другие ESP к ней подключались, или все же вас устроит вариант с домашним роутером?
2. Теоретически, все точно так же, как в случае с соединением 1 к 1:
- то есть все ESP подключаются к вашей домашней сети (режим Station) и получают разные IP адреса.
- на всех ESP, которыми вы хотите управлять, вы поднимаете TCP-сервер и ждете соединений
- на том одном ESP - с которого вы хотите управлять остальными - при желании поуправлять каким-либо из ESP - вы создаете соединение (режим TCP-клиент) с одним из серверов на других ESP
- ну и при созданном соединении шлете данные
3. с этим вопросом написал выше...
 

JustACat

Moderator
Команда форума
И все таки, хотя бы обдумайте мысль о том, чтобы сменить язык... Понятное дело, что это не всегда просто. Но.
Я бы порекомендовал Lua, но в случае с ESP там можно хлебнуть столько непонятных проблем, что ух...
В итоге, раз вам AVR не чужды, все же лучше подумать на счет Arduino/Wiring/Си/Си++ что на этот счет можете сказать?
 

GSV_01

New member
Все понял,Web-сервер вычеркиваем. Но хотел бы попробовать оставшиеся два варианта:
ESP-точка доступа,другие ESP подключаются к ней,
Вариант с домашним роутером.
Все же роутер-это не такая мобильная конструкция как автономная сеть из одних ESP,поэтому хотел бы изучить и то и то.
Что касаемо другого языка... Есть уже, хоть и небольшое количество наработок ,но все же :),а на изучение другого языка времени совсем не остается,хотя кучу материалов по Си я уже накачал и даже просмотрел самое начало.
 

JustACat

Moderator
Команда форума
Но хотел бы попробовать оставшиеся два варианта
Ну ок, давайте вы будете пробовать, и, если что-то непонятно или не получается - спрашивать :) Я по возможности помогу.
По варианту без роутера скажу сразу: 1 ESP в качестве точки доступа не тянет более 4 подключенных к ней клиентов.

хотя кучу материалов по Си
Я бы вам посоветовал посмотреть в сторону Arduino (языка там конечно Си, точнее Wiring - надстройка над Си, но это все равно совсем не то же самое, что писать по чистому, там многое уже написано до нас). Хотя бы попробовать, скачать, скомпилировать и залить один из примеров в какую-то из ваших AVR'ок.
Зайдите на http://arduino.cc/ скачайте, поставьте и попробуйте.
На русском посоветую вот эти вот ссылки:
http://amperka.ru/page/what-is-arduino
http://robocraft.ru/blog/arduino/
http://arduino.ru/
Почему именно так? А потому что как раз сейчас тут у нас очень хорошие люди пытаются упростить систему программирования под ESP до уровня Arduino и сделать возможным использование библиотек от последней на ESP. Так что это сразу кучу зайцев одним выстрелом, так сказать.
 

GSV_01

New member
Вечер добрый.
Задумка в посте№1 практически полностью реализовалась. ESP работают как напрямую между собой,так и через роутер,к тому же одним из них можно вполне успешно управлять с внешнего устройства(Андроид смартфон+WiFi TCP/UDP Controller)В процессе экспериментов передающим МК был даже маленький Tiny13 с софтовым UART,но работало неплохо,правда памяти все же маловато. Совсем немного удалось передать из МК через ESP в браузер и тут возникло несколько вопросов. Делал так:
в браузере я ввожу адрес ESP ,браузер шлет запрос в МК,там из полученного текста вытаскиваю GET. Если GET пришел, МК увеличивает счетчик на единицу и отправляет в браузет слово"TEST" и число. Но GET может послать только браузер.Выглядит это так:

test.JPG
Хотел бы узнать,можно ли от МК послать что-то похожее на GET в браузер и получить от него ответ,так как в АТ командах такого не нашел.
И есть ли в природе какой-нибудь несложный конструктор, с помощью которого можно было бы собрать свой простенький браузер для общения с МК?
 

Вложения

JustACat

Moderator
Команда форума
можно ли от МК послать что-то похожее на GET в браузер и получить от него ответ
В простом понимании - Нет. Весь web устроен так (подчеркну: в простом понимании), что браузер всегда является инициатором соединения, всегда именно браузер (он является клиентом) запрашивает что-то у web-сервера, а тот реагирует и что-то возвращает.
Обычно на сайтах динамика в страничках реализуется так:
- браузер запрашивает у web-сервера страничку
- сервер возвращает страничку: HTML (разметка+данные) + CSS (для оформления) + JavaScript (как раз для выполнения неких программ на стороне браузера), ну еще могут быть картинки, шрифты, да много чего.
- как только браузер полностью получает страничку со всеми "вложениями" - он начинает выполнять JS-скрипты (если они к страничке приложены)
- на JS-скриптах мы пишем как раз код, который так называемым ajax методом периодически шлет опять же запросы на сервер (по сути шлет их конечно же браузер, по команде из JS-скрипта)
- естественно эти запросы отличаются как-то от основного (например - идут на другую страничку, либо имеют некие ключи в URL) и web-сервер на них выдает уже не полноценные странички, а данные в чистом виде (ну либо в случае с МК в качестве сервера, он еще может выполнить какие-то действия, получить какие-то данные с датчиков и выдать именно их)
- браузер возвращает полученные данные в наш JS-скрипт, а тот уже в свою очередь помещает их куда-либо в нашей страничке (в табличку там, или в текстовое поле, да мало ли)
- далее все повторяется
То есть JS-скрипт может запрашивать либо периодически по таймеру данные у сервера, либо по какой-то активности пользователя (нажал на кнопку, либо просто мышкой куда-то указал, либо букву нажал на клавиатуре и т.п.).
Вот примерно так...

PS: я уже как-то вкратце писал общую реализацию со ссылками на то, что почитать по web вот тут в спойлере с названием "Спрятал, чтобы не оффтопить"...
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Попробуйте этот: http://esp8266.ru/forum/threads/app-inventor.236/ - не знаю, на сколько он несложный. Кому как.
Мне проще свою программу написать (что для ПК, что под андроид - про это даже есть бесплатные уроки).

А может я опять же вас совсем не так понял, и вы хотите нечто другое? :)
 
Сверху Снизу