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

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

pvvx

Активный участник сообщества
А у людей еще и не пингуется в таких случаях, т.е. по ощущениям ESP зависает (если AP не поднята) так что может не в TCP соединениях проблема или не только в TCP?
Может не пингуется по причине отваливания netif - при обрыве связи и т.д. могут происходить ошибки в передаче и прочих командах хоть UDP, а проверок на это в SDK не стоит. Так-же с каким netif (каким адаптером - ST или AP и т.д.) связан открытый порт при множественных асинхронных соединениях и закрытиях сеансов связи по WiFi? (broadcast)
Всё это надо проверять и раскапывать в закрытой части SDK. А время на это нет и ESP8266 уже не актуален, даже по описанной причине - в SDK других модулей эта часть открыта и всегда модно изменить алгоритм.
 
Последнее редактирование:

vad7

Active member
@Victor, этот форк давно не обновлял, лучше здесь - GitHub - vad7/PowerMeter: Esp8266 Power meter with webserver

esp не зависает, а отваливается от роутера, но как точка работает, то есть к ней можно подключиться. Я в этой теме симптомы и отладочный лог уже выкладывал.

Мои 3 устройства 2 счетчика и управление вентиляцией, после доработки, работают устойчиво пол года (тьфу, тьфу, тьфу).
 

Victor

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

vad7

Active member
@Victor, Если ничего не забыл, то там эвент срабатывает, далее по идее должен автореконнект сработать, а он на нем зависает.
 

pvvx

Активный участник сообщества
@vad7 - у TCP клиента нет глюков? Пока некогда досконально проверять, но при переносе на другую платформу (RTL) там вылезли странности с временным недозакрытием pcb... Испытаний на скорость с множественными последовательными открытиями-закрытиями клиентов на ESP8266 я не делал...
В последнем изменении на git пытаюсь избавиться от лишних таймеров при закрытии pcb. Нет смысла в растрате ресурсов таймеров. LwIP сам умеет, т.е. через его средства... А то в web-свалке сохранилась первоначальная версия алгоритма закрытия соединений, которая была к первым глючным версиям SDK от Espressif, когда LwIP был в закрытой либе, да его ещё не особо тогда изучил...
 
Последнее редактирование:

vad7

Active member
@pvvx, да нет, вроде.
Правда у меня запрос на IoT сервер отправляется каждые 20 сек.
 

Serjkruch

New member
Добавил помеченный код в слешах. Третий день пока нормально. До правки каждый день зависал.
Код:
        case EVENT_STAMODE_GOT_IP:
        {
            station_reconnect_off();
#if DEBUGSOO > 1
            os_printf("Station ip:" IPSTR ", mask:" IPSTR ", gw:" IPSTR "\n",
                    IP2STR(&evt->event_info.got_ip.ip),
                    IP2STR(&evt->event_info.got_ip.mask),
                    IP2STR(&evt->event_info.got_ip.gw));
#endif
                open_all_service((wifi_softap_get_station_num() == 0)? 0: 1);
                ////////////////////////////////////////////////////////////////////////
                if(wifi_station_get_connect_status() == STATION_GOT_IP){
                    if(!flg_open_all_service) {// some problem with WiFi here
                        wifi_station_connect();
                    }
                }
                ////////////////////////////////////////////////////////////////
            break;
        }
 

pvvx

Активный участник сообщества
Добавил помеченный код в слешах. Третий день пока нормально. До правки каждый день зависал.
Код:
        case EVENT_STAMODE_GOT_IP:
        {
            station_reconnect_off();
#if DEBUGSOO > 1
            os_printf("Station ip:" IPSTR ", mask:" IPSTR ", gw:" IPSTR "\n",
                    IP2STR(&evt->event_info.got_ip.ip),
                    IP2STR(&evt->event_info.got_ip.mask),
                    IP2STR(&evt->event_info.got_ip.gw));
#endif
                open_all_service((wifi_softap_get_station_num() == 0)? 0: 1);
                ////////////////////////////////////////////////////////////////////////
                if(wifi_station_get_connect_status() == STATION_GOT_IP){
                    if(!flg_open_all_service) {// some problem with WiFi here
                        wifi_station_connect();
                    }
                }
                ////////////////////////////////////////////////////////////////
            break;
        }
