• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Smartconfig

aloika

Active member
Пробую smartconfig, че-то не получается ничего.
Начать с самого простого - пишу в коде

smartconfig_start(SC_TYPE_ESPTOUCH, smartconfig_done);

- компилятор выдает ошибку " undefined reference to `smartconfig_start' ".

В начале, конечно, прописал #include "smartconfig.h" . Все равно не работает. Кто-нибудь знает, в чем может быть дело?

Скачал отсюда программу для Андроида: https://github.com/youngBuger/esp8266-smartconfig . Скомпилировал, залил на телефон. Просмотрел код, в очень общих чертах идея понятна - берем название сети, пароль, соединяем их особым образом, шифруем это дело и шлем с телефона широковещательным UDP-пакетом. Модуль ESP8266 этот пакет принимает, расшифровывает и подключается к данной сети с этим паролем. Потом как обычно - получает по DHCP адрес, запускает, например, TCP-сервер и т.д.
Это как бы понятно.

Непонятно другое - как потом телефон-то узнает, с кем ему соединяться? Как он узнает IP, который модуль получил по DHCP?

Update: https://drive.google.com/file/d/0B3Fei_yltwT1QmpEek9lWkZuX0U/view?usp=sharing
Это доковырянный рабочий smartconfig под SDK 0.9.5 . В архиве прошивка модуля и программа для Андроида (исходники под Unnoficial Development Kit и под Android Studio соответственно). Автор не я, я только там изменил кое-что. Автор по ссылке выше в этом же сообщении.
Это НЕ ШТАТНЫЙ smartconfig из SDK, штатный непонятно как работает.
 
Последнее редактирование:

aloika

Active member
ага:
надо в Makefile добавить библиотеку smartconfig:

# libraries used in this project, mainly provided by the SDK
LIBS = c gcc hal phy pp net80211 lwip wpa main smartconfig
 

pvvx

Активный участник сообщества
Непонятно другое - как потом телефон-то узнает, с кем ему соединяться? Как он узнает IP, который модуль получил по DHCP?
В указанном примере вроде никак и там это не требуется (там ESP8266 подключается к серверу Iot).
На ESP8266 ставите UDP сервер на какой-то порт с ответом, а в программе смартфона шлете пакеты опроса в данный порт (хоть широковещательные). При соединении ESP8266 к AP, получите ответ, в котором и будет указан IP ESP8266.
 

aloika

Active member
В общем, так и непонятно со Smartconfig'ом.

Для штатного непонятно какие пакеты нужно посылать, чтобы он заработал. Вообще ничего нет - ни примера приложения, ни хотя бы просто описания, как он работает вообще.

Пример по ссылке в первом посте темы работает с SDK 0.9.3, c тех пор espressif изменили формат буфера, который возвращает callback функция, задаваемая wifi_set_promiscuous_rx_cb(...); поэтому с SDK 0.9.5 оно не работает. Хотя там можно до ума довести, принцип и путь ясен,
тем более вот тут https://github.com/ly0/esp8266-smartlink есть нужный очень файл заголовка, там расписан формат нового буфера. Комментарии можно с китайского перевести Гуглом.

Но хочется же штатный Smartconfig использовать! Но как - пока непонятно.
 

pvvx

Активный участник сообщества
В общем, так и непонятно со Smartconfig'ом.
Для штатного непонятно какие пакеты нужно посылать, чтобы он заработал. Вообще ничего нет - ни примера приложения, ни хотя бы просто описания, как он работает вообще.
Оно так и есть. Никто с ним не разбирался - не нужно. В новых SDK много ограничений по приему - очень маленький буфер для приемного пакета (сообщения). Пока не никто не нашел как это исправить, а Espressif не желает его увеличивать.
В UDK есть пример приема и он работает.
 

aloika

Active member
Пример я этот видел, что-то он делает, в консоль пишет, что каналы перебирает. А что ему слать - непонятно. И на каком он принципе работает - тоже непонятно.

Зато я доковырял Smartconfig по первой ссылке. Теперь он работает на SDK 0.9.5. Реально определяет имя сети и пароль. Вернее, любые два слова, какие ему с телефона зашлешь :)
Если у кого-нить есть интерес, могу выложить куда-нить, мне не жалко.

Насчет "никому не нужно" - не знаю, мне кажется, очень удобная функция для бытового девайса, если им будет пользоваться, к примеру, не очень технически продвинутая домохозяйка.
 

