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

Организация сети на модулях esp8266. вопросы.

Требуется решить задачу по дистанционному включению четырех ламп светофора четырьмя отдельными кнопками (пультами). Расстояние между каждой кнопкой и светофором ~200 метров в пределах прямой видимости (поле), без препятствий. При этом кратковременное однократное нажатие любой из четырех кнопок должно включать "свою" лампу светофора на 3 секунды. Использование дополнительных процессоров/контроллеров на передающей стороне (кнопки) исключено, на приемной стороне (светофор) не желательно, но допустимо (например - контроллер ATMega, или готовая плата Arduino). Питание кнопки - LiFe батарея (3,2 вольта), светофора - обычный автомобильный аккумулятор (12 вольт).

Вопросы:
1) Возможно ли построить сеть на базе esp8266, без использования дополнительных процессоров на приемной стороне (в светофоре)?
2) Возможно ли внутренним таймером 8266 формировать временнЫе интервалы (3 секунды) для каждой лампы?

Вынужден признаться, что опыта работы с WIFI устройствами у меня нет...
И добавить - проект НЕ коммерческий, и предложить материальную компенсацию за помощь я, скорее всего, не смогу. Поэтому прошу хотя бы просто ответить на поставленные выше вопросы, чтобы не топтаться на месте в поисках невозможного решения.
Если же подскажете, куда копать, или где подсмотреть готовое (аналогичное) решение, моя виртуальная признательность и благодарность будут безграничны! :)
 

JustACat

Moderator
Команда форума
Уверен, что 1 - да и 2 - да.
А дальше куда - ну, все зависит от того, что вы получить хотите. Если особая надежность не требуется - попробуйте по быстрому на NodeMCU сварганить, по идее задача простая совсем. Если нужна таки больше стабильность, то, думаю, лучше поизучать вопрос написания собственной прошивки на Си.
Информация как по NodeMCU, так и по написанию своей прошивки есть тут на форуме. По крайней мере отправные точки в соответствующих разделах.
А уж в интернете по ESP8266 уже столько всего писано и даже видео на ютубах для тех, кому читать не нравится, а нравится смотреть и слушать :)
 
Спасибо за ответ, JustACat!
Читать нравится, уже скачал всю доку по ESP, что смог найти. Курю. Но пока - не в затяжку. Базовых знаний маловато. Но хотя время лечит, его-то как раз и не хватает. Форум просмотрел практически весь, и не по диагонали.
Если я правильно понял, то у ESP-01 всего 2 доступных GPIO? Если с гразным хаком, то можно добавить еще парочку. (Кажется нашел - ESP-7, 12. Есть еще варианты?)
Какой релиз ESP имеет хотя бы 4-5 разведенных пинов GPIO?
Где почитать про организацию сервера на 8266 (на приемной стороне)? Или этого не нужно, и сеть можно организовать проще?
К сожалению, пока не нашел ничего о структуре встроенного таймера и клока реалтайм в этом модуле. Куда посмотреть?

Конкретизирую задачу: это система сигнализации при проведении детских спортивных мероприятий. И хотя точность таймингов не имеет большого значения, хотелось бы получить задержку между начальным и конечным событиями (нажатие кнопки и включение светофора) не больше десятка миллисекунд. Это реально?
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Время - это такой же точно ресурс, как и деньги ;) Так что по сути: "нет времени" и "нет денег" - это обычно где-то рядом ходит. У меня со временем тоже вот туго, работы много основной. Поэтому ESP-шками (и вообще железками) выходит заниматься лишь изредка (может 1-2 дня в 2 недели)... Но так как занимаюсь тоже исключительно для себя, а не на продажу, то, в принципе, ничего страшного. Ну реализую я то, что задумал, не через неделю, а, скажем, через пол года, и что с того? :) Но это оффтоп.

Теперь по делу:
Не знаю, кто как, но для себя сразу отказался от ESP-01, смысла в них вообще не вижу. Брал 07 и 12 (чтобы сравнить качество связи на керамике и PCB антенне).
Подробнее как раз отписался недавно тут: http://esp8266.ru/forum/threads/apparatnaja-oshibka-na-module-esp-07.110/#post-1985
Про GPIO: http://esp8266.ru/esp8266-gpio-registers/ и дальше по ссылкам - все описаны.
По модулям, например: http://esp8266.ru/modules-esp8266/ - опять же, выбор сделать можно (я вообще выбирал чисто по фоткам и описанию на страничках лотов на aliexpress - там и покупал).

