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

Разработка ‘библиотеки’ малого webсервера на esp8266.

Alex

Member
Ругается эклипс на оверлей "oiintr"
P.S Сорри, сам дурак :)
 
Последнее редактирование:

vad7

Active member
@pvvx, потестил немного. Получается такая загогулина - при подключение к вебсерверу по локалке на st_ip, если не реже чем в 1 минуту идет какое-то обращение - страница или идет вывод графика на закладке debug или попинговать st_ip, то вебсервер доступен хоть в течении часа.
Но если ровно минуту не обращаться к устройству по st_ip - устройство теряет соединение с роутером.
Восстановить можно только сбросом, например через ap_ip.

Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=8мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=4мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=200мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=4мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=10мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=14мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=64мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=4мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=19мс TTL=255
Ответ от 192.168.20.67: число байт=32 время<1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=12мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=82мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=6мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=33мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=32мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
...
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=4мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время<1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=420мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=5мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=36мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=6мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=2мс TTL=255
Ответ от 192.168.20.67: число байт=32 время=1мс TTL=255

Пакетов: отправлено = 2505, получено = 2505, потеряно = 0 (0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 420 мсек, Среднее = 4 мсек
 
Последнее редактирование:

aloika

Active member
@pvvx, потестил немного. Получается такая загогулина - при подключение к вебсерверу по локалке на st_ip, если не реже чем в 1 минуту идет какое-то обращение - страница или идет вывод графика на закладке debug или попинговать st_ip, то вебсервер доступен хоть в течении часа.
Но если ровно минуту не обращаться к устройству по st_ip - устройство теряет соединение с роутером.
Восстановить можно только сбросом, например через ap_ip.
Что нужно сделать, чтобы повторить это? Я вчера скачал самую новую версию свалки, прошил, включил станцию (ap оставил), поиграл с оверлеем. Оставил на ночь, утром всё работает, проблем не заметил. Вы писали, что отключаете отладку - это что имеется ввиду? может в этом дело...
 

vad7

Active member
@aloika, оверлеи не использую, у меня вообще все отключено, кроме вебсервера и SNTP:
[HASHTAG]#define[/HASHTAG] PROGECT_NUMBER 2
[HASHTAG]#define[/HASHTAG] USE_WEB 80
[HASHTAG]#define[/HASHTAG] USE_SNTP 1


Так же не должно быть никакого обращения с вебсерверу в течении минуты, включая AJAX вывод графиков.

Отключен вывод отладочной информации в UART:
[HASHTAG]#define[/HASHTAG] DEBUGSOO 0
//#define DEBUG_UART 0
 

pvvx

Активный участник сообщества
у меня тут опять косяк обнаружился...
Перекомпилил, значит, я прошивку без отладки для ОТА, на целых 16 кило меньше стала. Настроил wifi как ap+st.
Подключил к роутеру и стал настраивать не через wifi, как обычно, а через локальную сеть. И вот через некоторое время девайс отваливается от роутера.
Причем в это время через wifi (192.168.4.1) девайс нормально отвечает.
И если зайти в настройки wifi, то стоит статус ip_got, а в ip, маске и т.д. нули.
Помогает только ресет.

В то же время, если через локалку постоянно страницы открывать, то держится дольше, но вот стоит несколько минут ничего не делать - отваливается. :(
Сколько часов надо ждать?
Долго ждать не могу. Пол часа не обращений устроит?

Странслировал с указанными вами опциями и залил в модуль. Проверил что работет, подождал и вот счас зашел на 192.168.1.15:
DevTime: 14.03.2016 11:07:15
PowerStartTime: 14.03.2016 10:24:26

PS: Опять AVR нужен? :) В программе нет счетчиков не обращений и никакой зависимости от этого, кроме вставленных вами лично.
 
Последнее редактирование:

vad7

Active member
@pvvx, да вот я тоже в новый модуль (esp01) на макетке зашил сначала с полной отладкой, а потом без отладки - работает. :confused:
Единственное, если через минуту-две кликать, то как-бы задумывается на секунду - две, но открывает.
Правда роутер другой - Mikrotik, там где не работает - Zyxel и Linksys, но не думаю, что из-за этого.
Напряжение питание отличается - 3.4V где не работает, 3.17V где работает. Буду дальше ковыряться.
 

pvvx

Активный участник сообщества
Единственное, если через минуту-две кликать, то как-бы задумывается на секунду - две, но открывает.
"Задумчивость" не от ESP, а от внешнего ПО и всяких "грин" технологий и опроса сети на изменения в ней путей и т.д..
Вот смотрим, через сколько времени пришел ответ от ESP web, после паузы (более минуты из новой запущенной сессии экслорера) от первого запроса:
time.gif
Итого: 1.048 миллисекунд.
Эксплорер при этом тупил - искал что-то, писал многочисленные надписи в низу что-то о сети и в заголовке "ожидание" - наверно узнавал у микрософт - можно ли ему туда... :)
И если посмотрите весь протокол сети, то увидите, что он по началу опросил всё на свете, а только потом полез на ESP.
В следующий раз сравните время от включения компьютера в электрическую сеть и ответ ему от ESP, т.к. это примерно то-же самое - пока он там загрузит всё необходимое ПО, проверит на вирусы, обновления и т.д. и решит всё-таки сделать то, что его просили. :)