pvvx

Активный участник сообщества
Насчет "никому не нужно" - не знаю, мне кажется, очень удобная функция для бытового девайса, если им будет пользоваться, к примеру, не очень технически продвинутая домохозяйка.
Домохозяйка не сможет загрузить специальную программу на свой телефон и т.д.
Всё что требует дополнительного ПО - в топку. Надо рассчитывать на стандартные интерфейсы имеющиеся в любой бытовой железке с экраном.
Для этого вписываете в поиск соединений имя AP станции с хитрым именем... Но и это есть не на всех устройствах. Ещё необходимо в ESP8266 делать кнопку, чтобы он входил в режим сканирования.
Смысла в этом всём нет никакого, т.к. модуль запросто держит собственный WEB сервер + AP и на его страницах проще задать любую конфигурацию на любом языке и с картинками, даже загрузить с него программу в стороннее устройство, если требуется что-то очень специфичное. Так-же можно сделать кнопку, чтобы он включался с установками по умолчанию для конфигурации. Типа AP с именем "ESP8266" и без паролей в открытом режиме для соединения и конфигурации любым телефоном с броузером и WiFi. Тем более всё что для этого требуется из ПО на модуль уже отлажено и даны примеры.
Зачем городить убожество без обратной связи, созданное для тупых WiFi модулей ?
 
Последнее редактирование:

aloika

Active member
Домохозяйка не сможет загрузить специальную программу на свой телефон и т.д.
Всё что требует дополнительного ПО - в топку. Надо рассчитывать на стандартные интерфейсы имеющиеся в любой бытовой железке с экраном.
Экрана в железке, допустим, нет. Программу можно поставить из Google Play, ну или домохозяин ей поставит.

Это проще, чем подключаться, к примеру к точке доступа, что-то там конфигурировать, переподключаться и т.д.
И еще - в программе можно сделать, например, уведомления, программа может висеть в фоне и быть на связи, можно использовать вибромоторчик, звук, свет и пр.
Типа суп убежал - на телефоне сирена завыла :)

Для этого вписываете в поиск соединений имя AP станции с хитрым именем... Но и это есть не на всех устройствах.
Есть такое. Недостатки - при этом телефон отключается от сети. И еще - при длинном SSID/пароле превышается длина пакета ESP и все, строчка лишь частично передается.
 

pvvx

Активный участник сообщества
Экрана в железке, допустим, нет. Программу можно поставить из Google Play, ну или домохозяин ей поставит.
Что-то не вижу никаких Google Play и ещё для ESP8266 :) Это на МАК :) ?
Это проще, чем подключаться, к примеру к точке доступа, что-то там конфигурировать, переподключаться и т.д.
И еще - в программе можно сделать, например, уведомления, программа может висеть в фоне и быть на связи, можно использовать вибромоторчик, звук, свет и пр.
Типа суп убежал - на телефоне сирена завыла :)
А это как? На телефоне у вас AP :confused:?
Т.е. вы нажмыкали кнопок на устройствах для переходу к скану, к примеру на столбе (ну залезли там на него...) и задали куда ему инфу скидывать? :)
Есть такое. Недостатки - при этом телефон отключается от сети. И еще - при длинном SSID/пароле превышается длина пакета ESP и все, строчка лишь частично передается.
Дык у всех с ESP8266 проблема - он сниферит только заголовок и пару байт пакета/сообщения...

PS: Короче бесперктивняк с этим smart-config и нужен только для тупых устройств, а значит и смысла туда ставить ESP8266 нет. Туда что-то проще надо - медиатек...
Но поиграться - сколько хотите, я - за. :)
 

aloika

Active member
Ну да, поиграться. Но все равно играться хочется пусть с призрачной, но все же перспективой сделать из ESP какое-то полезное устройство, которое можно потом в том числе и продать.

Лично мне надо сделать - да, тупое устройство, которое будет всего лишь управляться с телефона, как с пульта. Устройство по командам с пульта (телефона) будет делать определенные действия и периодически скидывать информацию о своем состоянии. И все.

В случае критических состояний устройства телефон, на котором в фоне будет запущена программа, может звонить, вибрировать, выть сиреной и пр.

Устройство бытовое. Обычно квартире есть вай-фай. И телефон к нему обычно подключен. С помощью смартконфига я смогу с этого же телефона подключить устройство к этому же квартирному вай-фаю. Таким образом, телефон будет выполнять обычные функции - просматривать инет и пр., а также сможет управлять устройством.