По программщине, еще раз: решите, с какой стороны вы хотите подойти. Задайте четче условия. Что вам важнее: надежность или скорость разработки. Какие знания каких языков у вас может быть есть уже? Никто же к вам в голову не залезет, чтобы это узнать :)
А так реализовать сервер можно и на AT-прошивке с использованием внешнего дополнительного МК.
Можно реализовать на NodeMCU по быстрому, написав на lua. Но там можно нахватать кирпичей в связи с общей глючностью как SDK от espressif так и самого NodeMCU.
В идеале - написать нечто свое на Си - это, наверное, самый правильный с точки зрения надежности вариант. И тут тогда стоит смотреть в сторону этого: http://esp8266.ru/forum/threads/razrabotka-biblioteki-malogo-webservera-na-esp8266.56/ - как мне кажется. Использовать как пример, разбираться, и писать свое.
Вариантов масса, и, как уже сказал - информация тоже есть. Да, может не так обширно и доступно, как с Ардуинами какими-нибудь. Ну, что поделать :) Что есть.

По поводу задержек: сам пока столкнулся с тем, что из режима сна ESP-шка может выходить долго. Да и в рабочем режиме, если обмена данными не было какое-то время (несколько секунд/минут), то первы пакет долго может идти.
Так что я бы в таком случае использовал некие keep-alive пакеты и не пользовал бы в пультах сон вообще. Чтобы пульты постоянно слали с некой периодичностью на мастер пакетики, пусть даже пустые. Но увы - это очень отрицательно скажется на жоре батарейки (в пультах особенно), так что надо будет смотреть - на сколько ее тогда хватит и устроит ли вас это.
 
Еще раз спасибо, JustACat! Именно в ваших постах на этом форуме я и нашел большинство ответов на свои вопросы (в т.ч. - еще и не заданные). Все материалы по приведенным вами ссылкам видел, и постарался вникнуть. Пока - на уровне возможностей железа, а не "программщины" (понравилось!).
В отличии от вас я как раз больше разбираюсь в железе, чем в программировании, хотя немного писал на ассемблере для атмеловских тинек и мег. С другими языками программирования, в т.ч. и с Си, скорее на Вы, чем на ты.
Сразу обратил внимание на несоответствие описания 11-го релиза esp на приведенной вами ссылке - фото реального устройства и его распиновка не совпадают. Отсюда возникло некоторое недоверие и к остальной информации в этой статье.
А вот за крайнюю ссылку про "малый сервер" отдельное спасибо! Ее я, видимо, пропустил...

