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

Процедуры установки и работы с wifi в sdk

pvvx

Активный участник сообщества
Тестирую разные установки у Wifi. Есть масса неясностей.
espwifi.gif
Например не устанавливаются (или имеют сложную зависимость от вкл/выкл других опций):

1) Адреса DHCP (wifi_softap_set_dhcps_lease())

2) Соединение с использованием BSSID (wifi_station_set_config())

По п.п.1) - там просто время нет разобраться, т.к. исходники DHCP есть в Lwip и процедура, заявленная в include SDK там есть.

По п.п.2) Очень не ясная зависимость - Если дать пустые имя и пароль для соединения, то тогда BSSID прописывается и запоминается. При наличии заполненных полей имя и пароль – не прописывается и не воспринимается. Ещё нет уточнения, что за зверь bssid_set:
struct station_config {
uint8 ssid[32];
uint8 password[64];
uint8 bssid_set;
uint8 bssid[6];
}
Использую, его пока как флаг наличия bssid.
Остальное всё имеет достаточно сложную зависимость друг от друга и последовательностей установки. Но там кое как разобрался. Многие установки проходят только через перезагрузку. Как это элегантней реализовать на HTTP сервере - переадресовывать на другую страницу при перезагрузке как-то криво, т.к. нужна ещё задержка после переключений режимов, для установки новых параметров и "пробивки" нового соединения по всей сети...

У кого есть какие предположения, подсказки по всему этому? А то только это держит до выпуска HTTP сервера c БОЛЬШОЙ КНОПКОЙ ВКЛ/ВЫКЛ ЛАМПОЧКУ (pin на EP8266) c нормальными страницами для задания конфигурации :) Главную страницу с кнопкой можно будет редактировать - заливать своё изображение кнопки :)
 
Последнее редактирование:

shadows

New member
насчет перезагрузки, наверно можно как в обычных роутерах, вызываем ребут, далее с помощью js вызывается setimeout(callback,1000) в callback обновляем текст в стиле "rebooting wifi: please wait 30, 29,28...1 second(s)" (время с запасом). По истечении 30 секунд просто релоад странички. Можно наверно еще что-нибудь типа такого использовать и контролировать поднялся ли http после ребута, и если поднялся сразу обновлять страничку.
 

clinkme

Member
Использую, его пока как флаг наличия bssid.
Так и есть. Поле появилось в 0.9.3, и упоминание об этом было в release notes.
Многие установки проходят только через перезагрузку. Как это элегантней реализовать на HTTP сервере - переадресовывать на другую страницу при перезагрузке как-то криво, т.к. нужна ещё задержка после переключений режимов, для установки новых параметров и "пробивки" нового соединения по всей сети...
У кого есть какие предположения, подсказки по всему этому? А то только это держит до выпуска HTTP сервера c БОЛЬШОЙ КНОПКОЙ ВКЛ/ВЫКЛ ЛАМПОЧКУ (pin на EP8266) c нормальными страницами для задания конфигурации :) Главную страницу с кнопкой можно будет редактировать - заливать своё изображение кнопки :)
Мне кажется, бояться перезагрузки не надо. В мире встроенных (мини) систем обычное дело - изменил конфигурацию, перезагрузил контроллер. Тем более что перезагрузка занимает 3 сек. Другой вопрос, что желательно проверять настройки на правильность (непротиворечивость ) до их применения.
 

pvvx

Активный участник сообщества
C wifi_softap_set_dhcps_lease() и её "Лизой" разобрался - это у меня была ошибка. При копировании забыл "extern" для struct dhcps_lease dhcps_lease;
В теме глюков SDK написал от куда она берется. А то установку DHCP дали, а чтение что там - нет. Китайцы... :)
насчет перезагрузки, наверно можно как в обычных роутерах, вызываем ребут, далее с помощью js вызывается setimeout(callback,1000) в callback обновляем текст в стиле "rebooting wifi: please wait 30, 29,28...1 second(s)" (время с запасом). По истечении 30 секунд просто релоад странички. Можно наверно еще что-нибудь типа такого использовать и контролировать поднялся ли http после ребута, и если поднялся сразу обновлять страничку.
А если 10 пользователей в web и все давят настройки - то как?
Редиректы вешать - в web сложно определить кто первый открыл страничку и от кого первым придет POST от странички настроек... :)
Да и беда с java - я не точно знаю, на каких телефонах какие команды явы работают...