Я вот сегодня торжественно отключаю данный модуль, включенный 02.02.2016 в 12:53:31:
xesp8266.gif
имеющий счетчик на момент написания сообщения <mactime>0x0000033a8f9e263d</mactime> непрерывной работы в us и не разу не отвалившегося из местной сети... Месяц у него были открыты порты на доступ из общего инета...
 
Последнее редактирование:

vad7

Active member
@pvvx, пытаюсь все отловить свой глюк. Принес модуль, который днем работал в место, где не работал первый. Проверил - все работает на той-же прошивке с отключенной отладкой.
Но тут обнаружил, что настройки WiFi по умолчанию, то есть "Auth Mode" = OPEN. Перевел его в WPA2_PSK и через минуту и этот модуль стал отваливаться.
Перекомпилил прошивку с отладкой = 6, вываливается теперь даже и с "Auth Mode" = OPEN, но уже где-то через 3 минуты.
Выдает:
state: 5 -> 2 (4c0)
rm 0
WiFi event(1): Disconnect from ssid vadw, reason(4): Assoc_expire, count 1
Close all:
WEB: close
 

aloika

Active member
А я тут играю с оверлеями. Хочу запустить оверлей сразу после старта системы. Пишу в protect/init.ini :

ovl=tcp_client.ovl
ovl$=1

Перевключаю питание. В mdb[51] появляется единица. А запрос не выполняется. Вот такие дела.

Из браузера пишу: http://10.0.0.2/protect/mdb.htm?ovl$=1 - выполняется нормально.
 
Последнее редактирование:

pvvx

Активный участник сообщества
А я тут играю с оверлеями. Хочу запустить оверлей сразу после старта системы. Пишу в protect/init.ini :

ovl=tcp_client.ovl
ovl$=1

Перевключаю питание. В mdb[51] появляется единица. А запрос не выполняется. Вот такие дела.

Из браузера пишу: http://10.0.0.2/protect/mdb.htm?ovl$=1 - выполняется нормально.
Ну и правильно. Соединения то нет, а tcp_client.ovl написан лично для вас, как пример. Вы же просили простой tcp_client :)
Вставьте анализ, что ответ есть, а в случае ошибки повтор, к примеру по таймеру.

И в init.ini я вообще ещё не проверял работу ни одного оверлея, даже возможность запуска их от туда. Понадеялся что кто другой проверит и сообщит, что там происходит :)
Как-бы теоретически работать должно...
 

pvvx

Активный участник сообщества
Выдает:
WiFi event(1): Disconnect from ssid vadw, reason(4): Assoc_expire, count 1
Close all:
WEB: close
Вы в первый раз узнаете, что WiFi у китайцев ущербный на модуле? Никакие WPA он не поддерживает нормально, если выходит из области связи. Если у вас ещё приходят команды закрытия соединения WiFi, то что должен делать модуль?
 

aloika

Active member
Соединения то нет, а tcp_client.ovl написан лично для вас, как пример. Вы же просили простой tcp_client :)
Спасибо за этот пример, как, впрочем, и вообще за всю разработку эту. А про соединение - что-то и по таймеру запрос не выполняется. Ну это ладно, я еще завтра подумаю, надеюсь, разберусь.
 

vad7

Active member
Вы в первый раз узнаете, что WiFi у китайцев ущербный на модуле? Никакие WPA он не поддерживает нормально, если выходит из области связи.
Ну а мне то, что делать? Без WPA2 смысла использовать девайс вообще нет. С вашей прошивкой, кстати работает. Поправка, вот сейчас отвалилась.
На всех роутерах у меня wpa2 personal включено.
Буду пытаться девайс перезагружать по этой ошибке, только вот тут китайский косяк с перезаписью сектора убьет флеш быстро.
 

pvvx