С какой стороны подходить к решению моей задачи я даже не представляю. Просто поставил себе цель, сделать такое устройство уже к весенним стартам (апрель-май). С железом разберусь однозначно, довольно глубоко изучил возможности атмеловских камней, но есть сомнения, что успею осилить программную часть, касающуюся esp - для этого придется перелопатить довольно много нового для себя материала. И нехватку времени оцениваю только с этой стороны. А так времени более чем - уже третий год на пенсии. :(
 

JustACat

Moderator
Команда форума
Всегда пожалуйста!

Сразу обратил внимание на несоответствие описания
Это да, документация вполне может страдать, поэтому верить 1 источнику не стоит. Тут масса мест для ошибки: автор статьи мог ошибиться, то место, где он взял данные - уже могло содержать ошибку, сами китайцы могут при производстве накосячить или просто решить сделать свою какую-то очередную реализацию модуля... В общем, на самом деле прямо какой-то косяк на косяке...
Так что я бы посоветовал источников брать несколько. По той же разводке, например, можно тупо спросить google (лучше именно его) в режиме поиска картинок по запросам "esp8266" и "esp8266 ESP-07", например. Поглядеть на разные картинки-схемы и от них уже идти к информации. Я так сам делаю частенько.
Сам сейчас склоняюсь к 07 варианту с новой разводкой (как у 12-го) обязательно (это надо у продавца уточнять, либо по отзывам в лотах, либо по описанию лота, если оно подробное).
Просто потому что и GPIO там почти все, что есть, и по размеру он не самый огромный, и антенна керамическая ведет себя, имхо, вполне прилично, и есть место для маневра - можно внешнюю подключить, если дальности не хватает. Да и шильдик металлический над чипом вроде как не лишний (зато, правда, внутрь залезть сложнее будет, если потребуется).
Но это все лишь мои скромные наблюдения, и они тоже могут быть ошибочными, увы :(
А так да, ESP капризны. Питание им нужно стабильное и мощное (с запасом и чтобы не плавало). Весь набор подтяжек всех ног тоже в идеале не помешает. Так что для конечных устройств конечно придется какую-то свою платку скорее всего разводить с нужными подтяжками, кондерами и т.п.

По реализации конкретно вашей задачи я бы скорее всего пошел так:
1) на мастере (светофоре) однозначно дополнительный МК, который будет всем управлять. Хоть ту же Arduino (просто потому, что их можно тоже готовыми пачку за дешево взять на том же ali) на базе AVR. И писать можно так же под Arduino - просто потому что под него начинать проще, и примеров куча, и информации, и сообщество огромное. Да и там конечно тот же самый Си.
AVR в данном случае реализовывала бы основную логику, и задержки и управление нагрузками (она к этому более спокойна и терпима, имхо), а ESP использовалась бы чисто как модуль связи для AVR (как если бы использовали вместо ESP что-то на 433 МГц типа nRF какого-то там, не помню точно).
2) на пультах попробовал бы обойтись сначала чистыми ESP. Сначала на NodeMCU + LUA скриптом. Просто потому что задача совсем простая, а на этом деле ее можно накидать очень быстро. Далее уже смотрел бы, как оно себя ведет и на сколько стабильно работает. Если результат не устроил бы - тогда уже стал бы разбираться с написанием полноценной прошивки под ESP на Си. Ну или на худо конец поставил бы в пульт тоже по дополнительной AVRке причем запитал бы на 3.3. вольта, чтобы ничего не согласовывать.
Про саму связь уже описал - однозначно слал бы постоянно некие пакетики (хотя бы пару-тройку раз в секунду). Просто чтобы избежать задержек. Хотя батарейку бы это выедало конечно быстро, но может и не критично в вашем случае, если вам нужно, чтобы пульты отработали разово сколько то времени, а не работали годами от одной батарейки.

Но, разум таки подсказывает, что правильнее всего было бы написать свою прошивку под ESP-шки как на мастер. так и на пульты. Потому что глючность прошивок на AT командах или на lua таки имеет место быть... Но я бы все же этот вариант для себя оставил на потом...

сделать на радиомодулях что-то типа nRF24L01
Вот, я про них же. А почем сейчас nRF24L01? :) Я когда смотрел в их сторону, решил, что цена на ESP с ними сходна, а то и ниже за пачку штук.
А так как WiFi более универсален (можно же еще настройку конечно устройства реализовать прямо с мобильника в поле - класс же), то в итоге плюнул на nRF-ки...
Тем более если в случае с ESP реально можно реализовать на них без доп. МК, то с nRF24L01 без дополнительного МК не обойтись никак...
 
Я как раз и начал с RF24! Но так как для них обязательно требуется доп. контроллер в пульт, посмотрел в сторону esp, в котором есть свой "вычислитель". Кроме того, привлекла дальность связи на esp, которая однозначно больше, чем у RF.

Цена на RF на е-бее (предпочитаю покупать там, а не на али) ~65-70 за штуку.
http://www.ebay.com/itm/1Pcs-Wirele...702?pt=LH_DefaultDomain_2&hash=item3f32193dee
Цена на esp (там же) - несколько больше, порядка 180-210 рублей.
http://www.ebay.com/sch/i.html?_fro...4.TR0.TRC0.A0.H0.X.TRS5&_nkw=ESP8266&_sacat=0
Трехвольтовую Ардуино про мини на е-бее можно купить по цене, меньше цены на esp.
http://www.ebay.com/itm/Redesign-Pro-Mini-atmega328-3-3V-8M-Replace-ATmega128-Arduino-Compatible-Nano/281581818217?_trksid=p2047675.c100005.m1851&_trkparms=aid=222007&algo=SIC.MBE&ao=1&asc=29310&meid=3b61c12a6f1349efb9f29560b8d7cd7e&pid=100005&rk=3&rkt=6&sd=221528768176&rt=nc
 
Последнее редактирование:

JustACat