Дык событие EVENT_STAMODE_GOT_IP приходит когда wifi_station_get_connect_status() == STATION_GOT_IP,
флаг flg_open_all_service ставится в open_all_service() всегда. В итоге условие if(wifi_station_get_connect_status() == STATION_GOT_IP) всегда истинно, а if(!flg_open_all_service) всегда ложно. Что-то не вижу в этой вставке смысла...
И с какими исходниками это? С вчерашними или более старыми? (там изменения были в tsp_srv_conn.c и правка не закончена :) )
 
Последнее редактирование:

pvvx

Активный участник сообщества
@pvvx, да нет, вроде.
Правда у меня запрос на IoT сервер отправляется каждые 20 сек.
А там если сервер завершил соединение, передав FIN+ACK, то всё ok. Но если там к примеру программа с сервером USR-TCP-Test, то она не закрывает соединение сама, а на посылку ей FIN+ACK передает просто ACK. В итоге pcb на ESP остается в состоянии FIN_WAIT_2 на время, по усмотрению LwIP (во много более 20 сек)...
 

Serjkruch

New member
Дык событие EVENT_STAMODE_GOT_IP приходит когда wifi_station_get_connect_status() == STATION_GOT_IP,
флаг flg_open_all_service ставится в open_all_service() всегда. В итоге условие if(wifi_station_get_connect_status() == STATION_GOT_IP) всегда истинно, а if(!flg_open_all_service) всегда ложно. Что-то не вижу в этой вставке смысла...
И с какими исходниками это? С вчерашними или более старыми? (там изменения были в tsp_srv_conn.c и правка не закончена :) )
Перед вчерашними.
Также я выключил sntp.
Затрудняюсь ответить но могу попробовать их удалить и подождать сутки :).
 

pvvx

Активный участник сообщества
У меня сейчас другая беда с SDK версии 2 - со временем что-то портится и идут сплошные "ретрансмиссион" в TCP. Только со STATION, AP модуля работает нормально. Аналогично как и при установке максимальной мощности TX RF. Но мощность ставлю малую - всего 35 единиц, а то мешает другим. Анализатора WiFi пока дома нет - может уходит частота передатчика?
И периодически идут дырки (от 0.2-х до 2-х секунд) на связи вечно открытого TCP соединения (в данном случае через websocket опрашивается INA219 - питание модуля RTL00):
dura.gif
Такого не наблюдается на рядом работающем модуле RTL00... Что там китайцы понаписали в своем закрытом WiFi ?...
------
В общем, пока, выходит, что ESP не тянет режим 802.11n. На 802.11g дырок и прочего меньше...
 
Последнее редактирование:

vad7

Active member
@Serjkruch, у меня этот код стоит в другом месте - в момент отправки новых данных на сервер.
@pvvx, я на нескольких модулях esp01 максимум выставил, работают устойчиво, правда нет постоянной передачи (802.1n).
 

pvvx

Активный участник сообщества
@pvvx, я на нескольких модулях esp01 максимум выставил, работают устойчиво, правда нет постоянной передачи (802.1n).
Сейчас постоянно включен ESP-01 и он измеряет питание у RTL00 (т.е. модули на одном столе). Проверяю режимы sleep у RTL00 - он просыпается, соединяется с той-же AP, что и ESP-01, передает данные и засыпает. При просыпании RTL00, через раз, в общем то чаще то реже, ESP-01 сбивается и у него возникают дыры в передаче. После нескольких таких "дырок", у ESP-01 отваливается Web порт и т.д., но текущее соединение (websock) ещё как-то работает, с вечными реконнект в логе Wireshark... WiFi камера включенная к той-же AP работает без проблем. Ей это не мешает.
Как на ESP делать "Умный дом", если он так боится малейшей помехи?
 
Последнее редактирование:

vad7

Active member
@pvvx, У меня вообще на тестовой NodeMCU v3. (LoLin) при включении виснет.
Далее жмешь reset и норм.

meSDK 1.5.4
Old reset: ExtReset
read-id:7373[10] CfgFlg: 26

