• Система автоматизации с открытым исходным кодом на базе 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 ). Где-то я такое нашёл в интернетах.
 
Последнее редактирование:
Сверху Снизу