Moderator
Команда форума
У меня последний раз (примерно с месяц назад покупалось) выходило так (на ali):
- 127 руб. (2$) за Arduino Pro Mini с 1117 на 3.3 вольта на борту (то есть можно с нее спокойно и ESP запитать)
- 177 руб. (2,78$) за ESP
Да - это подороже, чем nRF в чистом виде... Ну, в мои расчеты на 1 исполнительное устройство это укладывается...
У меня еще будут там БП с 220 на 5... Так как устройства стационарные будут в розетки там и т.п.
В итоге все вместе укладывается в 500-600 в зависимости от наполнения устройства. Может и больше быть, если добавлять датчики и т.п.
А так еще же доллар этот. Цена по 33/$ была бы в 2 раза дешевле в рублях-то, но увы... Сверху там у них сплошная игра престолов, так что... Не будем о грустном :)
 

Andy Korg

Moderator
Команда форума
А почем сейчас nRF24L01?
не могу сказать, у меня старые запасы, еще до кризиса.
то с nRF24L01 без дополнительного МК не обойтись никак...
Была у меня ссылка на проект иностранца в котором чип напрямую программировался. Так что теоретически можно и без МК. Но вот практически...
Извините за offtop
Так как устройства стационарные будут в розетки там и т.п.
Тогда вам не нудно парится с режимом сна, и это плюс в копилку esp
 
На али, к сожалению, почти прекратили free shipping, и к декларируемой цене почти всегда добавляют почтовые 1-1,5 $.
 
В моем варианте питание пультов и светофора атономное. Пульт предполагаю питать от одного пальчикового LiFe элемента емкостью 1,5 а/час(они хорошо работают и при минусовых температурах), а светофор - от обычного автомобильного акку.
Сейчас световор включается по проводам, которые имеют свойство рваться, да к тому же 200 метров 5-7 жильного сигнального провода это довольно увесистая бухта...
Но это уже off, извините.
 

JustACat

Moderator
Команда форума
Тогда вам не нудно парится с режимом сна, и это плюс в копилку esp
Это да, хотя deepsleep проверял, работает вроде, на сколько стабильно - не проверял :)

В моем варианте питание пультов и светофора атономное.
Вот потому я и говорю, что в вашем случае съедаться будет быстренько аккумулятор в пультах (в светофоре менее критично, думаю).
Ну как быстренько, часов на 10-12, думаю, хватит. Так что весь вопрос в том: как часто вы готовы менять батарейки в пультах.

200 метров 5-7 жильного сигнального провода
Да, вот и я потому же решил уходить на WiFi - надоели провода... Вообще все хочется беспроводное. В наше-то время. И зарядку в том числе. Вот это уже точно оффтоп :)
А у вас не оффтоп - ваша же тема и вашу задачу решаем, так что все ок. Разве что, думаю, название темы подкорректировать бы (на название проекта) и тему саму перенести в "Ваши проекты". Но это уже к администрации и дело ваше конечно :)
 
Думаю, мне еще рано переползать в "Ваши проекты". Я пришел сюда за помощью, а не с готовым решением.
А название темы в полной мере характеризует ее суть - мне хочется разобраться с построением сети на esp. И в конечном итоге сделать что-то, что можно будет вынести в раздел "Ваши проекты". :D

С питанием у меня проблем нет - аккумуляторы и их обслуживание давно и полностью освоенная тема. Да и автономные зарядники для всех используемых типов акку имеются - у нас это штатное оборудование.

Где почитать, как настраивается таймер esp, и реал-тайм клок? Что-то в техдоке не увидел ничего конкретного.
 
Еще вопрос: а не имеет смысла, для "убыстрения" достижения конечной цели, поставить в светофор стандартный роутер?
Там уже вся программная часть есть, да и настраиваются они довольно просто. Единственное, что нужно будет сделать - связать сам роутер с контроллером, который управляет светофором. Прога для такого контроллера на Меге уже написана, и эта часть работы отпадает сама по себе.

Если эта мысль не крамольная, что посоветуете использовать в качестве роутера? Возможно, есть КИТы, или платы у китайских братьев?
 

JustACat

Moderator
Команда форума
Где почитать, как настраивается таймер esp, и реал-тайм клок?
Опять же, зависит от того, на чем реализовывать, если на NodeMCU то у него wiki есть с информацией: https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en#timer-module
Если же писать свое с нуля, то в теме малого веб-сервера, что ссылку раньше давал. Ибо у нас pvvx один из самых (если не самый) прошаренный в этом вопросе человек. И его прошивка по сути является примером разного кода под ESP и оттуда можно много чего почерпнуть.
Опять же на счет RTC не уверен, вроде как полноценного RTC в ESP нету... А так, думаю, стоит глянуть в проекты часов - там самое оно таймерам и времени же :) Вроде где-то тут такое пробегало на форуме.