Активный участник сообщества
Ну а мне то, что делать? Без WPA2 смысла использовать девайс вообще нет. С вашей прошивкой, кстати работает. Поправка, вот сейчас отвалилась.
На всех роутерах у меня wpa2 personal включено.
У меня тоже, и приведен пример работы модуля без "отваливаний" c внешней AP у которой WAP и всё включено в течении более месяца и непрерывного соединения TCP в несколько дней с передачей данных туда-сюда по Modbus TCP...
Если на внешней AP включено шифрование, то если модуль ESP покидает зону уверенного приема, то на нем возможно не распознавание потери связи - она считает что подключена, но AP в таких случаях меняет ключ шифрования. Китайцы чинили-чинили, но итогов я не знаю, т.к. не проверял. Сами пробуйте на 1.5.2 и расскажите.
Для модуля работавшего месяцы я делал подавление WiFi на десятки секунд - ничего ему не было. Глушилка всего WiFi в доме делается из ESP, путем удержания сброса или перезагрузки в режим программирования. Но надо попасть в момент передачи или чего-то ещё :) Если вы занимаетесь программированием ESP, то это несложно заметить при частых тестах и перепрошивках их... Про это я уже писал и не понятно как они купили сертификацию....

@aloika - пример tcp_client.ovl дополнен:
Автоматически запускается считывание данных со страницы HTML удаленного сервера по событию соединения модуля к AP и останавливается по отсоединению. Задается время в минутах для обновления данных. При ошибках - повтор через ~7 секунд.
 
Последнее редактирование:

vad7

Active member
@pvvx, Сейчас проверил так - поставил на роутере режим безопасности - нет. На девайсе тоже - OPEN, DHCP, принес поближе к роутеру, мощность передатчика на всякий случай уменьшил до 75.
Устройство отваливается.
Причем после отвала, на роутере в списке подключенных еще висит где-то минуту.
Да все равно, какая-то хрень получается, это что, если постоянно кликать по ссылкам, то висеть хоть час может, а вот оставил его в режиме ожидания на несколько минут и привет!

Буду дальше баг локализовывать...
 

pvvx

Активный участник сообщества
Сейчас проверил так - поставил на роутере режим безопасности - нет. На девайсе тоже - OPEN, DHCP, принес поближе к роутеру, мощность передатчика на всякий случай уменьшил до 75.
Устройство отваливается.
Причем после отвала, на роутере в списке подключенных еще висит где-то минуту.
Да все равно, какая-то хрень получается, это что, если постоянно кликать по ссылкам, то висеть хоть час может, а вот оставил его в режиме ожидания на несколько минут и привет!

Буду дальше баг локализовывать...
Пока эта странность только у вас. Помочь ни чем не могу. 6 часов был включена последняя версия к AP с WPA2 и никуда не отвалилась - просто забыл отключить: DevTime: 15.03.2016 9:07:39 PowerStartTime: 15.03.2016 3:18:26.
 

vad7

Active member
@pvvx, возможно, я же не спорю. Вот сейчас принес первый модуль, который без отладки и уже запаянный с блоком питания - туда, где роутер Mikrotik и работал второй модуль на макетке.
Просто включаю - работает и не отваливается. Поставил на ap - WPA2, тоже работает.
То есть можно предположить, что дело не в прошивке и не в отладке.
Настройки MikroTik:
5.jpg
Отличается от Linksys EA4500 только Band, encryption в Linksys не выбирается. Попробую поставить Band B/G/N.

Поставил B/G/N, роутер применил настройки (отключил и включил WiFi) - прошло 30 секунд модуль не переподключился, хотя должен был, у него стоит Reconnect = 30.
Проверил еще так, отключил WiFi интерфейс на роутере, через некоторое время включил, модуль успешно переконнектился.
Пока включал-выключал интерфейсы на роутере, у него завис интерфейс, пришлось давить reset на роутере, и модуль успешно переподключился.
Но если изменить конфигурацию WiFi на роутере - есп переподключаться не хочет, хотя рядом лежащие смартфоны - моментально цепляются.
Похоже какая-то проблема в распознавании потери связи.
 
Последнее редактирование:

windalser

New member
Как программно установить, например GPIO5 на выдачу единицы? Нужно разбираться с регистрами?
 

shaman1010

Member
Как программно установить, например GPIO5 на выдачу единицы? Нужно разбираться с регистрами?
Да, нужно разбираться с регистрами, как в любом микроконтроллере, если пишите на СИ, C++...
Человек сейчас испугается и убежит :)
Если нужно задействовать несколько gpio для "клацанья светодиодом", то берем читаем 10leds_ru.txt, откуда делаем вывод, что можно вставить инициализацию в init.ini
Дальше смотрим, чем собрались дергать, и не затрагивает ли это еще чего-нить.
Дописываем в конец существующего init.ini что-то вроде этого:
Код:
cfg_pinclr=0
cfg_cdns=1
cfg_save=1
gpio5_out=1
gpio5_dir=1
где gpio5_out=1 это установка высокого уровня на gpio5 при старте (gpio5_out=0, если нужен низкий)
а дальше дергаем его через http://IP/web.cgi?gpio5_out=3 (здесь 0,1,3 - по вкусу)

Только не забудь на debug.htm отключить инициализацию портов, а то при заходе на страничку "Debug and Test" получишь что-то интересное :)
 
Сверху Снизу