Все настройки на одной странице вызывают передачу заголовка от броузера уже несколькими пакетами tcp. Куки + пароль + плюс хлам от броузера + то что устанавливается, без не активных галочек (они не передаются): wifi.rdcfg=4&wifi.mode=3&wifi.st.ssid=HOMEAP&wifi.ap.ssid=ESP8266W&wifi.st.psw=92112345673&wifi.st.bssid=ff%3Aff%3Aff%3Aff%3Aff%3Aff&wifi.ap.psw=0123456789&wifi.ap.chl=13&wifi.csta=5&wifi.phy=3&wifi.st.ip=192.168.1.237&wifi.ap.aum=4&wifi.st.gw=192.168.1.1&wifi.ap.ip=192.168.4.1&wifi.st.msk=255.255.255.0&wifi.ap.msk=255.255.255.0&wifi.st.aucn=1&wifi.ap.gw=192.168.4.1&wifi.st.mac=18%3Afe%3A34%3A99%3Aac%3Af1&wifi.ap.mac=1a%3Afe%3A34%3A99%3Aac%3Af1&wifi.st.dncp=1&wifi.ap.dncp=1&wifi.ap.sip=192.168.4.2&wifi.sleep=0&wifi.ap.eip=192.168.4.102&wifi.ap.mcns=4&wifi.newcfg=4
На HTTP/1.0 уже вроде не тянет, если передавать в GET :) Имя запрашиваемого файла + это скопище не лезут в пакет :(...
Китайское Iot с примером идут лесом. Там json и прием по одному пакету tcp - за раз настройки WiFi не передать :)
 
Последнее редактирование:

clinkme

Member
В модуле USR-WIFI232-T конфигурация устроена так:
есть отдельные странички для выбора режима (AP,STA,AP+STA), для настройки AP, для настройки STA, RS-232. Причем на одной странице некоторые параметры сгруппированы и имеют отдельную кнопку Save.
Вот так:

Т.е. последовательно задаем параметры, а применяются они все при перезагрузке
 
Последнее редактирование:

d946

New member
А если 10 пользователей в web и все давят настройки - то как?
сделать вход в настройки через логин и пароль. Кто первый прошел авторизацию тот и настраивает. При попытки авторизации с с другого ip показать страницу "Производится настройка устройства". Так делают мой роутер D-link.
 

pvvx

Активный участник сообщества
сделать вход в настройки через логин и пароль. Кто первый прошел авторизацию тот и настраивает. При попытки авторизации с с другого ip показать страницу "Производится настройка устройства". Так делают мой роутер D-link.
Это и есть редирект 302 , можно и в странице HTM ... <meta http-equiv="refresh" content="задержка в секундах до редиректа; url=адрес для редиректа">.... Т.к. делаю код для создания страниц пользователем, то надо сделать поддержку того и/или другого.
Пока код к WiFi такой: см. вложение
В запросе HTTP будет:

wifi.rdcfg=0xffff– маска, что считать в конфиг с работающей WiFi, остальное, что в битовой маске не отмечено должно будет передано дальше для установки.
Далее идут устанавливаемые переменные.
Затем, завершающая wifi.newcfg=маска – битовый список переменных, которые подлежат установке (были переданы с данной страницы).
Это позволяет задавать на странице хоть один, хоть все параметры, подлежащие изменению.
Проблема такого подхода кроется в том, что установку WiFiнадо производить с учетом других параметров и в хитрой последовательности. Изменить только один параметр, не задав другие, бывает невозможно. И не ясно, надо будет перезагружать модуль или нет. (это ещё не доделал и оно зависит от SDK - китаев и раскрытых процедур...).

Текущие параметры в HTML страницу вставляются либо заменой в ней переменных обрамленных ‘~’, либо запросом файла wifi.xml с настройками и разгребанию по странице явой. В передаваемых файлах сервером, отмеченные файлы, подлежащие парсингу, обрамленные значения ‘~’ заменяются на текст параметра. (файлы не подлежащие парсингу хранятся во Flash диске сжатые GZIP, если сжимаются). К примеру ~wifi.ap.ip~ будет заменен на ipстанции 192.168.4.1 , а ~ wifi.phy~ - на номер установки режима PHY. Текстовых параметров, в основном, передаваться не будет. Это требует много программного места в flash. По номеру индекса, в зависимости от языка, проще уже в яве или ещё как, на стороне пользователя поставить требуемое текстовое значение для вывода…
Полные исходники всего будут только когда всё доделаю, по началу будет прошивка с прогой создания HTML страниц и списком что можно задавать в них...
Кто поможет с прогой для создания диска в flash? А то пока использую измененную от микрочипа, для создания её MPFS2...
 

Вложения

  • 3.5 KB Просмотры: 27
Последнее редактирование:

d946

New member
Описанный механизм понял, но хотелось бы уточнить предполагаемые условия работы:

1) режим работы с настройками многопользовательский?(более одного пользователя одновременно могут менять настройки).
2) передача настроек должна быть в одном пакете TCP ?
 

pvvx

Активный участник сообщества
Описанный механизм понял, но хотелось бы уточнить предполагаемые условия работы:

