• Система автоматизации с открытым исходным кодом на базе 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 работает и ничего.
 
Сверху Снизу