а не имеет смысла, для "убыстрения" достижения конечной цели, поставить в светофор стандартный роутер?
Почему бы и нет, если возможность такая есть, и тем более, если под это дело у вас уже есть разработки.
Тогда точно программщину на пультах реализовать на NodeMCU потому что она же совсем простая получается: послать команду по нажатию кнопки и периодически keep-alive пакетики пустые.
Какой использовать роутер? Ну, народный вот такой вот: http://market.yandex.ru/product/7879331/?hid=723087&clid=502
В Китае он тоже есть но под другим номером. На ali|ebay искать по запросам: TP-LINK TL-WR703N / TL-WR702N и TP-LINK TL-MR3020
Хотя их много разных, вот, например, с БП - в розетку втыкается: TL-WR800N
На него воткнуть хоть OpenWRT, хоть что-то еще и вперед. Их частенько используют для разного рода такой автоматизации, и статьи есть и на русском в том числе. Народный, можно сказать, раньше его можно было добыть по цене в 600-700 рублей с того же ali (сейчас нормальная цена в районе 20-30 долларов).
Только перед заказом нужно поразбираться, какой на данный момент самый актуальный, под какой прошивку подходящую проще найти. Хотя бы на том же сайте по OpenWRT посмотреть, либо поискать статьи из разряда "для чайников" на хабре или где-то еще. Чтобы на скорую руку определить, подойдет или нет.
Например, вот что-то выпало по запросу: http://habrahabr.ru/post/178661/
У меня вот еще cubietruck есть - но это, наверное, жирновато :)
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Идем "ноздря в ноздрю"!
Только это неизвестный (мне по крайней мере) аппарат, на который не факт что можно что-то зашить :) Но если можно и есть информация - тогда да - вариант.
Ну и нужно смотреть, есть ли там в нем UART или полноценный USB, если нужно с внешним МК связать.
 

Andy Korg

Moderator
Команда форума
..А так, думаю, стоит глянуть в проекты часов - там самое оно таймерам и времени же...
Для синхронизации секундных отсчетов времени можно использовать внешний ntp-сервер. Как раз wifi и пригодится :) Реализуется элементарно на esp:
Получение времени. Вызывается например раз в 10 секунд
Код:
void ICACHE_FLASH_ATTR udp_rcv(void *arg, struct udp_pcb *pcb, struct pbuf *p,
    ip_addr_t *addr, u16_t port){

    uint8 *j;
    uint32 Seconds;

    if (p->len == 4){ //Получено 4 байта все верно
        j = p->payload;
        ExchByte((j+3), j);//Поменять байты местами
        ExchByte((j+1), (j+2));
        memcpy(&Seconds, p->payload, 4);
        SecundToDateTime(Seconds, &Watch, 5); //Перевести секунды в человекочитаемое время
    }
    else{
        Watch.Mode = 10;                //Время не удалось получить, попытаемся через 10 секунд
    }
    pbuf_free(p);
}
Создание подключения к внешнему серверу времени
Код:
err_t ICACHE_FLASH_ATTR ntpInit(void){

    err_t err = ERR_OK;
    struct ip_addr natIP;
    uint8 *i;

    struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, 1, PBUF_RAM); //Хапнуть память для отправляемого пакета в 1 байт
    i = p->payload;
    *i = 0x52;

    struct ip_info wifi_info;

    if (udp_ntp == NULL)
        udp_ntp = udp_new(); //Хапнуть память для udp соединения
    if (udp_ntp != NULL){
        udp_recv(udp_ntp, udp_rcv, NULL); //Зарегестрировать функцию udp_rcv для приема
        if (udp_bind(udp_ntp, IP_ADDR_ANY, 4555) == ERR_OK){ //Привязать udp порт 4555 на всех IP адресах esp
            IP4_ADDR(&natIP, 128, 138, 141, 172);      //Адрес внешнего ntp сервера
            if (udp_sendto(udp_ntp, p, &natIP, 37) != ERR_OK) //Отправить байт на порт 37 внешнего сервера
                TimeInet = 0x12345;
        }
        else{
            TimeInet = 0xdddd;
        }
    }
    else {
        err = ERR_MEM;
    }
    pbuf_free(p);
}
 
Сверху Снизу