Simple WEB version: 0.1.4
Found free IRAM: base: 0x40105938, size: 9928 bytes
System memory:
data : 0x3ffe8000 ~ 0x3ffe8454, len: 1108
rodata: 0x3ffe8454 ~ 0x3ffe8d74, len: 2336
bss : 0x3ffe8d78 ~ 0x3ffeee70, len: 24824
heap : 0x3ffeee70 ~ 0x3fffc000, len: 53648
bssi : 0x40105938 ~ 0x40106540, len: 3080
free : 0x40106540 ~ 0x40108000, len: 6848
Start 'heap' size: 53400 bytes
Set CPU CLK: 80 MHz
read-id:6977[304] ok,size:304 WiFi mode:3 phy:3 dhcp:1/0
AP:ESP8266[7] hiden(0) psw:[0123456789] au:3 chl:5 maxcon:4 beacon:100
ip:192.168.4.1 gw:192.168.4.1 msk:255.255.255.0 mac:1a:fe:34:13:92:51
DHCP ip:192.168.4.2..192.168.4.10
ST:[*****] psw:[******] b:0 e4:8d:8c:23:99:2e ac:1
ip:192.168.0.222 gw:192.168.0.10 msk:255.255.255.0 mac:18:fe:34:13:92:51
sleep:0, rect:30, maxtpw:75, sthn:[ESP_139251]
sleep disable


>>> тут зависон - жму reset <<<<


meSDK 1.5.4
Old reset: ExtReset
read-id:7373[10] CfgFlg: 26

Simple WEB version: 0.1.4
Found free IRAM: base: 0x40105938, size: 9928 bytes
System memory:
data : 0x3ffe8000 ~ 0x3ffe8454, len: 1108
rodata: 0x3ffe8454 ~ 0x3ffe8d74, len: 2336
bss : 0x3ffe8d78 ~ 0x3ffeee70, len: 24824
heap : 0x3ffeee70 ~ 0x3fffc000, len: 53648
bssi : 0x40105938 ~ 0x40106540, len: 3080
free : 0x40106540 ~ 0x40108000, len: 6848
Start 'heap' size: 53400 bytes
Set CPU CLK: 80 MHz
read-id:6977[304] ok,size:304 WiFi mode:3 phy:3 dhcp:1/0
AP:ESP8266[7] hiden(0) psw:[0123456789] au:3 chl:5 maxcon:4 beacon:100
ip:192.168.4.1 gw:192.168.4.1 msk:255.255.255.0 mac:1a:fe:34:13:92:51
DHCP ip:192.168.4.2..192.168.4.10
ST:[******] psw:[*******] b:0 e4:8d:8c:23:99:2e ac:1
ip:192.168.0.222 gw:192.168.0.10 msk:255.255.255.0 mac:18:fe:34:13:92:51
sleep:0, rect:30, maxtpw:75, sthn:[ESP_139251]
sleep disable
ErrWiFiSet: 0x00010000


Disk init: 72 files, addr = 0x00080000
mode : sta(18:fe:34:13:92:51) + softAP(1a:fe:34:13:92:51)
add if0
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
f r0,
SDK Init - Ok
Heap size: 49576 bytes
Flash ID: 001640e0, size: 4194304

...
 

pvvx

Активный участник сообщества
@pvvx, чего-то с наскока не получается установить 40Mhz - прописываю в makefile: SPI_SPEED?=40
При загрузке ets_get_cpu_frequency() возвращает 80 MHz.
Нашел в настройках проекта в Eclipse USE_FIX_QSPI_FLASH=80, убрал - тоже самое.
Прописал принудительно в sdk_config.h =40, не помогло.
Функция set_qspi_flash_cache не отрабатывает. Проверить сейчас не могу.
А в чем смысл downgrade? И не понятно что хотите получить. Загрузку на 40MHz SPI? - это другая версия RapidLoader...
У меня вообще на тестовой NodeMCU v3. (LoLin) при включении виснет.
Далее жмешь reset и норм.
Там старая SDK (meSDK 1.5.4) - давно не интересует.
 
Последнее редактирование:

vad7

Active member
@pvvx, 40MHz для того, чтобы SPI overlap на низкой скорости заработал.
Loader добавляется правильный - на 40.

2.0 для меня пока не актуальна - обновление по wifi не лезет в 512к флеш.
 

Shara

New member
Сейчас постоянно включен ESP-01 и он измеряет питание у RTL00 (т.е. модули на одном столе). Проверяю режимы sleep у RTL00 - он просыпается, соединяется с той-же AP, что и ESP-01, передает данные и засыпает. При просыпании RTL00, через раз, в общем то чаще то реже, ESP-01 сбивается и у него возникают дыры в передаче. После нескольких таких "дырок", у ESP-01 отваливается Web порт и т.д., но текущее соединение (websock) ещё как-то работает, с вечными реконнект в логе Wireshark... WiFi камера включенная к той-же AP работает без проблем. Ей это не мешает.
Как на ESP делать "Умный дом", если он так боится малейшей помехи?
Может с софтом беда? Или брак. У людей годами вон ESP работает и ничего.
 
Сверху Снизу