Программу-пульт можно разместить в Google Play - стандартный андроидный магазин приложений. Пользователь устройства обычным для себя образом поставит программу на телефон, также как он ставит игры и проч.

Вот такая идея. И смартконфиг здесь очень даже уместен.
 

pvvx

Активный участник сообщества
Программу-пульт можно разместить в Google Play - стандартный андроидный магазин приложений. Пользователь устройства обычным для себя образом поставит программу на телефон, также как он ставит игры и проч.
Google Play не пашет на многих устройствах :) Т.е. в придачу надо ещё докупить телефон с андроидом :) На ноуте это дело не пройдет, ну если это не "Samsung Note 4" - и такое дерьмецо для тестов у меня есть :)
Разбейте подачу запроса на N кусков и собирайте кусками - таким образом влезет сколько угодно длинные имена AP и пароли.
 

CHERTS

Moderator
Команда форума
Это доковырянный рабочий smartconfig под SDK 0.9.5 . В архиве прошивка модуля и программа для Андроида (исходники под Unnoficial Development Kit и под Android Studio соответственно). Автор не я, я только там изменил кое-что. Автор по ссылке выше в этом же сообщении.
А что именно подправлено? В прошивке под ESP или в приложении под Android?
 

aloika

Active member
И там и там подправлено.
В прошивке ESP: в связи с изменением результатов, который возвращает функция wifi_promiscuous_rx(uint8 *buf, uint16 len) пришлось изменить кое-что. Во-первых, формат буфера другой, во-вторых, len - это уже не длина пакета,
а не пойми что. А длина пакета в самом буфере содержится. Так что пришлось добавить

sniffer = (struct sniffer_buf*)buf;
len=sniffer->rx_ctrl.legacy_length;
buf +=sizeof(struct RxControl);

А в приложении под андроид просто поставил задержки, чтобы помедленнее пакеты телефон слал. А то было сильно быстро, модуль пропускал много пакетов. Можно попробовать вывод в консоль отключить, может тогда будет успевать и эти задержки можно будет убрать. Эти задержки там и были, но закомментированы, т.е. автор тоже с ними экспериментировал.
 

aloika

Active member
Секунды через 2-3 вылазит.
Может, у вас wi-fi пакеты c признаком "n" ? С ними мне самому интересно, что будет. А длина пакетов определяется вообще? Сбросьте куда-нить, что вообще в консоль выводится?
 

CHERTS

Moderator
Команда форума
Может, у вас wi-fi пакеты c признаком "n" ? С ними мне самому интересно, что будет. А длина пакетов определяется вообще? Сбросьте куда-нить, что вообще в консоль выводится?
только что вроде отработало, жал кнопки STOP START SMARTLINK и ребутил модуль и вуаля...Get the smartconfig result
как так получилось, непонятно и что запускать раньше, модуль или приложение на андроиде, тоже не понятно, работает через 10 раз
после пароля еще какой то спец-символ торчит, ну не беда, а пробовали полученные данные в smartconfig_end через wifi_station_set_config установить?
 

pvvx

Активный участник сообщества
только что вроде отработало, жал кнопки STOP START SMARTLINK и ребутил модуль и вуаля...Get the smartconfig result
как так получилось, непонятно и что запускать раньше, модуль или приложение на андроиде, тоже не понятно, работает через 10 раз
после пароля еще какой то спец-символ торчит, ну не беда, а пробовали полученные данные в smartconfig_end через wifi_station_set_config установить?
Там, по началу, идет сканирование имеющихся вокруг модуля станций AP и если они молчаливые, то никакого smart-config не будет.
Длина пакета в исходниках тоже наобум выбирается - отрабатывает не все условия.
 

CHERTS

Moderator
Команда форума
Там, по началу, идет сканирование имеющихся вокруг модуля станций AP и если они молчаливые, то никакого smart-config не будет.
Это я заметил, у меня на AP поначалу была отключена вещание SSID, smart-config при этом вообще не работал, как только включил вещание, то хоть через 10 раз, да стал отрабатывать.

Длина пакета в исходниках тоже наобум выбирается - отрабатывает не все условия.
А как бы это подправить, вернее кто бы это подправил? А то хочу добавить этот пример в UDK, вдруг кому пригодиться.
 
Сверху Снизу