1) режим работы с настройками многопользовательский?(более одного пользователя одновременно могут менять настройки).
2) передача настроек должна быть в одном пакете TCP ?
Работа над проектом ещё идет :) Пока только разбираюсь с глюками SDK от китаев и делаю тесты и так и сяк...
Сколько пакетов будет - все что будут. Надо дописать сервачек, а то пока тестил забыл, что Lwip дает всего один первый пакет (что в нем только эмуляция стека IP :) ) и надо самому дочитывать... Но это не беда. Время только где взять...
Вот хлам, которым тестирую: https://yadi.sk/d/Xe42JBeVdfN5a
Ногами не пинать, т.к. это свалка для прошлого теста и не является ни примером и ни чем.
Да, там маке забыл для сборки http://esp8266.ru/forum/threads/moja-sborka-espressif-devkit.32/
Положить в каталог ниже проекта, в Workspace эклипсы...
Счас сменю файл. https://yadi.sk/d/Xe42JBeVdfN5a Перекачивайте.
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
1) режим работы с настройками многопользовательский?(более одного пользователя одновременно могут менять настройки).
Если ESP8266 спокойно обслуживает по tcp поток за 600 кило байт в секунду, то почему и нет?
esptest.gif
ВОт одновременно открыто:
1) терминал по TCP/IP к ESP8266
2) Два окна Web browser-а каждые 280 ms читают файл c web ESP8266 status.xml (можно повесить таких процессов с десяток)
3) Работают установки настроек WiFi
4) По UDP порту запрашивается отладочная инфа.
5) В UART порт выводится отладка ESP8266 (на 256000 Baud не всё успевает сказать что происходит даже короткими сообщениями, переполняется буфер передачи UART :) )
При этом можно ещё читать область адресного пространства памяти ESP8266 с веба в файл на гегобайт и смотреть падение скорости передачи (изначально, без других процессов она за 600кб/сек, но его притормаживает вывод отладочной инфы в UART) ...
Всё это не мешает набивать текст в терминале и получать эхо от ESP8266 со скоростью набивки символов....
В свалочном тестовом проекте сменил маке и изменил Webfiles... Опять перекачивайте :) Добавил опции Eclipse запуски прошивки файлов default.bin, userbin ( в данном проекте Webfiles) и т.д. ... по тому и считаю, что бесполезно счас выкладывать какие-либо исходники - я их постоянно меняю, как есть мысли и время... Никакие GIT не помогут.
 
Последнее редактирование:

d946

New member
Я планирую реализовать следующий механизм:
1) web-сервер условно разделить на две части
(1)- станицы для настроек [см. ниже]
(2)- остальные страницы, [многопользовательский режим доступ, он у Вас уже реализован
2) Два окна Web browser-а каждые 280 ms читают файл c web ESP8266 status.xml (можно повесить таких процессов с десяток)
]

Для страниц настроек следующий алгоритм:
- показать страницу "запрос логин и пароль admin/admin"
- если пароль верен, отображаем страницу настроек с параметр, пример "set.html?sid=af45", все ссылки внутри страницы также с ?sid=af45
- если второй пользователь захочет изменить настройки он увидет страницу "режим настроек уже используется"
- по истечения бездействия 3 минуты или выхода из настроек sid аннулируется, и настройки доступны другому пользователю.
 

pvvx

Активный участник сообщества
Сам веб у меня ещё в зачаточном состоянии. Запрос пароля реализуется с помощью запроса файлов из папок protect. Всё что там, сервер будет отдавать только с паролем. Что-то сложнее народ не воспримет. И надо помнить - у нас всего 32кило памяти в пределе на всё и запоминание всяких ID или новый таймер - это память ёк.
И ничего ещё не реализовано - всё во временных затычках для проверки что может работать. :)
FullFlash для теста того что там есть: https://yadi.sk/d/aOBju0c1dfTRf
Грузить FLASH_DOWNLOAD_TOOLS_v0.9.3.1 flash0x00000.bin в 0x00000
Скачана с самого webESP8266... очищены настройки 0x7xxxx, прошита и запущена.
После прошивки имя станции будет ESP_ + последние от её MAC. Пароля нет - режим OPEN - так задет SDK по умолчанию

MPFS2.exe для сборки диска пока временная. Для сборки того что есть в проекте в WEBFiles, в её опциях надо добавить Dynamic Files: *.bin, получившийся bin файл дополнить до кратности длины 16, иначе при его прошивке в 0x1e000 FLASH_DOWNLOAD_TOOLS_v0.9.3.1 будет жаловаться... MPFS2.exe ещё там много лишнего генерит, но руки до него ещё не дошли...
Файловая система предполагается другая - каждый файл должен иметь заголовок:
1) Размер
2) Флаги - сжат GZIP, парсить или нет на переменные
3) Полное имя (вместе с папкой)
4) Что дописывать в заголовок ответа HTTP.
Пока вроде всё. Потом возможно, дополнятся флаги - типа внутренний скрипт и т.д.
 
Последнее редактирование:

bshep

New member
Раз уж тема про wifi, может кто-нибудь знает почему модуль как-то неохотно цепляется к домашнему роутеру ASUS RT-N56U в режимах n или g? Беда проявляется и с китайской прошивкой, и с прошивкой вебсервера от pvvx.
В режиме AP, при непосредственном соединении к точке доступа самого модуля ESP_XXXXXX, все работает замечательно. И пингуется в милисекунды, и веб морда видна.
При попытке перевести в режим AP+ST в режиме g или n - пропадает AP модуля. В домашней сети модуль виден, но пинги идут по 500-1000 мс.

Просто интересно, кто-нибудь подключал модуль в домашнюю wifi сеть, работающую в режиме g/n или n? Наблюдаются ли проблемы?
 

pvvx

Активный участник сообщества
Раз уж тема про wifi, может кто-нибудь знает почему модуль как-то неохотно цепляется к домашнему роутеру ASUS RT-N56U в режимах n или g? Беда проявляется и с китайской прошивкой, и с прошивкой вебсервера от pvvx.
В режиме AP, при непосредственном соединении к точке доступа самого модуля ESP_XXXXXX, все работает замечательно. И пингуется в милисекунды, и веб морда видна.
При попытке перевести в режим AP+ST в режиме g или n - пропадает AP модуля. В домашней сети модуль виден, но пинги идут по 500-1000 мс.

Просто интересно, кто-нибудь подключал модуль в домашнюю wifi сеть, работающую в режиме g/n или n? Наблюдаются ли проблемы?
Данная проблема наблюдаются. Но она пропадает сама, через некоторое время после первого соединения. Иногда её вообще нет. При переконекте ASUS RT-N56U и ESP8266 её нет. При установке канала с начальными номерами описанная проблема вылезает реже. Данный роутер у меня тоже есть и часто используется.

Все переключения всех установок WiFi ESP8266 на ходу решены в последней версии web-а. Но, переключения установок AP при соединении к AP или ST при соединении к ST могут приводить к "протектед" - дурит китайская закрытая часть кодов :mad:.
 
Последнее редактирование:

hd44780

New member
Кто поможет с прогой для создания диска в flash? А то пока использую измененную от микрочипа, для создания её MPFS2...
Как я понял по соседней теме про веб-сервер, Вы уже справились с этим? Или надо ещё что?
Вы там писали на C#, я его знаю, если надо могу помочь.

Мой вопрос по Wi-Fi, чтобы не плодить темы.
Я подключаюсь к AP следующим образом:

Код:
// AP name
strcpy ( stationConf.ssid, pConnectArgs -> ap_name );
// AP password
strcpy ( stationConf.password, pConnectArgs -> ap_passwd );
// Disconnect from current AP
wifi_station_disconnect ( );
ETS_UART_INTR_DISABLE ( );
wifi_station_set_config ( &stationConf );
ETS_UART_INTR_ENABLE ( );
// Connect to new AP
answer [ 0 ] = wifi_station_connect ( ) ? 0x00 : 0x80;
Оно нормально работает, но только до сброса/отключения питания. После сброса подключение теряется, надо переподключаться.
Я, конечно, могу вписать имя AP и пароль во флэшку на модуле и при старте подключаться, но в исходниках AT прошивки имя/пароль нигде не сохраняются и подключение восстанавливается при включении.
В чём может быть дело?

Спасибо.

PS.
Посмотрел в "свалке" pvvx, там имя/пароль хранятся во флэшке. Это понятно.
Но почему этого нет в AT прошивке? Китайские чудеса:D?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Оно нормально работает, но только до сброса/отключения питания. После сброса подключение теряется, надо переподключаться.
Я, конечно, могу вписать имя AP и пароль во флэшку на модуле и при старте подключаться, но в исходниках AT прошивки имя/пароль нигде не сохраняются и подключение восстанавливается при включении.
В чём может быть дело?
Имя и пароль AP и т.д. сохраняет SDK само, но не все параметры WiFi. По этому я не использую это и каждый старт устанавливаю свои сохраненные настройки. Надо как-то вырезать эти сохранения из SDK - они протирают flash частыми записями до дырки, если требуется их постоянная смена и переподключение WiFi к разным базам и т.д..
После первой установки имени AP, при последующих стартах вам необходимо проверить что WiFi уже включен в режим AP и всё.
 

hd44780

New member
Ясно.
А какой метод SDK их сохраняет? Чтобы не вызывать его :)...

Нашёл wifi_station_set_auto_connect. Но описания нигде нет :(
Как я понимаю, надо вызвать wifi_station_set_auto_connect ( FALSE ). Где-то я такое нашёл в интернетах.
 
Последнее редактирование:
Сверху Снизу